Initial import of libdpf.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ryan Henry 2026-09-24 14:08:32 -06:00
commit e4e666f459
4563 changed files with 1690372 additions and 0 deletions

View file

@ -0,0 +1,351 @@
/* Copyright (c) 2021 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TEST_WASM_RELAXED_SIMD_INSN blend
#include "../../../simde/wasm/relaxed-simd.h"
#include "test-relaxed-simd.h"
static int
test_simde_wasm_i8x16_blend(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
int8_t a[sizeof(simde_v128_t) / sizeof(int8_t)];
int8_t b[sizeof(simde_v128_t) / sizeof(int8_t)];
int8_t mask[sizeof(simde_v128_t) / sizeof(int8_t)];
int8_t r[sizeof(simde_v128_t) / sizeof(int8_t)];
} test_vec[] = {
{ { -INT8_C( 47), INT8_C( 48), -INT8_C( 38), INT8_C( 57), -INT8_C( 47), -INT8_C( 71), -INT8_C( 70), INT8_C( 114),
-INT8_C( 114), -INT8_C( 4), -INT8_C( 13), INT8_C( 88), INT8_C( 35), INT8_C( 87), INT8_C( 26), INT8_C( 62) },
{ INT8_C( 118), -INT8_C( 57), INT8_MAX, -INT8_C( 1), INT8_C( 107), -INT8_C( 24), INT8_C( 124), INT8_C( 76),
INT8_C( 41), INT8_C( 29), -INT8_C( 49), -INT8_C( 45), -INT8_C( 119), INT8_C( 57), INT8_C( 79), INT8_C( 90) },
{ INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0),
INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0) },
{ INT8_C( 118), -INT8_C( 57), -INT8_C( 38), -INT8_C( 1), -INT8_C( 47), -INT8_C( 24), -INT8_C( 70), INT8_C( 76),
INT8_C( 41), -INT8_C( 4), -INT8_C( 13), -INT8_C( 45), INT8_C( 35), INT8_C( 87), INT8_C( 26), INT8_C( 90) } },
{ { -INT8_C( 87), INT8_C( 43), INT8_C( 109), INT8_C( 21), INT8_C( 20), -INT8_C( 23), INT8_C( 97), INT8_C( 61),
INT8_C( 6), INT8_C( 48), INT8_C( 17), -INT8_C( 113), INT8_C( 105), INT8_C( 96), -INT8_C( 23), -INT8_C( 45) },
{ -INT8_C( 119), INT8_C( 125), INT8_C( 13), INT8_C( 107), -INT8_C( 52), -INT8_C( 70), -INT8_C( 37), INT8_C( 23),
INT8_C( 90), -INT8_C( 92), -INT8_C( 123), INT8_C( 82), -INT8_C( 122), INT8_C( 49), -INT8_C( 65), INT8_C( 48) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) },
{ -INT8_C( 119), INT8_C( 125), INT8_C( 13), INT8_C( 107), -INT8_C( 52), -INT8_C( 23), INT8_C( 97), INT8_C( 23),
INT8_C( 6), INT8_C( 48), INT8_C( 17), INT8_C( 82), -INT8_C( 122), INT8_C( 96), -INT8_C( 65), -INT8_C( 45) } },
{ { INT8_C( 17), INT8_C( 32), INT8_C( 19), -INT8_C( 35), -INT8_C( 38), -INT8_C( 17), -INT8_C( 12), INT8_C( 53),
-INT8_C( 109), INT8_C( 121), -INT8_C( 121), INT8_C( 25), -INT8_C( 85), INT8_C( 70), INT8_C( 73), INT8_C( 8) },
{ INT8_C( 115), -INT8_C( 114), INT8_C( 121), -INT8_C( 120), INT8_C( 52), INT8_C( 39), -INT8_C( 92), INT8_C( 10),
-INT8_C( 25), INT8_C( 78), INT8_C( 74), INT8_C( 6), -INT8_C( 30), INT8_C( 92), -INT8_C( 81), -INT8_C( 12) },
{ INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) },
{ INT8_C( 115), INT8_C( 32), INT8_C( 19), -INT8_C( 120), -INT8_C( 38), -INT8_C( 17), -INT8_C( 12), INT8_C( 10),
-INT8_C( 25), INT8_C( 78), INT8_C( 74), INT8_C( 25), -INT8_C( 30), INT8_C( 70), INT8_C( 73), INT8_C( 8) } },
{ { INT8_C( 54), INT8_C( 107), INT8_C( 85), INT8_C( 106), -INT8_C( 109), -INT8_C( 7), INT8_C( 117), INT8_C( 122),
INT8_C( 71), -INT8_C( 65), INT8_MIN, INT8_C( 42), INT8_C( 27), INT8_C( 47), INT8_C( 30), -INT8_C( 104) },
{ -INT8_C( 14), -INT8_C( 17), -INT8_C( 17), -INT8_C( 93), -INT8_C( 75), INT8_C( 123), -INT8_C( 24), -INT8_C( 11),
-INT8_C( 114), INT8_C( 70), -INT8_C( 33), -INT8_C( 25), -INT8_C( 19), -INT8_C( 46), -INT8_C( 76), INT8_C( 35) },
{ INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
-INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) },
{ -INT8_C( 14), -INT8_C( 17), INT8_C( 85), INT8_C( 106), -INT8_C( 75), INT8_C( 123), -INT8_C( 24), -INT8_C( 11),
INT8_C( 71), -INT8_C( 65), -INT8_C( 33), INT8_C( 42), INT8_C( 27), INT8_C( 47), -INT8_C( 76), -INT8_C( 104) } },
{ { -INT8_C( 127), INT8_C( 100), -INT8_C( 112), INT8_C( 54), -INT8_C( 33), INT8_C( 120), INT8_C( 43), INT8_C( 109),
-INT8_C( 66), INT8_C( 11), INT8_C( 85), -INT8_C( 85), -INT8_C( 35), INT8_C( 9), -INT8_C( 49), INT8_C( 26) },
{ INT8_C( 18), INT8_C( 93), -INT8_C( 21), INT8_C( 20), INT8_C( 96), INT8_C( 53), INT8_C( 93), INT8_C( 34),
INT8_C( 0), -INT8_C( 47), -INT8_C( 1), -INT8_C( 5), INT8_C( 98), INT8_C( 117), -INT8_C( 25), -INT8_C( 29) },
{ -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1) },
{ -INT8_C( 127), INT8_C( 93), -INT8_C( 21), INT8_C( 54), -INT8_C( 33), INT8_C( 53), INT8_C( 93), INT8_C( 109),
INT8_C( 0), -INT8_C( 47), -INT8_C( 1), -INT8_C( 5), -INT8_C( 35), INT8_C( 117), -INT8_C( 25), INT8_C( 26) } },
{ { -INT8_C( 123), INT8_C( 51), -INT8_C( 86), -INT8_C( 27), INT8_C( 104), INT8_C( 8), INT8_C( 7), INT8_C( 105),
-INT8_C( 39), INT8_C( 6), INT8_C( 100), INT8_C( 59), INT8_C( 123), INT8_C( 75), INT8_C( 31), INT8_C( 85) },
{ -INT8_C( 61), INT8_C( 57), INT8_C( 14), -INT8_C( 78), INT8_C( 126), INT8_C( 52), INT8_C( 96), -INT8_C( 49),
-INT8_C( 80), -INT8_C( 71), -INT8_C( 4), INT8_C( 52), -INT8_C( 31), INT8_C( 68), -INT8_C( 53), INT8_C( 102) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) },
{ -INT8_C( 61), INT8_C( 57), INT8_C( 14), -INT8_C( 27), INT8_C( 126), INT8_C( 52), INT8_C( 96), -INT8_C( 49),
-INT8_C( 80), INT8_C( 6), INT8_C( 100), INT8_C( 59), INT8_C( 123), INT8_C( 75), -INT8_C( 53), INT8_C( 85) } },
{ { -INT8_C( 22), INT8_C( 55), INT8_C( 110), INT8_C( 104), INT8_C( 107), -INT8_C( 50), INT8_C( 55), INT8_C( 27),
-INT8_C( 121), INT8_C( 52), INT8_C( 80), INT8_C( 104), INT8_C( 120), INT8_C( 27), -INT8_C( 50), -INT8_C( 16) },
{ -INT8_C( 112), INT8_C( 25), -INT8_C( 48), INT8_C( 14), INT8_C( 107), INT8_C( 25), INT8_C( 100), -INT8_C( 61),
-INT8_C( 58), -INT8_C( 10), -INT8_C( 105), -INT8_C( 66), -INT8_C( 89), -INT8_C( 64), INT8_C( 122), -INT8_C( 111) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0) },
{ -INT8_C( 22), INT8_C( 55), INT8_C( 110), INT8_C( 14), INT8_C( 107), INT8_C( 25), INT8_C( 100), -INT8_C( 61),
-INT8_C( 58), INT8_C( 52), INT8_C( 80), INT8_C( 104), INT8_C( 120), -INT8_C( 64), -INT8_C( 50), -INT8_C( 111) } },
{ { -INT8_C( 116), -INT8_C( 98), -INT8_C( 120), -INT8_C( 9), -INT8_C( 73), -INT8_C( 20), -INT8_C( 70), INT8_C( 125),
-INT8_C( 29), INT8_C( 82), INT8_C( 59), -INT8_C( 118), INT8_C( 18), -INT8_C( 75), INT8_C( 28), INT8_C( 10) },
{ -INT8_C( 99), INT8_C( 22), INT8_C( 109), INT8_C( 83), INT8_C( 71), -INT8_C( 21), -INT8_C( 112), -INT8_C( 83),
-INT8_C( 70), INT8_C( 53), -INT8_C( 117), -INT8_C( 93), -INT8_C( 88), INT8_C( 89), INT8_C( 29), INT8_C( 52) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1) },
{ -INT8_C( 116), -INT8_C( 98), INT8_C( 109), -INT8_C( 9), -INT8_C( 73), -INT8_C( 20), -INT8_C( 112), -INT8_C( 83),
-INT8_C( 70), INT8_C( 53), INT8_C( 59), -INT8_C( 93), -INT8_C( 88), INT8_C( 89), INT8_C( 29), INT8_C( 10) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t mask = simde_wasm_v128_load(test_vec[i].mask);
simde_v128_t r = simde_wasm_i8x16_blend(a, b, mask);
simde_test_wasm_i8x16_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_i8x16_random(),
b = simde_test_wasm_i8x16_random(),
mask = simde_wasm_i8x16_shr(simde_test_wasm_i8x16_random(), 7),
r;
r = simde_wasm_i8x16_blend(a, b, mask);
simde_test_wasm_i8x16_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i8x16_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i8x16_write(3, mask, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i8x16_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_i16x8_blend(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
int16_t a[sizeof(simde_v128_t) / sizeof(int16_t)];
int16_t b[sizeof(simde_v128_t) / sizeof(int16_t)];
int16_t mask[sizeof(simde_v128_t) / sizeof(int16_t)];
int16_t r[sizeof(simde_v128_t) / sizeof(int16_t)];
} test_vec[] = {
{ { INT16_C( 32134), -INT16_C( 14619), -INT16_C( 12998), INT16_C( 16363), INT16_C( 31700), -INT16_C( 5370), -INT16_C( 15572), -INT16_C( 29959) },
{ INT16_C( 31938), INT16_C( 30682), -INT16_C( 21172), -INT16_C( 2301), INT16_C( 762), INT16_C( 22561), -INT16_C( 11973), -INT16_C( 16115) },
{ -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0) },
{ INT16_C( 32134), -INT16_C( 14619), -INT16_C( 21172), INT16_C( 16363), INT16_C( 31700), INT16_C( 22561), -INT16_C( 11973), -INT16_C( 16115) } },
{ { INT16_C( 32501), INT16_C( 16842), -INT16_C( 13012), INT16_C( 9784), INT16_C( 23248), INT16_C( 2942), -INT16_C( 29909), INT16_C( 31436) },
{ INT16_C( 21374), INT16_C( 15875), -INT16_C( 13370), -INT16_C( 18990), INT16_C( 21145), INT16_C( 10959), INT16_C( 29899), -INT16_C( 16002) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) },
{ INT16_C( 21374), INT16_C( 15875), -INT16_C( 13370), INT16_C( 9784), INT16_C( 23248), INT16_C( 2942), -INT16_C( 29909), INT16_C( 31436) } },
{ { INT16_C( 15632), -INT16_C( 10486), -INT16_C( 8952), -INT16_C( 24180), INT16_C( 23343), -INT16_C( 1076), INT16_C( 19151), -INT16_C( 15684) },
{ -INT16_C( 16750), -INT16_C( 22304), INT16_C( 9721), -INT16_C( 29042), INT16_C( 32744), INT16_C( 13903), -INT16_C( 30404), INT16_C( 19715) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0) },
{ -INT16_C( 16750), -INT16_C( 10486), -INT16_C( 8952), -INT16_C( 29042), INT16_C( 32744), -INT16_C( 1076), INT16_C( 19151), INT16_C( 19715) } },
{ { INT16_C( 32143), -INT16_C( 30270), INT16_C( 20642), -INT16_C( 30185), INT16_C( 26320), INT16_C( 3265), -INT16_C( 15120), -INT16_C( 18599) },
{ INT16_C( 32209), -INT16_C( 17274), -INT16_C( 2259), INT16_C( 14806), -INT16_C( 5324), -INT16_C( 17644), -INT16_C( 20036), INT16_C( 19413) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1) },
{ INT16_C( 32143), -INT16_C( 30270), INT16_C( 20642), -INT16_C( 30185), -INT16_C( 5324), -INT16_C( 17644), -INT16_C( 20036), -INT16_C( 18599) } },
{ { -INT16_C( 32613), -INT16_C( 14226), INT16_C( 17527), -INT16_C( 21503), INT16_C( 5423), -INT16_C( 5273), INT16_C( 15558), -INT16_C( 2762) },
{ INT16_C( 3027), -INT16_C( 17466), INT16_C( 8695), INT16_C( 18802), INT16_C( 13886), INT16_C( 7820), -INT16_C( 31404), -INT16_C( 4144) },
{ INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) },
{ INT16_C( 3027), -INT16_C( 17466), INT16_C( 17527), -INT16_C( 21503), INT16_C( 5423), -INT16_C( 5273), INT16_C( 15558), -INT16_C( 2762) } },
{ { INT16_C( 20702), -INT16_C( 10917), -INT16_C( 12687), -INT16_C( 20706), -INT16_C( 22012), INT16_C( 22734), -INT16_C( 25040), INT16_C( 13639) },
{ -INT16_C( 35), INT16_C( 24498), -INT16_C( 9288), -INT16_C( 31215), -INT16_C( 21140), INT16_C( 14619), -INT16_C( 23168), INT16_C( 24281) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0) },
{ -INT16_C( 35), INT16_C( 24498), -INT16_C( 9288), -INT16_C( 31215), -INT16_C( 22012), INT16_C( 14619), -INT16_C( 25040), INT16_C( 24281) } },
{ { INT16_C( 5286), INT16_C( 24255), -INT16_C( 12048), INT16_C( 23781), INT16_C( 126), -INT16_C( 363), INT16_C( 28326), -INT16_C( 25763) },
{ -INT16_C( 28509), -INT16_C( 23038), INT16_C( 6626), -INT16_C( 8274), INT16_C( 3837), -INT16_C( 32757), INT16_C( 28085), INT16_C( 23776) },
{ -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) },
{ INT16_C( 5286), -INT16_C( 23038), -INT16_C( 12048), INT16_C( 23781), INT16_C( 3837), -INT16_C( 32757), INT16_C( 28085), INT16_C( 23776) } },
{ { -INT16_C( 6950), -INT16_C( 17125), -INT16_C( 13827), -INT16_C( 1380), -INT16_C( 22569), -INT16_C( 29317), INT16_C( 23317), -INT16_C( 26647) },
{ -INT16_C( 23557), INT16_C( 27657), -INT16_C( 10429), -INT16_C( 7334), INT16_C( 18234), INT16_C( 2857), INT16_C( 2705), INT16_C( 27776) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) },
{ -INT16_C( 6950), -INT16_C( 17125), -INT16_C( 13827), -INT16_C( 7334), INT16_C( 18234), -INT16_C( 29317), INT16_C( 23317), -INT16_C( 26647) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t mask = simde_wasm_v128_load(test_vec[i].mask);
simde_v128_t r = simde_wasm_i16x8_blend(a, b, mask);
simde_test_wasm_i16x8_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_i16x8_random(),
b = simde_test_wasm_i16x8_random(),
mask = simde_wasm_i16x8_shr(simde_test_wasm_i16x8_random(), 15),
r;
r = simde_wasm_i16x8_blend(a, b, mask);
simde_test_wasm_i16x8_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i16x8_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i16x8_write(3, mask, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i16x8_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_i32x4_blend(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
int32_t a[sizeof(simde_v128_t) / sizeof(int32_t)];
int32_t b[sizeof(simde_v128_t) / sizeof(int32_t)];
int32_t mask[sizeof(simde_v128_t) / sizeof(int32_t)];
int32_t r[sizeof(simde_v128_t) / sizeof(int32_t)];
} test_vec[] = {
{ { -INT32_C( 550903393), INT32_C( 915823364), -INT32_C( 1353539952), INT32_C( 1660758645) },
{ INT32_C( 1657433796), -INT32_C( 417913372), -INT32_C( 522906996), INT32_C( 1171144101) },
{ INT32_C( 0), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) },
{ INT32_C( 1657433796), INT32_C( 915823364), -INT32_C( 1353539952), INT32_C( 1660758645) } },
{ { -INT32_C( 503514115), -INT32_C( 1396174048), -INT32_C( 879976922), -INT32_C( 99591461) },
{ -INT32_C( 1541655214), INT32_C( 1233614320), -INT32_C( 149415647), -INT32_C( 1500427864) },
{ INT32_C( 0), -INT32_C( 1), -INT32_C( 1), INT32_C( 0) },
{ -INT32_C( 1541655214), -INT32_C( 1396174048), -INT32_C( 879976922), -INT32_C( 1500427864) } },
{ { -INT32_C( 923868968), INT32_C( 1980855637), INT32_C( 913123726), -INT32_C( 1227030926) },
{ INT32_C( 756704396), -INT32_C( 1561056332), -INT32_C( 1083472184), INT32_C( 17379113) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), -INT32_C( 1) },
{ INT32_C( 756704396), INT32_C( 1980855637), -INT32_C( 1083472184), -INT32_C( 1227030926) } },
{ { INT32_C( 620775537), INT32_C( 1002959987), -INT32_C( 1527106950), INT32_C( 1889862497) },
{ INT32_C( 1725263866), INT32_C( 1314959434), INT32_C( 1069912568), INT32_C( 252900254) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) },
{ INT32_C( 620775537), INT32_C( 1002959987), -INT32_C( 1527106950), INT32_C( 1889862497) } },
{ { -INT32_C( 2092379079), INT32_C( 2110957700), -INT32_C( 675506375), -INT32_C( 974729334) },
{ -INT32_C( 395109663), INT32_C( 1130978325), INT32_C( 668110400), -INT32_C( 1844915880) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) },
{ -INT32_C( 395109663), INT32_C( 1130978325), INT32_C( 668110400), -INT32_C( 1844915880) } },
{ { INT32_C( 553402891), -INT32_C( 547134049), INT32_C( 1275475443), -INT32_C( 1377956345) },
{ INT32_C( 1490547551), INT32_C( 1519026139), INT32_C( 375624931), -INT32_C( 1876282747) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) },
{ INT32_C( 1490547551), -INT32_C( 547134049), INT32_C( 375624931), -INT32_C( 1876282747) } },
{ { INT32_C( 2025772445), INT32_C( 936528212), INT32_C( 1649227485), -INT32_C( 571312280) },
{ INT32_C( 737256350), INT32_C( 11265207), -INT32_C( 447645731), -INT32_C( 1102361055) },
{ INT32_C( 0), INT32_C( 0), -INT32_C( 1), INT32_C( 0) },
{ INT32_C( 737256350), INT32_C( 11265207), INT32_C( 1649227485), -INT32_C( 1102361055) } },
{ { -INT32_C( 549685464), INT32_C( 971040603), INT32_C( 2132685150), -INT32_C( 1556190849) },
{ -INT32_C( 971344525), -INT32_C( 1091057282), INT32_C( 929467076), INT32_C( 944368399) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) },
{ -INT32_C( 549685464), INT32_C( 971040603), INT32_C( 2132685150), -INT32_C( 1556190849) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t mask = simde_wasm_v128_load(test_vec[i].mask);
simde_v128_t r = simde_wasm_i32x4_blend(a, b, mask);
simde_test_wasm_i32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_i32x4_random(),
b = simde_test_wasm_i32x4_random(),
mask = simde_wasm_i32x4_shr(simde_test_wasm_i32x4_random(), 31),
r;
r = simde_wasm_i32x4_blend(a, b, mask);
simde_test_wasm_i32x4_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i32x4_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i32x4_write(3, mask, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_i64x2_blend(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
int64_t a[sizeof(simde_v128_t) / sizeof(int64_t)];
int64_t b[sizeof(simde_v128_t) / sizeof(int64_t)];
int64_t mask[sizeof(simde_v128_t) / sizeof(int64_t)];
int64_t r[sizeof(simde_v128_t) / sizeof(int64_t)];
} test_vec[] = {
{ { -INT64_C( 920230559648029186), -INT64_C( 1260599374326882247) },
{ -INT64_C( 5174174656278783751), INT64_C( 227901295051177144) },
{ -INT64_C( 1), -INT64_C( 1) },
{ -INT64_C( 920230559648029186), -INT64_C( 1260599374326882247) } },
{ { -INT64_C( 2416918810298711507), -INT64_C( 7861527371947059491) },
{ INT64_C( 8969767625585485343), INT64_C( 5835319466009005665) },
{ INT64_C( 0), INT64_C( 0) },
{ INT64_C( 8969767625585485343), INT64_C( 5835319466009005665) } },
{ { -INT64_C( 6613997556779106663), -INT64_C( 8332271935948416534) },
{ INT64_C( 5040138132682205949), INT64_C( 810520879441068029) },
{ INT64_C( 0), INT64_C( 0) },
{ INT64_C( 5040138132682205949), INT64_C( 810520879441068029) } },
{ { -INT64_C( 8543658848418766532), -INT64_C( 1977126302010339822) },
{ -INT64_C( 1668121512941300234), INT64_C( 6547745806153174316) },
{ -INT64_C( 1), INT64_C( 0) },
{ -INT64_C( 8543658848418766532), INT64_C( 6547745806153174316) } },
{ { INT64_C( 4703844971547029517), -INT64_C( 9137620180819994697) },
{ INT64_C( 2709879060874572645), -INT64_C( 8645716682788060227) },
{ -INT64_C( 1), -INT64_C( 1) },
{ INT64_C( 4703844971547029517), -INT64_C( 9137620180819994697) } },
{ { -INT64_C( 199729314788289681), -INT64_C( 1859452044379490002) },
{ INT64_C( 806334851516536955), -INT64_C( 1818383909588779911) },
{ INT64_C( 0), INT64_C( 0) },
{ INT64_C( 806334851516536955), -INT64_C( 1818383909588779911) } },
{ { INT64_C( 1977869283759027488), -INT64_C( 8293437078112952695) },
{ INT64_C( 5010054574651597405), -INT64_C( 8803420830434632438) },
{ -INT64_C( 1), -INT64_C( 1) },
{ INT64_C( 1977869283759027488), -INT64_C( 8293437078112952695) } },
{ { -INT64_C( 5337968786438725489), INT64_C( 8863428825777084183) },
{ -INT64_C( 4203068692968641367), -INT64_C( 5930079492408315549) },
{ -INT64_C( 1), INT64_C( 0) },
{ -INT64_C( 5337968786438725489), -INT64_C( 5930079492408315549) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t mask = simde_wasm_v128_load(test_vec[i].mask);
simde_v128_t r = simde_wasm_i64x2_blend(a, b, mask);
simde_test_wasm_i64x2_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_i64x2_random(),
b = simde_test_wasm_i64x2_random(),
mask = simde_wasm_i64x2_shr(simde_test_wasm_i64x2_random(), 63),
r;
r = simde_wasm_i64x2_blend(a, b, mask);
simde_test_wasm_i64x2_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i64x2_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i64x2_write(3, mask, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i64x2_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i8x16_blend)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i16x8_blend)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i32x4_blend)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i64x2_blend)
SIMDE_TEST_FUNC_LIST_END
#include "test-relaxed-simd-footer.h"

View file

@ -0,0 +1,183 @@
/* Copyright (c) 2021 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TEST_WASM_RELAXED_SIMD_INSN fma
#include "../../../simde/wasm/relaxed-simd.h"
#include "test-relaxed-simd.h"
static int
test_simde_wasm_f32x4_fma(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float32 a[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 b[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 c[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 r[sizeof(simde_v128_t) / sizeof(simde_float32)];
} test_vec[] = {
#if !defined(SIMDE_FAST_MATH)
{ { SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 35.68), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -774.53) },
{ SIMDE_FLOAT32_C( 759.66), SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -774.53) },
{ SIMDE_FLOAT32_C( 759.66), SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -774.53) },
{ SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C(599122.25) } },
#endif
{ { SIMDE_FLOAT32_C( 718.59), SIMDE_FLOAT32_C( -622.20), SIMDE_FLOAT32_C( -12.71), SIMDE_FLOAT32_C( 145.90) },
{ SIMDE_FLOAT32_C( 493.69), SIMDE_FLOAT32_C( -413.24), SIMDE_FLOAT32_C( -414.24), SIMDE_FLOAT32_C( 394.66) },
{ SIMDE_FLOAT32_C( 493.69), SIMDE_FLOAT32_C( -413.24), SIMDE_FLOAT32_C( -414.24), SIMDE_FLOAT32_C( 394.66) },
{ SIMDE_FLOAT32_C(244448.41), SIMDE_FLOAT32_C(170145.09), SIMDE_FLOAT32_C(171582.06), SIMDE_FLOAT32_C(155902.42) } },
{ { SIMDE_FLOAT32_C( 308.42), SIMDE_FLOAT32_C( 86.05), SIMDE_FLOAT32_C( 150.72), SIMDE_FLOAT32_C( -861.13) },
{ SIMDE_FLOAT32_C( -705.94), SIMDE_FLOAT32_C( 541.94), SIMDE_FLOAT32_C( -888.14), SIMDE_FLOAT32_C( 233.26) },
{ SIMDE_FLOAT32_C( -705.94), SIMDE_FLOAT32_C( 541.94), SIMDE_FLOAT32_C( -888.14), SIMDE_FLOAT32_C( 233.26) },
{ SIMDE_FLOAT32_C(498659.69), SIMDE_FLOAT32_C(293785.03), SIMDE_FLOAT32_C(788943.44), SIMDE_FLOAT32_C( 53549.10) } },
{ { SIMDE_FLOAT32_C( -756.83), SIMDE_FLOAT32_C( 995.47), SIMDE_FLOAT32_C( 603.58), SIMDE_FLOAT32_C( -894.80) },
{ SIMDE_FLOAT32_C( -794.79), SIMDE_FLOAT32_C( 27.52), SIMDE_FLOAT32_C( -472.09), SIMDE_FLOAT32_C( -978.18) },
{ SIMDE_FLOAT32_C( -794.79), SIMDE_FLOAT32_C( 27.52), SIMDE_FLOAT32_C( -472.09), SIMDE_FLOAT32_C( -978.18) },
{ SIMDE_FLOAT32_C(630934.31), SIMDE_FLOAT32_C( 1752.82), SIMDE_FLOAT32_C(223472.55), SIMDE_FLOAT32_C(955941.31) } },
{ { SIMDE_FLOAT32_C( -936.80), SIMDE_FLOAT32_C( -668.74), SIMDE_FLOAT32_C( 863.15), SIMDE_FLOAT32_C( 822.85) },
{ SIMDE_FLOAT32_C( 593.95), SIMDE_FLOAT32_C( 59.13), SIMDE_FLOAT32_C( 718.77), SIMDE_FLOAT32_C( 312.54) },
{ SIMDE_FLOAT32_C( 593.95), SIMDE_FLOAT32_C( 59.13), SIMDE_FLOAT32_C( 718.77), SIMDE_FLOAT32_C( 312.54) },
{ SIMDE_FLOAT32_C(351839.81), SIMDE_FLOAT32_C( 2827.62), SIMDE_FLOAT32_C(517493.50), SIMDE_FLOAT32_C( 98504.11) } },
{ { SIMDE_FLOAT32_C( 436.93), SIMDE_FLOAT32_C( -293.94), SIMDE_FLOAT32_C( -541.56), SIMDE_FLOAT32_C( -69.39) },
{ SIMDE_FLOAT32_C( 292.82), SIMDE_FLOAT32_C( 44.21), SIMDE_FLOAT32_C( -674.72), SIMDE_FLOAT32_C( -398.76) },
{ SIMDE_FLOAT32_C( 292.82), SIMDE_FLOAT32_C( 44.21), SIMDE_FLOAT32_C( -674.72), SIMDE_FLOAT32_C( -398.76) },
{ SIMDE_FLOAT32_C( 86180.48), SIMDE_FLOAT32_C( 1660.58), SIMDE_FLOAT32_C(454705.47), SIMDE_FLOAT32_C(158940.16) } },
{ { SIMDE_FLOAT32_C( -869.74), SIMDE_FLOAT32_C( 475.99), SIMDE_FLOAT32_C( -259.88), SIMDE_FLOAT32_C( -575.68) },
{ SIMDE_FLOAT32_C( 17.93), SIMDE_FLOAT32_C( -148.02), SIMDE_FLOAT32_C( 657.58), SIMDE_FLOAT32_C( 261.10) },
{ SIMDE_FLOAT32_C( 17.93), SIMDE_FLOAT32_C( -148.02), SIMDE_FLOAT32_C( 657.58), SIMDE_FLOAT32_C( 261.10) },
{ SIMDE_FLOAT32_C( -548.26), SIMDE_FLOAT32_C( 22385.91), SIMDE_FLOAT32_C(432151.59), SIMDE_FLOAT32_C( 67597.53) } },
{ { SIMDE_FLOAT32_C( -152.55), SIMDE_FLOAT32_C( 261.17), SIMDE_FLOAT32_C( 366.30), SIMDE_FLOAT32_C( 52.65) },
{ SIMDE_FLOAT32_C( -711.32), SIMDE_FLOAT32_C( 894.21), SIMDE_FLOAT32_C( 74.47), SIMDE_FLOAT32_C( -648.12) },
{ SIMDE_FLOAT32_C( -711.32), SIMDE_FLOAT32_C( 894.21), SIMDE_FLOAT32_C( 74.47), SIMDE_FLOAT32_C( -648.12) },
{ SIMDE_FLOAT32_C(505823.59), SIMDE_FLOAT32_C(799872.75), SIMDE_FLOAT32_C( 5912.08), SIMDE_FLOAT32_C(420112.19) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t c = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t r = simde_wasm_f32x4_fma(a, b, c);
simde_test_wasm_f32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float32 inputs[8 * 2 * (sizeof(simde_v128_t) / sizeof(simde_float32))];
simde_test_wasm_f32x4_random_full(8, 2, inputs, -SIMDE_FLOAT32_C(1000.0), SIMDE_FLOAT32_C(1000.0), HEDLEY_STATIC_CAST(SimdeTestVecFloatType, SIMDE_TEST_VEC_FLOAT_NAN | SIMDE_TEST_VEC_FLOAT_EQUAL));
for (size_t i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 0),
b = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 1),
c = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 1),
r;
r = simde_wasm_f32x4_fma(a, b, c);
simde_test_wasm_f32x4_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_f32x4_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f32x4_write(3, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_f64x2_fma(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float64 a[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 b[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 c[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 r[sizeof(simde_v128_t) / sizeof(simde_float64)];
} test_vec[] = {
#if !defined(SIMDE_FAST_MATH)
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -621.40) },
{ SIMDE_FLOAT64_C( 52.22), SIMDE_MATH_NAN },
{ SIMDE_FLOAT64_C( 52.22), SIMDE_MATH_NAN },
{ SIMDE_MATH_NAN, SIMDE_MATH_NAN } },
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -435.92) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 407.34) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 407.34) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C(165489.96) } },
#endif
{ { SIMDE_FLOAT64_C( -930.00), SIMDE_FLOAT64_C( -720.45) },
{ SIMDE_FLOAT64_C( 96.66), SIMDE_FLOAT64_C( 326.47) },
{ SIMDE_FLOAT64_C( 96.66), SIMDE_FLOAT64_C( 326.47) },
{ SIMDE_FLOAT64_C( 8413.16), SIMDE_FLOAT64_C(105862.21) } },
{ { SIMDE_FLOAT64_C( -52.84), SIMDE_FLOAT64_C( 875.57) },
{ SIMDE_FLOAT64_C( -832.42), SIMDE_FLOAT64_C( -266.54) },
{ SIMDE_FLOAT64_C( -832.42), SIMDE_FLOAT64_C( -266.54) },
{ SIMDE_FLOAT64_C(692870.22), SIMDE_FLOAT64_C( 71919.14) } },
{ { SIMDE_FLOAT64_C( 582.06), SIMDE_FLOAT64_C( 390.67) },
{ SIMDE_FLOAT64_C( 713.92), SIMDE_FLOAT64_C( -481.53) },
{ SIMDE_FLOAT64_C( 713.92), SIMDE_FLOAT64_C( -481.53) },
{ SIMDE_FLOAT64_C(510263.83), SIMDE_FLOAT64_C(232261.81) } },
{ { SIMDE_FLOAT64_C( 246.83), SIMDE_FLOAT64_C( -742.77) },
{ SIMDE_FLOAT64_C( 332.12), SIMDE_FLOAT64_C( -798.45) },
{ SIMDE_FLOAT64_C( 332.12), SIMDE_FLOAT64_C( -798.45) },
{ SIMDE_FLOAT64_C(110550.52), SIMDE_FLOAT64_C(636779.63) } },
{ { SIMDE_FLOAT64_C( 180.40), SIMDE_FLOAT64_C( -132.97) },
{ SIMDE_FLOAT64_C( 916.06), SIMDE_FLOAT64_C( 698.44) },
{ SIMDE_FLOAT64_C( 916.06), SIMDE_FLOAT64_C( 698.44) },
{ SIMDE_FLOAT64_C(839346.32), SIMDE_FLOAT64_C(487685.46) } },
{ { SIMDE_FLOAT64_C( -79.04), SIMDE_FLOAT64_C( 600.83) },
{ SIMDE_FLOAT64_C( -871.27), SIMDE_FLOAT64_C( 389.47) },
{ SIMDE_FLOAT64_C( -871.27), SIMDE_FLOAT64_C( 389.47) },
{ SIMDE_FLOAT64_C(759032.37), SIMDE_FLOAT64_C(152287.71) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t c = simde_wasm_v128_load(test_vec[i].c);
simde_v128_t r = simde_wasm_f64x2_fma(a, b, c);
simde_test_wasm_f64x2_assert_equal(r, simde_wasm_v128_load(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float64 inputs[8 * 2 * (sizeof(simde_v128_t) / sizeof(simde_float64))];
simde_test_wasm_f64x2_random_full(8, 2, inputs, -SIMDE_FLOAT64_C(1000.0), SIMDE_FLOAT64_C(1000.0), HEDLEY_STATIC_CAST(SimdeTestVecFloatType, SIMDE_TEST_VEC_FLOAT_NAN));
for (size_t i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 0),
b = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 1),
c = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 1),
r;
r = simde_wasm_f64x2_fma(a, b, c);
simde_test_wasm_f64x2_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_f64x2_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f64x2_write(3, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f64x2_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_f32x4_fma)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_f64x2_fma)
SIMDE_TEST_FUNC_LIST_END
#include "test-relaxed-simd-footer.h"

View file

@ -0,0 +1,183 @@
/* Copyright (c) 2021 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TEST_WASM_RELAXED_SIMD_INSN fms
#include "../../../simde/wasm/relaxed-simd.h"
#include "test-relaxed-simd.h"
static int
test_simde_wasm_f32x4_fms(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float32 a[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 b[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 c[sizeof(simde_v128_t) / sizeof(simde_float32)];
simde_float32 r[sizeof(simde_v128_t) / sizeof(simde_float32)];
} test_vec[] = {
#if !defined(SIMDE_FAST_MATH)
{ { SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -993.27), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 417.41) },
{ SIMDE_FLOAT32_C( -485.37), SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 417.41) },
{ SIMDE_FLOAT32_C( -485.37), SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 417.41) },
{ SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C(-173813.70) } },
#endif
{ { SIMDE_FLOAT32_C( -135.40), SIMDE_FLOAT32_C( -44.03), SIMDE_FLOAT32_C( 309.21), SIMDE_FLOAT32_C( 776.94) },
{ SIMDE_FLOAT32_C( 285.44), SIMDE_FLOAT32_C( 449.56), SIMDE_FLOAT32_C( -32.12), SIMDE_FLOAT32_C( 455.56) },
{ SIMDE_FLOAT32_C( 285.44), SIMDE_FLOAT32_C( 449.56), SIMDE_FLOAT32_C( -32.12), SIMDE_FLOAT32_C( 455.56) },
{ SIMDE_FLOAT32_C(-81611.39), SIMDE_FLOAT32_C(-202148.22), SIMDE_FLOAT32_C( -722.48), SIMDE_FLOAT32_C(-206757.97) } },
{ { SIMDE_FLOAT32_C( -255.61), SIMDE_FLOAT32_C( -375.49), SIMDE_FLOAT32_C( -500.83), SIMDE_FLOAT32_C( -933.43) },
{ SIMDE_FLOAT32_C( 338.55), SIMDE_FLOAT32_C( -93.11), SIMDE_FLOAT32_C( 370.59), SIMDE_FLOAT32_C( -687.41) },
{ SIMDE_FLOAT32_C( 338.55), SIMDE_FLOAT32_C( -93.11), SIMDE_FLOAT32_C( 370.59), SIMDE_FLOAT32_C( -687.41) },
{ SIMDE_FLOAT32_C(-114871.70), SIMDE_FLOAT32_C( -9044.96), SIMDE_FLOAT32_C(-137837.78), SIMDE_FLOAT32_C(-473465.91) } },
{ { SIMDE_FLOAT32_C( 898.51), SIMDE_FLOAT32_C( 628.53), SIMDE_FLOAT32_C( 902.40), SIMDE_FLOAT32_C( 62.33) },
{ SIMDE_FLOAT32_C( -446.25), SIMDE_FLOAT32_C( 645.33), SIMDE_FLOAT32_C( -460.63), SIMDE_FLOAT32_C( 754.66) },
{ SIMDE_FLOAT32_C( -446.25), SIMDE_FLOAT32_C( 645.33), SIMDE_FLOAT32_C( -460.63), SIMDE_FLOAT32_C( 754.66) },
{ SIMDE_FLOAT32_C(-198240.55), SIMDE_FLOAT32_C(-415822.31), SIMDE_FLOAT32_C(-211277.59), SIMDE_FLOAT32_C(-569449.38) } },
{ { SIMDE_FLOAT32_C( 652.06), SIMDE_FLOAT32_C( 329.68), SIMDE_FLOAT32_C( -821.45), SIMDE_FLOAT32_C( -833.31) },
{ SIMDE_FLOAT32_C( -319.39), SIMDE_FLOAT32_C( 484.50), SIMDE_FLOAT32_C( 1.43), SIMDE_FLOAT32_C( 545.21) },
{ SIMDE_FLOAT32_C( -319.39), SIMDE_FLOAT32_C( 484.50), SIMDE_FLOAT32_C( 1.43), SIMDE_FLOAT32_C( 545.21) },
{ SIMDE_FLOAT32_C(-101357.92), SIMDE_FLOAT32_C(-234410.56), SIMDE_FLOAT32_C( -823.49), SIMDE_FLOAT32_C(-298087.28) } },
{ { SIMDE_FLOAT32_C( -559.53), SIMDE_FLOAT32_C( -689.36), SIMDE_FLOAT32_C( 322.15), SIMDE_FLOAT32_C( 725.90) },
{ SIMDE_FLOAT32_C( 760.20), SIMDE_FLOAT32_C( -709.97), SIMDE_FLOAT32_C( 181.46), SIMDE_FLOAT32_C( -495.41) },
{ SIMDE_FLOAT32_C( 760.20), SIMDE_FLOAT32_C( -709.97), SIMDE_FLOAT32_C( 181.46), SIMDE_FLOAT32_C( -495.41) },
{ SIMDE_FLOAT32_C(-578463.56), SIMDE_FLOAT32_C(-504746.72), SIMDE_FLOAT32_C(-32605.58), SIMDE_FLOAT32_C(-244705.17) } },
{ { SIMDE_FLOAT32_C( -85.45), SIMDE_FLOAT32_C( 680.63), SIMDE_FLOAT32_C( -428.83), SIMDE_FLOAT32_C( -746.90) },
{ SIMDE_FLOAT32_C( -412.48), SIMDE_FLOAT32_C( 941.76), SIMDE_FLOAT32_C( -434.31), SIMDE_FLOAT32_C( -513.97) },
{ SIMDE_FLOAT32_C( -412.48), SIMDE_FLOAT32_C( 941.76), SIMDE_FLOAT32_C( -434.31), SIMDE_FLOAT32_C( -513.97) },
{ SIMDE_FLOAT32_C(-170225.22), SIMDE_FLOAT32_C(-886231.31), SIMDE_FLOAT32_C(-189054.00), SIMDE_FLOAT32_C(-264912.03) } },
{ { SIMDE_FLOAT32_C( 570.28), SIMDE_FLOAT32_C( -531.92), SIMDE_FLOAT32_C( 548.36), SIMDE_FLOAT32_C( -875.96) },
{ SIMDE_FLOAT32_C( -886.59), SIMDE_FLOAT32_C( -912.27), SIMDE_FLOAT32_C( 878.70), SIMDE_FLOAT32_C( 765.47) },
{ SIMDE_FLOAT32_C( -886.59), SIMDE_FLOAT32_C( -912.27), SIMDE_FLOAT32_C( 878.70), SIMDE_FLOAT32_C( 765.47) },
{ SIMDE_FLOAT32_C(-785471.62), SIMDE_FLOAT32_C(-832768.50), SIMDE_FLOAT32_C(-771565.31), SIMDE_FLOAT32_C(-586820.19) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t c = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t r = simde_wasm_f32x4_fms(a, b, c);
simde_test_wasm_f32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float32 inputs[8 * 2 * (sizeof(simde_v128_t) / sizeof(simde_float32))];
simde_test_wasm_f32x4_random_full(8, 2, inputs, -SIMDE_FLOAT32_C(1000.0), SIMDE_FLOAT32_C(1000.0), HEDLEY_STATIC_CAST(SimdeTestVecFloatType, SIMDE_TEST_VEC_FLOAT_NAN | SIMDE_TEST_VEC_FLOAT_EQUAL));
for (size_t i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 0),
b = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 1),
c = simde_test_wasm_f32x4_random_full_extract(2, inputs, i, 1),
r;
r = simde_wasm_f32x4_fms(a, b, c);
simde_test_wasm_f32x4_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_f32x4_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f32x4_write(3, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_f64x2_fms(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float64 a[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 b[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 c[sizeof(simde_v128_t) / sizeof(simde_float64)];
simde_float64 r[sizeof(simde_v128_t) / sizeof(simde_float64)];
} test_vec[] = {
#if !defined(SIMDE_FAST_MATH)
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 932.16) },
{ SIMDE_FLOAT64_C( -901.98), SIMDE_MATH_NAN },
{ SIMDE_FLOAT64_C( -901.98), SIMDE_MATH_NAN },
{ SIMDE_MATH_NAN, SIMDE_MATH_NAN } },
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 643.23) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 244.23) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( 244.23) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C(-59005.06) } },
#endif
{ { SIMDE_FLOAT64_C( -34.62), SIMDE_FLOAT64_C( 708.12) },
{ SIMDE_FLOAT64_C( 4.43), SIMDE_FLOAT64_C( 255.42) },
{ SIMDE_FLOAT64_C( 4.43), SIMDE_FLOAT64_C( 255.42) },
{ SIMDE_FLOAT64_C( -54.24), SIMDE_FLOAT64_C(-64531.26) } },
{ { SIMDE_FLOAT64_C( -110.42), SIMDE_FLOAT64_C( 509.02) },
{ SIMDE_FLOAT64_C( -830.04), SIMDE_FLOAT64_C( -429.79) },
{ SIMDE_FLOAT64_C( -830.04), SIMDE_FLOAT64_C( -429.79) },
{ SIMDE_FLOAT64_C(-689076.82), SIMDE_FLOAT64_C(-184210.42) } },
{ { SIMDE_FLOAT64_C( -919.81), SIMDE_FLOAT64_C( -576.94) },
{ SIMDE_FLOAT64_C( 157.73), SIMDE_FLOAT64_C( -978.05) },
{ SIMDE_FLOAT64_C( 157.73), SIMDE_FLOAT64_C( -978.05) },
{ SIMDE_FLOAT64_C(-25798.56), SIMDE_FLOAT64_C(-957158.74) } },
{ { SIMDE_FLOAT64_C( -11.25), SIMDE_FLOAT64_C( 643.76) },
{ SIMDE_FLOAT64_C( 592.23), SIMDE_FLOAT64_C( 456.83) },
{ SIMDE_FLOAT64_C( 592.23), SIMDE_FLOAT64_C( 456.83) },
{ SIMDE_FLOAT64_C(-350747.62), SIMDE_FLOAT64_C(-208049.89) } },
{ { SIMDE_FLOAT64_C( 192.13), SIMDE_FLOAT64_C( 716.26) },
{ SIMDE_FLOAT64_C( 570.24), SIMDE_FLOAT64_C( 279.86) },
{ SIMDE_FLOAT64_C( 570.24), SIMDE_FLOAT64_C( 279.86) },
{ SIMDE_FLOAT64_C(-324981.53), SIMDE_FLOAT64_C(-77605.36) } },
{ { SIMDE_FLOAT64_C( 594.96), SIMDE_FLOAT64_C( 335.72) },
{ SIMDE_FLOAT64_C( -302.73), SIMDE_FLOAT64_C( 652.21) },
{ SIMDE_FLOAT64_C( -302.73), SIMDE_FLOAT64_C( 652.21) },
{ SIMDE_FLOAT64_C(-91050.49), SIMDE_FLOAT64_C(-425042.16) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t c = simde_wasm_v128_load(test_vec[i].c);
simde_v128_t r = simde_wasm_f64x2_fms(a, b, c);
simde_test_wasm_f64x2_assert_equal(r, simde_wasm_v128_load(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float64 inputs[8 * 2 * (sizeof(simde_v128_t) / sizeof(simde_float64))];
simde_test_wasm_f64x2_random_full(8, 2, inputs, -SIMDE_FLOAT64_C(1000.0), SIMDE_FLOAT64_C(1000.0), HEDLEY_STATIC_CAST(SimdeTestVecFloatType, SIMDE_TEST_VEC_FLOAT_NAN));
for (size_t i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 0),
b = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 1),
c = simde_test_wasm_f64x2_random_full_extract(2, inputs, i, 1),
r;
r = simde_wasm_f64x2_fms(a, b, c);
simde_test_wasm_f64x2_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_f64x2_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f64x2_write(3, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_f64x2_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_f32x4_fms)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_f64x2_fms)
SIMDE_TEST_FUNC_LIST_END
#include "test-relaxed-simd-footer.h"

View file

@ -0,0 +1,37 @@
simde_test_wasm_relaxed_simd_tests = [
'blend',
'fma',
'fms',
'swizzle',
'trunc',
]
simde_test_wasm_relaxed_simd_sources = []
simde_test_wasm_relaxed_simd_libs = []
foreach name : simde_test_wasm_relaxed_simd_tests
foreach lang : ['c', 'cpp']
source_file = name + '.c'
if lang == 'cpp'
source_file = configure_file(input: name + '.c', output: name + '.cpp', copy: true)
endif
simde_test_wasm_relaxed_simd_sources += source_file
foreach emul : ['emul', 'native']
extra_flags = ['-DSIMDE_TEST_BARE']
if emul == 'emul'
extra_flags += '-DSIMDE_NO_NATIVE'
endif
x = executable(name + '-' + emul + '-' + lang, source_file,
c_args: simde_c_args + simde_c_defs + simde_native_c_flags + extra_flags,
cpp_args: simde_c_args + simde_c_defs + simde_native_c_flags + extra_flags,
include_directories: simde_include_dir,
dependencies: simde_deps)
test('wasm_relexad_simd/' + name + '/' + emul + '/' + lang, x,
protocol: 'tap',
# Emscripten tests must be run from builddir
workdir: meson.current_build_dir())
endforeach
endforeach
endforeach

View file

@ -0,0 +1,3 @@
#include "../../munit/munit.h"
MunitSuite* simde_tests_wasm_relaxed_simd_get_suite(void);

View file

@ -0,0 +1,30 @@
#include "test-relaxed-simd.h"
#include "run-tests.h"
static MunitSuite suites[] = {
#define SIMDE_TEST_DECLARE_SUITE(name) \
{ NULL, NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE }, \
{ NULL, NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE }, \
{ NULL, NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE }, \
{ NULL, NULL, NULL, 1, MUNIT_SUITE_OPTION_NONE },
#include <test/wasm/relaxed-simd/declare-suites.h>
#undef SIMDE_TEST_DECLARE_SUITE
{ NULL, NULL, NULL, 0, MUNIT_SUITE_OPTION_NONE }
};
static MunitSuite suite = { "/relaxed-simd", NULL, suites, 1, MUNIT_SUITE_OPTION_NONE };
MunitSuite*
simde_tests_wasm_relaxed_simd_get_suite(void) {
int i = 0;
#define SIMDE_TEST_DECLARE_SUITE(name) \
suites[i++] = *HEDLEY_CONCAT3(simde_test_wasm_relaxed_simd_get_suite_, name, _native_c)(); \
suites[i++] = *HEDLEY_CONCAT3(simde_test_wasm_relaxed_simd_get_suite_, name, _native_cpp)(); \
suites[i++] = *HEDLEY_CONCAT3(simde_test_wasm_relaxed_simd_get_suite_, name, _emul_c)(); \
suites[i++] = *HEDLEY_CONCAT3(simde_test_wasm_relaxed_simd_get_suite_, name, _emul_cpp)();
#include <test/wasm/relaxed-simd/declare-suites.h>
#undef SIMDE_TEST_DECLARE_SUITE
return &suite;
}

View file

@ -0,0 +1,8 @@
#if defined(SIMDE_TESTS_WASM_RELAXED_SIMD_RUN_TESTS_H)
#error File already included.
#endif
#define SIMDE_TESTS_WASM_RELAXED_SIMD_RUN_TESTS_H
#include "../../munit/munit.h"
MunitSuite* simde_tests_wasm_relaxed_simd_get_suite(void);

View file

@ -0,0 +1,115 @@
/* Copyright (c) 2021 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TEST_WASM_RELAXED_SIMD_INSN swizzle
#include "../../../simde/wasm/relaxed-simd.h"
#include "test-relaxed-simd.h"
static int
test_simde_wasm_i8x16_swizzle_relaxed(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
int8_t a[sizeof(simde_v128_t) / sizeof(int8_t)];
int8_t b[sizeof(simde_v128_t) / sizeof(int8_t)];
int8_t r[sizeof(simde_v128_t) / sizeof(int8_t)];
} test_vec[] = {
{ { INT8_C( 23), -INT8_C( 17), INT8_C( 98), -INT8_C( 122), INT8_C( 107), -INT8_C( 16), INT8_C( 89), -INT8_C( 61),
INT8_C( 59), INT8_C( 118), -INT8_C( 63), INT8_C( 125), INT8_C( 25), -INT8_C( 30), -INT8_C( 123), -INT8_C( 105) },
{ INT8_C( 0), INT8_C( 1), INT8_C( 9), INT8_C( 0), INT8_C( 6), INT8_C( 2), INT8_C( 10), INT8_C( 3),
INT8_C( 11), INT8_C( 15), INT8_C( 2), INT8_C( 6), INT8_C( 0), INT8_C( 8), INT8_C( 2), INT8_C( 7) },
{ INT8_C( 23), -INT8_C( 17), INT8_C( 118), INT8_C( 23), INT8_C( 89), INT8_C( 98), -INT8_C( 63), -INT8_C( 122),
INT8_C( 125), -INT8_C( 105), INT8_C( 98), INT8_C( 89), INT8_C( 23), INT8_C( 59), INT8_C( 98), -INT8_C( 61) } },
{ { -INT8_C( 73), INT8_C( 36), -INT8_C( 67), INT8_C( 34), INT8_C( 20), INT8_C( 22), -INT8_C( 26), INT8_C( 80),
-INT8_C( 116), -INT8_C( 89), -INT8_C( 51), -INT8_C( 91), -INT8_C( 119), INT8_C( 82), INT8_C( 61), -INT8_C( 103) },
{ INT8_C( 3), INT8_C( 6), INT8_C( 10), INT8_C( 9), INT8_C( 8), INT8_C( 4), INT8_C( 12), INT8_C( 3),
INT8_C( 3), INT8_C( 14), INT8_C( 9), INT8_C( 3), INT8_C( 6), INT8_C( 11), INT8_C( 10), INT8_C( 13) },
{ INT8_C( 34), -INT8_C( 26), -INT8_C( 51), -INT8_C( 89), -INT8_C( 116), INT8_C( 20), -INT8_C( 119), INT8_C( 34),
INT8_C( 34), INT8_C( 61), -INT8_C( 89), INT8_C( 34), -INT8_C( 26), -INT8_C( 91), -INT8_C( 51), INT8_C( 82) } },
{ { INT8_C( 15), -INT8_C( 73), INT8_C( 16), INT8_C( 36), -INT8_C( 51), -INT8_C( 10), INT8_C( 116), INT8_C( 89),
-INT8_C( 99), INT8_C( 65), -INT8_C( 2), INT8_C( 38), -INT8_C( 109), INT8_C( 59), -INT8_C( 64), INT8_C( 70) },
{ INT8_C( 1), INT8_C( 10), INT8_C( 15), INT8_C( 9), INT8_C( 14), INT8_C( 11), INT8_C( 13), INT8_C( 1),
INT8_C( 9), INT8_C( 6), INT8_C( 4), INT8_C( 0), INT8_C( 2), INT8_C( 14), INT8_C( 13), INT8_C( 1) },
{ -INT8_C( 73), -INT8_C( 2), INT8_C( 70), INT8_C( 65), -INT8_C( 64), INT8_C( 38), INT8_C( 59), -INT8_C( 73),
INT8_C( 65), INT8_C( 116), -INT8_C( 51), INT8_C( 15), INT8_C( 16), -INT8_C( 64), INT8_C( 59), -INT8_C( 73) } },
{ { -INT8_C( 27), -INT8_C( 67), -INT8_C( 59), -INT8_C( 78), -INT8_C( 77), INT8_C( 57), INT8_C( 11), INT8_C( 80),
INT8_C( 122), INT8_C( 9), INT8_C( 119), INT8_C( 13), INT8_C( 69), INT8_C( 55), INT8_C( 83), INT8_C( 54) },
{ INT8_C( 1), INT8_C( 2), INT8_C( 0), INT8_C( 15), INT8_C( 13), INT8_C( 13), INT8_C( 0), INT8_C( 7),
INT8_C( 3), INT8_C( 4), INT8_C( 7), INT8_C( 5), INT8_C( 2), INT8_C( 4), INT8_C( 7), INT8_C( 7) },
{ -INT8_C( 67), -INT8_C( 59), -INT8_C( 27), INT8_C( 54), INT8_C( 55), INT8_C( 55), -INT8_C( 27), INT8_C( 80),
-INT8_C( 78), -INT8_C( 77), INT8_C( 80), INT8_C( 57), -INT8_C( 59), -INT8_C( 77), INT8_C( 80), INT8_C( 80) } },
{ { INT8_C( 34), INT8_C( 108), -INT8_C( 119), -INT8_C( 43), -INT8_C( 90), -INT8_C( 108), INT8_C( 38), INT8_C( 32),
-INT8_C( 99), -INT8_C( 99), INT8_C( 46), -INT8_C( 30), -INT8_C( 44), -INT8_C( 127), INT8_C( 25), INT8_C( 37) },
{ INT8_C( 4), INT8_C( 9), INT8_C( 4), INT8_C( 1), INT8_C( 6), INT8_C( 4), INT8_C( 8), INT8_C( 9),
INT8_C( 8), INT8_C( 15), INT8_C( 15), INT8_C( 10), INT8_C( 4), INT8_C( 6), INT8_C( 1), INT8_C( 6) },
{ -INT8_C( 90), -INT8_C( 99), -INT8_C( 90), INT8_C( 108), INT8_C( 38), -INT8_C( 90), -INT8_C( 99), -INT8_C( 99),
-INT8_C( 99), INT8_C( 37), INT8_C( 37), INT8_C( 46), -INT8_C( 90), INT8_C( 38), INT8_C( 108), INT8_C( 38) } },
{ { -INT8_C( 62), -INT8_C( 22), INT8_C( 75), INT8_C( 104), INT8_C( 126), INT8_C( 113), -INT8_C( 119), INT8_C( 27),
INT8_C( 14), -INT8_C( 73), -INT8_C( 2), -INT8_C( 30), INT8_C( 56), INT8_C( 23), INT8_C( 7), INT8_C( 12) },
{ INT8_C( 0), INT8_C( 11), INT8_C( 14), INT8_C( 6), INT8_C( 15), INT8_C( 6), INT8_C( 15), INT8_C( 7),
INT8_C( 6), INT8_C( 14), INT8_C( 1), INT8_C( 10), INT8_C( 4), INT8_C( 2), INT8_C( 0), INT8_C( 7) },
{ -INT8_C( 62), -INT8_C( 30), INT8_C( 7), -INT8_C( 119), INT8_C( 12), -INT8_C( 119), INT8_C( 12), INT8_C( 27),
-INT8_C( 119), INT8_C( 7), -INT8_C( 22), -INT8_C( 2), INT8_C( 126), INT8_C( 75), -INT8_C( 62), INT8_C( 27) } },
{ { -INT8_C( 116), -INT8_C( 117), -INT8_C( 113), INT8_C( 10), -INT8_C( 3), INT8_C( 24), INT8_C( 38), INT8_C( 11),
-INT8_C( 49), INT8_C( 36), -INT8_C( 18), INT8_C( 8), INT8_C( 59), -INT8_C( 11), INT8_C( 20), -INT8_C( 69) },
{ INT8_C( 1), INT8_C( 2), INT8_C( 1), INT8_C( 0), INT8_C( 9), INT8_C( 0), INT8_C( 8), INT8_C( 15),
INT8_C( 15), INT8_C( 9), INT8_C( 9), INT8_C( 3), INT8_C( 12), INT8_C( 9), INT8_C( 10), INT8_C( 8) },
{ -INT8_C( 117), -INT8_C( 113), -INT8_C( 117), -INT8_C( 116), INT8_C( 36), -INT8_C( 116), -INT8_C( 49), -INT8_C( 69),
-INT8_C( 69), INT8_C( 36), INT8_C( 36), INT8_C( 10), INT8_C( 59), INT8_C( 36), -INT8_C( 18), -INT8_C( 49) } },
{ { -INT8_C( 12), -INT8_C( 6), -INT8_C( 109), -INT8_C( 15), INT8_C( 18), -INT8_C( 71), -INT8_C( 3), -INT8_C( 30),
-INT8_C( 35), -INT8_C( 21), -INT8_C( 22), INT8_C( 24), -INT8_C( 32), -INT8_C( 2), -INT8_C( 45), INT8_C( 33) },
{ INT8_C( 1), INT8_C( 4), INT8_C( 2), INT8_C( 10), INT8_C( 4), INT8_C( 10), INT8_C( 9), INT8_C( 3),
INT8_C( 3), INT8_C( 2), INT8_C( 7), INT8_C( 15), INT8_C( 11), INT8_C( 1), INT8_C( 8), INT8_C( 15) },
{ -INT8_C( 6), INT8_C( 18), -INT8_C( 109), -INT8_C( 22), INT8_C( 18), -INT8_C( 22), -INT8_C( 21), -INT8_C( 15),
-INT8_C( 15), -INT8_C( 109), -INT8_C( 30), INT8_C( 33), INT8_C( 24), -INT8_C( 6), -INT8_C( 35), INT8_C( 33) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t b = simde_wasm_v128_load(test_vec[i].b);
simde_v128_t r = simde_wasm_i8x16_swizzle_relaxed(a, b);
simde_test_wasm_i8x16_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_i8x16_random(),
b = simde_wasm_v128_and(simde_test_wasm_i8x16_random(), simde_wasm_i8x16_splat(15)),
r;
r = simde_wasm_i8x16_swizzle_relaxed(a, b);
simde_test_wasm_i8x16_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i8x16_write(3, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_wasm_i8x16_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i8x16_swizzle_relaxed)
SIMDE_TEST_FUNC_LIST_END
#include "test-relaxed-simd-footer.h"

View file

@ -0,0 +1,29 @@
#if defined(SIMDE_TEST_BARE)
int main(void) {
int retval = EXIT_SUCCESS;
fprintf(stdout, "1..%zu\n", (sizeof(test_suite_tests) / sizeof(test_suite_tests[0])));
for (size_t i = 0 ; i < (sizeof(test_suite_tests) / sizeof(test_suite_tests[0])) ; i++) {
int res = test_suite_tests[i].func();
if (res != 0) {
retval = EXIT_FAILURE;
fprintf(stdout, "not ok %zu " HEDLEY_STRINGIFY(SIMDE_TEST_WASM_RELAXED_SIMD_INSN) "/%s\n", i + 1, test_suite_tests[i].name);
} else {
fprintf(stdout, "ok %zu " HEDLEY_STRINGIFY(SIMDE_TEST_WASM_RELAXED_SIMD_INSN) "/%s\n", i + 1, test_suite_tests[i].name);
}
}
return retval;
}
#else
#if defined(__cplusplus)
static MunitSuite suite = { const_cast<char*>("/" HEDLEY_STRINGIFY(SIMDE_TEST_WASM_RELAXED_SIMD_INSN)), test_suite_tests, NULL, 1, MUNIT_SUITE_OPTION_NONE };
#else
static MunitSuite suite = { (char*) "/" HEDLEY_STRINGIFY(SIMDE_TEST_WASM_RELAXED_SIMD_INSN), test_suite_tests, NULL, 1, MUNIT_SUITE_OPTION_NONE };
#endif
HEDLEY_C_DECL MunitSuite*
SIMDE_TEST_GENERATE_VARIANT_SYMBOL_CURRENT(HEDLEY_CONCAT(simde_test_wasm_relaxed_simd_get_suite_,SIMDE_TEST_WASM_RELAXED_SIMD_INSN)) (void) {
return &suite;
}
#endif

View file

@ -0,0 +1,12 @@
#if !defined(SIMDE_TEST_WASM_SIMD128_TEST_SIMD128_H)
#define SIMDE_TEST_WASM_SIMD128_TEST_SIMD128_H
#include "../test-simd128.h"
#if !defined(SIMDE_TEST_BARE)
#define SIMDE_TEST_DECLARE_SUITE(name) SIMDE_TEST_SUITE_DECLARE_GETTERS(HEDLEY_CONCAT(simde_test_wasm_relaxed_simd_get_suite_,name))
#include <test/wasm/relaxed-simd/declare-suites.h>
#undef SIMDE_TEST_DECLARE_SUITE
#endif
#endif /* !defined(SIMDE_TEST_WASM_SIMD128_TEST_SIMD128_H) */

View file

@ -0,0 +1,223 @@
/* Copyright (c) 2021 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TEST_WASM_RELAXED_SIMD_INSN trunc
#include "../../../simde/wasm/relaxed-simd.h"
#include "test-relaxed-simd.h"
static int
test_simde_wasm_i32x4_trunc_f32x4(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float32 a[sizeof(simde_v128_t) / sizeof(simde_float32)];
int32_t r[sizeof(simde_v128_t) / sizeof(int32_t)];
} test_vec[] = {
{ { SIMDE_FLOAT32_C(1196434176.00), SIMDE_FLOAT32_C(562159616.00), SIMDE_FLOAT32_C(1817538176.00), SIMDE_FLOAT32_C(-553928448.00) },
{ INT32_C( 1196434176), INT32_C( 562159616), INT32_C( 1817538176), -INT32_C( 553928448) } },
{ { SIMDE_FLOAT32_C(-917483520.00), SIMDE_FLOAT32_C(-1259906048.00), SIMDE_FLOAT32_C(1148161536.00), SIMDE_FLOAT32_C(-1375460352.00) },
{ -INT32_C( 917483520), -INT32_C( 1259906048), INT32_C( 1148161536), -INT32_C( 1375460352) } },
{ { SIMDE_FLOAT32_C(-793209728.00), SIMDE_FLOAT32_C(507892992.00), SIMDE_FLOAT32_C(2107121152.00), SIMDE_FLOAT32_C(1676560896.00) },
{ -INT32_C( 793209728), INT32_C( 507892992), INT32_C( 2107121152), INT32_C( 1676560896) } },
{ { SIMDE_FLOAT32_C(-1060059648.00), SIMDE_FLOAT32_C(1394152448.00), SIMDE_FLOAT32_C(-1032503808.00), SIMDE_FLOAT32_C(-248031360.00) },
{ -INT32_C( 1060059648), INT32_C( 1394152448), -INT32_C( 1032503808), -INT32_C( 248031360) } },
{ { SIMDE_FLOAT32_C(449856768.00), SIMDE_FLOAT32_C(-2101327616.00), SIMDE_FLOAT32_C(-207199744.00), SIMDE_FLOAT32_C(-1684930688.00) },
{ INT32_C( 449856768), -INT32_C( 2101327616), -INT32_C( 207199744), -INT32_C( 1684930688) } },
{ { SIMDE_FLOAT32_C(556814848.00), SIMDE_FLOAT32_C(495534336.00), SIMDE_FLOAT32_C(2086857472.00), SIMDE_FLOAT32_C(1929632768.00) },
{ INT32_C( 556814848), INT32_C( 495534336), INT32_C( 2086857472), INT32_C( 1929632768) } },
{ { SIMDE_FLOAT32_C(-1696075392.00), SIMDE_FLOAT32_C(-782602048.00), SIMDE_FLOAT32_C(-1940255360.00), SIMDE_FLOAT32_C(-1691461504.00) },
{ -INT32_C( 1696075392), -INT32_C( 782602048), -INT32_C( 1940255360), -INT32_C( 1691461504) } },
{ { SIMDE_FLOAT32_C(1013248768.00), SIMDE_FLOAT32_C(-909308544.00), SIMDE_FLOAT32_C(-1709259648.00), SIMDE_FLOAT32_C(62199040.00) },
{ INT32_C( 1013248768), -INT32_C( 909308544), -INT32_C( 1709259648), INT32_C( 62199040) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t r = simde_wasm_i32x4_trunc_f32x4(a);
simde_test_wasm_i32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f32x4_random(HEDLEY_STATIC_CAST(simde_float32, INT32_MIN), HEDLEY_STATIC_CAST(simde_float32, INT32_MAX)),
r;
r = simde_wasm_i32x4_trunc_f32x4(a);
simde_test_wasm_f32x4_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_u32x4_trunc_f32x4(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float32 a[sizeof(simde_v128_t) / sizeof(simde_float32)];
uint32_t r[sizeof(simde_v128_t) / sizeof(uint32_t)];
} test_vec[] = {
{ { SIMDE_FLOAT32_C(2988936192.00), SIMDE_FLOAT32_C(3863598080.00), SIMDE_FLOAT32_C(1913599488.00), SIMDE_FLOAT32_C(3828685568.00) },
{ UINT32_C(2988936192), UINT32_C(3863598080), UINT32_C(1913599488), UINT32_C(3828685568) } },
{ { SIMDE_FLOAT32_C(612808448.00), SIMDE_FLOAT32_C(2608920576.00), SIMDE_FLOAT32_C(1426784640.00), SIMDE_FLOAT32_C(3479707904.00) },
{ UINT32_C( 612808448), UINT32_C(2608920576), UINT32_C(1426784640), UINT32_C(3479707904) } },
{ { SIMDE_FLOAT32_C(1876159232.00), SIMDE_FLOAT32_C(1215616256.00), SIMDE_FLOAT32_C(3617364480.00), SIMDE_FLOAT32_C(3325470208.00) },
{ UINT32_C(1876159232), UINT32_C(1215616256), UINT32_C(3617364480), UINT32_C(3325470208) } },
{ { SIMDE_FLOAT32_C(2396343552.00), SIMDE_FLOAT32_C(3887605248.00), SIMDE_FLOAT32_C(2828944128.00), SIMDE_FLOAT32_C(410412416.00) },
{ UINT32_C(2396343552), UINT32_C(3887605248), UINT32_C(2828944128), UINT32_C( 410412416) } },
{ { SIMDE_FLOAT32_C(3389382400.00), SIMDE_FLOAT32_C(148869808.00), SIMDE_FLOAT32_C(1351892352.00), SIMDE_FLOAT32_C(2799121920.00) },
{ UINT32_C(3389382400), UINT32_C( 148869808), UINT32_C(1351892352), UINT32_C(2799121920) } },
{ { SIMDE_FLOAT32_C(2491012864.00), SIMDE_FLOAT32_C(449565600.00), SIMDE_FLOAT32_C(1779601792.00), SIMDE_FLOAT32_C(387340320.00) },
{ UINT32_C(2491012864), UINT32_C( 449565600), UINT32_C(1779601792), UINT32_C( 387340320) } },
{ { SIMDE_FLOAT32_C(3143272448.00), SIMDE_FLOAT32_C(501831104.00), SIMDE_FLOAT32_C(2874208512.00), SIMDE_FLOAT32_C(2527360000.00) },
{ UINT32_C(3143272448), UINT32_C( 501831104), UINT32_C(2874208512), UINT32_C(2527360000) } },
{ { SIMDE_FLOAT32_C(1166117504.00), SIMDE_FLOAT32_C(4222391296.00), SIMDE_FLOAT32_C(1749291520.00), SIMDE_FLOAT32_C(4155053824.00) },
{ UINT32_C(1166117504), UINT32_C(4222391296), UINT32_C(1749291520), UINT32_C(4155053824) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t r = simde_wasm_u32x4_trunc_f32x4(a);
simde_test_wasm_u32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f32x4_random(SIMDE_FLOAT32_C(0.0), HEDLEY_STATIC_CAST(simde_float32, UINT32_MAX)),
r;
r = simde_wasm_u32x4_trunc_f32x4(a);
simde_test_wasm_f32x4_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_u32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_i32x4_trunc_f64x2_zero(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float64 a[sizeof(simde_v128_t) / sizeof(simde_float64)];
int32_t r[sizeof(simde_v128_t) / sizeof(int32_t)];
} test_vec[] = {
{ { SIMDE_FLOAT64_C(1643538592.88), SIMDE_FLOAT64_C(1515407276.85) },
{ INT32_C( 1643538592), INT32_C( 1515407276), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(1541288496.86), SIMDE_FLOAT64_C(-2038620287.97) },
{ INT32_C( 1541288496), -INT32_C( 2038620287), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(-170639465.54), SIMDE_FLOAT64_C(-1326894167.81) },
{ -INT32_C( 170639465), -INT32_C( 1326894167), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(1441087532.84), SIMDE_FLOAT64_C(1705519748.90) },
{ INT32_C( 1441087532), INT32_C( 1705519748), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(-111277905.53), SIMDE_FLOAT64_C(763484734.68) },
{ -INT32_C( 111277905), INT32_C( 763484734), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(736022776.67), SIMDE_FLOAT64_C(-2009901581.97) },
{ INT32_C( 736022776), -INT32_C( 2009901581), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(356122562.58), SIMDE_FLOAT64_C(-730000503.67) },
{ INT32_C( 356122562), -INT32_C( 730000503), INT32_C( 0), INT32_C( 0) } },
{ { SIMDE_FLOAT64_C(-1599489173.87), SIMDE_FLOAT64_C(-549462263.63) },
{ -INT32_C( 1599489173), -INT32_C( 549462263), INT32_C( 0), INT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t r = simde_wasm_i32x4_trunc_f64x2_zero(a);
simde_test_wasm_i32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f64x2_random(HEDLEY_STATIC_CAST(simde_float64, INT32_MIN), HEDLEY_STATIC_CAST(simde_float64, INT32_MAX)),
r;
r = simde_wasm_i32x4_trunc_f64x2_zero(a);
simde_test_wasm_f64x2_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_i32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_wasm_u32x4_trunc_f64x2_zero(SIMDE_MUNIT_TEST_ARGS) {
#if 1
SIMDE_TEST_STRUCT_MODIFIERS struct {
simde_float64 a[sizeof(simde_v128_t) / sizeof(simde_float64)];
uint32_t r[sizeof(simde_v128_t) / sizeof(uint32_t)];
} test_vec[] = {
{ { SIMDE_FLOAT64_C(1566352946.36), SIMDE_FLOAT64_C(1899886804.44) },
{ UINT32_C(1566352946), UINT32_C(1899886804), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(102176116.02), SIMDE_FLOAT64_C(4057365914.94) },
{ UINT32_C( 102176116), UINT32_C(4057365914), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(2349452452.55), SIMDE_FLOAT64_C(1881777742.44) },
{ UINT32_C(2349452452), UINT32_C(1881777742), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(149738930.03), SIMDE_FLOAT64_C(1197757476.28) },
{ UINT32_C( 149738930), UINT32_C(1197757476), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(2383608838.55), SIMDE_FLOAT64_C(3023947188.70) },
{ UINT32_C(2383608838), UINT32_C(3023947188), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(3725117572.87), SIMDE_FLOAT64_C(3549726344.83) },
{ UINT32_C(3725117572), UINT32_C(3549726344), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(2951371180.69), SIMDE_FLOAT64_C(1179441762.27) },
{ UINT32_C(2951371180), UINT32_C(1179441762), UINT32_C( 0), UINT32_C( 0) } },
{ { SIMDE_FLOAT64_C(3409812860.79), SIMDE_FLOAT64_C(2447426124.57) },
{ UINT32_C(3409812860), UINT32_C(2447426124), UINT32_C( 0), UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_v128_t a = simde_wasm_v128_load(test_vec[i].a);
simde_v128_t r = simde_wasm_u32x4_trunc_f64x2_zero(a);
simde_test_wasm_u32x4_assert_equal(r, simde_wasm_v128_load(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_v128_t
a = simde_test_wasm_f64x2_random(SIMDE_FLOAT64_C(0.0), HEDLEY_STATIC_CAST(simde_float64, UINT32_MAX)),
r;
r = simde_wasm_u32x4_trunc_f64x2_zero(a);
simde_test_wasm_f64x2_write(3, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_wasm_u32x4_write(3, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i32x4_trunc_f32x4)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_u32x4_trunc_f32x4)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_i32x4_trunc_f64x2_zero)
SIMDE_TEST_FUNC_LIST_ENTRY(wasm_u32x4_trunc_f64x2_zero)
SIMDE_TEST_FUNC_LIST_END
#include "test-relaxed-simd-footer.h"