*
* 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_TESTS_CURRENT_ISAX xop
#include <simde/x86/xop.h>
#include <test/x86/test-avx.h>
static int
test_simde_mm_cmov_si128 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 500254467), -INT32_C( 199025237), -INT32_C( 819815926), -INT32_C( 1605995992) },
{ -INT32_C( 723927998), INT32_C( 2062677536), -INT32_C( 1465824605), INT32_C( 443551646) },
{ INT32_C( 487232486), -INT32_C( 1422518099), -INT32_C( 670557173), INT32_C( 1834540766) },
{ -INT32_C( 573493502), -INT32_C( 253493591), -INT32_C( 392078678), INT32_C( 845173512) } },
{ { -INT32_C( 764207660), INT32_C( 823075782), -INT32_C( 662371768), -INT32_C( 549839234) },
{ INT32_C( 190769969), -INT32_C( 203753439), INT32_C( 1635986845), -INT32_C( 74165934) },
{ INT32_C( 593219169), INT32_C( 456309172), INT32_C( 1840319889), -INT32_C( 1977469073) },
{ INT32_C( 173485392), -INT32_C( 238395003), INT32_C( 1216552972), -INT32_C( 71936386) } },
{ { -INT32_C( 1321871351), INT32_C( 318162610), INT32_C( 888886504), -INT32_C( 1797074133) },
{ -INT32_C( 1879353328), -INT32_C( 2126397295), INT32_C( 797962919), INT32_C( 1645241371) },
{ -INT32_C( 705109608), INT32_C( 1366395142), INT32_C( 400038163), INT32_C( 2116709394) },
{ -INT32_C( 1691101176), -INT32_C( 1871658861), INT32_C( 1021309604), INT32_C( 338837515) } },
{ { -INT32_C( 575061495), -INT32_C( 1423687419), -INT32_C( 444253775), -INT32_C( 1326666713) },
{ INT32_C( 1074630150), -INT32_C( 130725435), -INT32_C( 746388409), INT32_C( 39069103) },
{ -INT32_C( 671148939), -INT32_C( 507297094), INT32_C( 1509780440), -INT32_C( 1130489794) },
{ -INT32_C( 709260797), -INT32_C( 1187755707), -INT32_C( 1014551145), -INT32_C( 1295241817) } },
{ { -INT32_C( 1159895173), INT32_C( 1328090776), INT32_C( 811769515), INT32_C( 1749550505) },
{ INT32_C( 1127503740), INT32_C( 1795608149), INT32_C( 1365118788), -INT32_C( 837833210) },
{ INT32_C( 198243614), -INT32_C( 1640636121), -INT32_C( 169972120), -INT32_C( 118549335) },
{ INT32_C( 1257531258), INT32_C( 1864568400), INT32_C( 809635628), INT32_C( 1850257071) } },
{ { -INT32_C( 356543931), -INT32_C( 1865028991), -INT32_C( 1777292004), INT32_C( 774207527) },
{ -INT32_C( 95437033), INT32_C( 742508825), -INT32_C( 329188187), -INT32_C( 97559722) },
{ -INT32_C( 1811264007), -INT32_C( 1709661980), -INT32_C( 260321911), INT32_C( 617184842) },
{ -INT32_C( 363875769), -INT32_C( 1269700199), -INT32_C( 1676624596), -INT32_C( 30967530) } },
{ { INT32_C( 1354780047), INT32_C( 1110822678), -INT32_C( 615591541), -INT32_C( 1242439335) },
{ INT32_C( 142348735), -INT32_C( 810027226), INT32_C( 638056626), -INT32_C( 136001769) },
{ -INT32_C( 712234834), INT32_C( 687471304), -INT32_C( 1961790398), INT32_C( 1914613593) },
{ INT32_C( 1492130207), -INT32_C( 952643802), -INT32_C( 1358505806), -INT32_C( 1242504865) } },
{ { INT32_C( 276653248), INT32_C( 2023422192), INT32_C( 35435968), -INT32_C( 262382795) },
{ INT32_C( 1360844699), INT32_C( 645288660), -INT32_C( 1005425167), INT32_C( 2040318975) },
{ INT32_C( 1920323875), -INT32_C( 592860694), INT32_C( 1243778522), INT32_C( 1461404237) },
{ INT32_C( 293422744), INT32_C( 2061433588), -INT32_C( 2045712927), INT32_C( 2023541687) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_cmov_si128(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_cmov_si128(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm256_cmov_si256 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[8];
const int32_t b[8];
const int32_t c[8];
const int32_t r[8];
} test_vec[] = {
{ { -INT32_C( 2048228304), -INT32_C( 943376558), INT32_C( 916505603), -INT32_C( 1560329864), INT32_C( 1119380968), INT32_C( 798876684), INT32_C( 882820511), -INT32_C( 2078087596) },
{ -INT32_C( 1123480214), INT32_C( 1199885892), INT32_C( 175973522), INT32_C( 1303149925), -INT32_C( 292526622), -INT32_C( 400741047), INT32_C( 1193065714), INT32_C( 231423906) },
{ -INT32_C( 1865755316), INT32_C( 920145571), -INT32_C( 666872462), -INT32_C( 1272582702), -INT32_C( 1683835566), -INT32_C( 712785694), INT32_C( 505192316), INT32_C( 707520478) },
{ -INT32_C( 1379169246), INT32_C( 1204061766), INT32_C( 306013314), -INT32_C( 374517387), INT32_C( 1722836448), INT32_C( 765324553), INT32_C( 1427940766), INT32_C( 98762356) } },
{ { INT32_C( 1622930876), -INT32_C( 1231645885), -INT32_C( 1148266776), INT32_C( 359642051), INT32_C( 1269830249), INT32_C( 1310733266), -INT32_C( 1318306605), -INT32_C( 522414044) },
{ -INT32_C( 784296051), INT32_C( 310892074), INT32_C( 1892488621), INT32_C( 830881224), INT32_C( 561854031), INT32_C( 1030724970), -INT32_C( 17900582), INT32_C( 31378035) },
{ -INT32_C( 1949163679), -INT32_C( 1566680587), INT32_C( 907242350), -INT32_C( 144139864), INT32_C( 957933007), INT32_C( 1551271810), -INT32_C( 698718877), -INT32_C( 1848166097) },
{ INT32_C( 1351783852), -INT32_C( 1298688181), INT32_C( 1926125289), INT32_C( 367965632), INT32_C( 158667337), INT32_C( 1831410666), -INT32_C( 1192444197), -INT32_C( 2133009804) } },
{ { INT32_C( 1293723992), INT32_C( 1894824450), -INT32_C( 827915482), INT32_C( 1808142236), INT32_C( 1990582004), -INT32_C( 908911770), -INT32_C( 1331745408), -INT32_C( 1103005850) },
{ INT32_C( 588012832), INT32_C( 1049885720), -INT32_C( 1693697281), INT32_C( 1023857225), INT32_C( 397716401), INT32_C( 1205897159), INT32_C( 469204916), INT32_C( 400111862) },
{ -INT32_C( 1371871850), -INT32_C( 521351711), INT32_C( 1367078920), INT32_C( 2089779915), -INT32_C( 191675603), INT32_C( 2117891018), -INT32_C( 375835662), INT32_C( 33583980) },
{ INT32_C( 219986224), INT32_C( 2129901592), -INT32_C( 903413001), INT32_C( 1770410632), INT32_C( 2007362228), INT32_C( 1238406983), -INT32_C( 1291883132), INT32_C( 400129014) } },
{ { INT32_C( 984627800), INT32_C( 253402119), INT32_C( 1600231060), INT32_C( 1172041752), -INT32_C( 46502349), -INT32_C( 730106143), INT32_C( 364713385), -INT32_C( 535315064) },
{ -INT32_C( 31799305), -INT32_C( 133286557), -INT32_C( 480809013), -INT32_C( 1842859169), -INT32_C( 2087755103), -INT32_C( 2108224808), -INT32_C( 1483271137), -INT32_C( 930566191) },
{ -INT32_C( 624516490), -INT32_C( 1563241257), -INT32_C( 1568331453), -INT32_C( 30101924), -INT32_C( 377371888), -INT32_C( 311699250), -INT32_C( 1114307860), INT32_C( 679812529) },
{ INT32_C( 1050175441), INT32_C( 1511961895), INT32_C( 1129531016), INT32_C( 1142468891), -INT32_C( 351378767), -INT32_C( 964734256), INT32_C( 395777211), -INT32_C( 535969856) } },
{ { -INT32_C( 1761457217), INT32_C( 1664734240), INT32_C( 1510391805), INT32_C( 2102934125), -INT32_C( 865674754), -INT32_C( 1648766543), -INT32_C( 2057679148), INT32_C( 732815211) },
{ INT32_C( 1254272810), -INT32_C( 2119238781), INT32_C( 668710074), -INT32_C( 324717586), -INT32_C( 1112012020), -INT32_C( 1319472419), INT32_C( 741782720), -INT32_C( 1118313325) },
{ INT32_C( 386406803), -INT32_C( 812075500), INT32_C( 1492546410), -INT32_C( 1304061018), -INT32_C( 2073035353), INT32_C( 808831343), INT32_C( 274492285), -INT32_C( 473058481) },
{ INT32_C( 1606594491), INT32_C( 1128193411), INT32_C( 2131736568), INT32_C( 2095069804), -INT32_C( 1107895378), -INT32_C( 1854147663), INT32_C( 746249940), INT32_C( 1067440091) } },
{ { -INT32_C( 520432180), -INT32_C( 173043061), -INT32_C( 1420909051), -INT32_C( 396520639), INT32_C( 7130256), INT32_C( 305176981), INT32_C( 1545767949), INT32_C( 188739391) },
{ INT32_C( 1357593029), -INT32_C( 800678965), -INT32_C( 2105830335), -INT32_C( 1217669081), INT32_C( 968349604), -INT32_C( 2041845895), -INT32_C( 1293783693), INT32_C( 582820445) },
{ INT32_C( 661825883), -INT32_C( 2047363004), INT32_C( 1929868108), -INT32_C( 265588149), -INT32_C( 1020665270), INT32_C( 1028224458), INT32_C( 1072704482), -INT32_C( 1453216435) },
{ INT32_C( 1895535052), -INT32_C( 710438005), -INT32_C( 1551981051), -INT32_C( 414606747), INT32_C( 952030628), -INT32_C( 1845320783), -INT32_C( 1675473903), INT32_C( 196980509) } },
{ { -INT32_C( 1697590186), -INT32_C( 652228724), -INT32_C( 2041829574), -INT32_C( 478775399), INT32_C( 614899546), -INT32_C( 144576748), INT32_C( 1748390171), INT32_C( 1427216639) },
{ -INT32_C( 118431380), -INT32_C( 472838231), -INT32_C( 798417354), -INT32_C( 273424491), -INT32_C( 1827448193), INT32_C( 1686795593), -INT32_C( 976371258), -INT32_C( 988029351) },
{ INT32_C( 1773996992), INT32_C( 1363971866), INT32_C( 1109505709), INT32_C( 338875541), INT32_C( 2024293678), -INT32_C( 2116275526), INT32_C( 1279699443), INT32_C( 1209098632) },
{ -INT32_C( 1731141524), -INT32_C( 207779927), -INT32_C( 1840763334), -INT32_C( 340566127), -INT32_C( 1548542117), -INT32_C( 448633007), -INT32_C( 913358569), -INT32_C( 988045607) } },
{ { -INT32_C( 2018390164), INT32_C( 198770014), INT32_C( 1229846963), -INT32_C( 60981299), INT32_C( 2138310085), INT32_C( 721440824), -INT32_C( 2106046470), INT32_C( 365595048) },
{ -INT32_C( 1231258792), INT32_C( 750875768), INT32_C( 980750189), INT32_C( 1396101774), INT32_C( 282307288), -INT32_C( 180628485), -INT32_C( 1015565542), -INT32_C( 1780989635) },
{ INT32_C( 877425852), INT32_C( 1432358376), -INT32_C( 1416637156), -INT32_C( 2130786648), INT32_C( 1804652912), -INT32_C( 1084175451), -INT32_C( 1132275841), -INT32_C( 732866024) },
{ -INT32_C( 2037362836), INT32_C( 700546392), INT32_C( 427678577), -INT32_C( 748923250), INT32_C( 2069048264), INT32_C( 1796952186), -INT32_C( 1015715974), INT32_C( 365431085) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m256i a = simde_mm256_loadu_epi32(test_vec[i].a);
simde__m256i b = simde_mm256_loadu_epi32(test_vec[i].b);
simde__m256i c = simde_mm256_loadu_epi32(test_vec[i].c);
simde__m256i r = simde_mm256_cmov_si256(a, b, c);
simde_test_x86_assert_equal_i32x8(r, simde_mm256_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m256i a = simde_test_x86_random_i32x8();
simde__m256i b = simde_test_x86_random_i32x8();
simde__m256i c = simde_test_x86_random_i32x8();
simde__m256i r = simde_mm256_cmov_si256(a, b, c);
simde_test_x86_write_i32x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { INT8_C( 9), INT8_C( 95), INT8_C( 12), -INT8_C( 23), -INT8_C( 38), -INT8_C( 37), INT8_C( 12), -INT8_C( 46),
-INT8_C( 96), INT8_C( 66), -INT8_C( 19), INT8_C( 41), -INT8_C( 21), -INT8_C( 79), -INT8_C( 19), -INT8_C( 122) },
{ INT8_C( 9), INT8_C( 95), INT8_C( 12), -INT8_C( 23), -INT8_C( 38), -INT8_C( 37), INT8_C( 12), -INT8_C( 46),
-INT8_C( 96), INT8_C( 66), -INT8_C( 19), INT8_C( 41), -INT8_C( 21), -INT8_C( 79), -INT8_C( 19), -INT8_C( 122) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 3), INT8_C( 38), -INT8_C( 98), INT8_C( 126), INT8_C( 51), -INT8_C( 121), -INT8_C( 33), -INT8_C( 55),
INT8_C( 103), -INT8_C( 25), INT8_C( 11), -INT8_C( 92), -INT8_C( 6), INT8_C( 6), INT8_C( 112), INT8_C( 117) },
{ -INT8_C( 55), INT8_C( 22), INT8_C( 3), -INT8_C( 82), -INT8_C( 116), -INT8_C( 59), INT8_C( 81), -INT8_C( 13),
INT8_C( 102), INT8_C( 119), -INT8_C( 71), INT8_MAX, -INT8_C( 70), -INT8_C( 45), -INT8_C( 39), -INT8_C( 60) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 65), -INT8_C( 126), INT8_C( 70), INT8_C( 81), INT8_C( 89), INT8_C( 51), INT8_MIN, -INT8_C( 7),
-INT8_C( 96), -INT8_C( 29), INT8_C( 37), INT8_C( 50), -INT8_C( 62), INT8_C( 91), INT8_C( 100), -INT8_C( 69) },
{ -INT8_C( 113), -INT8_C( 6), -INT8_C( 75), -INT8_C( 126), INT8_C( 81), -INT8_C( 76), -INT8_C( 57), -INT8_C( 60),
INT8_C( 92), INT8_C( 91), -INT8_C( 70), INT8_C( 118), -INT8_C( 26), INT8_C( 29), -INT8_C( 113), -INT8_C( 28) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 25), INT8_C( 79), -INT8_C( 35), -INT8_C( 104), INT8_C( 103), INT8_C( 105), -INT8_C( 59), INT8_C( 125),
INT8_C( 30), INT8_C( 81), INT8_C( 39), INT8_C( 68), INT8_C( 60), -INT8_C( 36), INT8_C( 22), INT8_C( 7) },
{ -INT8_C( 124), -INT8_C( 110), -INT8_C( 118), INT8_C( 44), -INT8_C( 47), -INT8_C( 79), INT8_C( 85), -INT8_C( 115),
-INT8_C( 85), INT8_C( 117), INT8_C( 89), -INT8_C( 43), INT8_C( 24), -INT8_C( 105), -INT8_C( 9), INT8_C( 45) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 76), INT8_C( 19), -INT8_C( 53), INT8_C( 25), INT8_C( 4), INT8_C( 47), -INT8_C( 106), -INT8_C( 100),
INT8_C( 8), -INT8_C( 71), INT8_C( 123), -INT8_C( 93), INT8_C( 15), -INT8_C( 112), INT8_C( 111), -INT8_C( 95) },
{ -INT8_C( 49), INT8_C( 102), -INT8_C( 21), INT8_C( 118), -INT8_C( 75), -INT8_C( 61), -INT8_C( 29), -INT8_C( 107),
INT8_C( 122), INT8_C( 77), -INT8_C( 4), INT8_C( 102), -INT8_C( 9), INT8_C( 72), -INT8_C( 6), -INT8_C( 23) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 58), INT8_C( 89), INT8_C( 119), -INT8_C( 99), -INT8_C( 39), -INT8_C( 113), -INT8_C( 37), -INT8_C( 96),
-INT8_C( 122), -INT8_C( 93), -INT8_C( 120), INT8_C( 23), -INT8_C( 28), INT8_MAX, INT8_C( 85), -INT8_C( 48) },
{ -INT8_C( 102), -INT8_C( 2), INT8_C( 62), INT8_C( 38), -INT8_C( 91), -INT8_C( 13), INT8_C( 90), INT8_C( 37),
-INT8_C( 14), INT8_C( 108), INT8_C( 13), -INT8_C( 17), INT8_C( 44), INT8_C( 56), INT8_C( 126), INT8_C( 94) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 45), -INT8_C( 90), INT8_C( 75), -INT8_C( 21), -INT8_C( 114), -INT8_C( 112), INT8_C( 124), -INT8_C( 49),
-INT8_C( 62), -INT8_C( 104), -INT8_C( 74), INT8_C( 104), INT8_C( 99), -INT8_C( 78), -INT8_C( 79), -INT8_C( 35) },
{ INT8_C( 10), -INT8_C( 29), -INT8_C( 20), INT8_C( 5), INT8_C( 72), INT8_C( 72), -INT8_C( 96), -INT8_C( 123),
INT8_C( 59), INT8_C( 89), -INT8_C( 14), INT8_C( 57), INT8_C( 94), INT8_C( 111), INT8_C( 108), -INT8_C( 42) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 91), -INT8_C( 124), -INT8_C( 82), -INT8_C( 51), -INT8_C( 54), INT8_C( 58), INT8_C( 97), INT8_C( 114),
-INT8_C( 31), INT8_C( 31), INT8_C( 109), INT8_C( 93), INT8_C( 51), INT8_C( 48), INT8_C( 108), INT8_C( 16) },
{ INT8_C( 73), -INT8_C( 100), INT8_C( 94), -INT8_C( 37), INT8_C( 71), -INT8_C( 54), -INT8_C( 98), -INT8_C( 3),
INT8_C( 124), -INT8_C( 100), INT8_C( 21), INT8_C( 12), INT8_C( 54), -INT8_C( 10), -INT8_C( 83), -INT8_C( 105) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comeq_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { INT16_C( 31451), INT16_C( 2312), -INT16_C( 27083), -INT16_C( 12173), -INT16_C( 16114), -INT16_C( 16619), INT16_C( 509), -INT16_C( 20116) },
{ INT16_C( 31451), INT16_C( 2312), -INT16_C( 27083), -INT16_C( 12173), -INT16_C( 16114), -INT16_C( 16619), INT16_C( 509), -INT16_C( 20116) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 20097), INT16_C( 28923), -INT16_C( 32439), -INT16_C( 10948), -INT16_C( 16675), INT16_C( 12508), -INT16_C( 11172), -INT16_C( 5849) },
{ INT16_C( 4507), INT16_C( 26818), -INT16_C( 21640), INT16_C( 13208), INT16_C( 1391), INT16_C( 22038), INT16_C( 11880), INT16_C( 2203) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 21805), -INT16_C( 29910), INT16_C( 30455), INT16_C( 21603), INT16_C( 18055), INT16_C( 27825), INT16_C( 4471), INT16_C( 5828) },
{ -INT16_C( 12531), -INT16_C( 19902), -INT16_C( 32197), -INT16_C( 7751), INT16_C( 29484), -INT16_C( 5415), -INT16_C( 16867), INT16_C( 24032) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 4206), -INT16_C( 2475), -INT16_C( 20231), -INT16_C( 15367), -INT16_C( 17246), -INT16_C( 30213), -INT16_C( 18897), INT16_C( 25963) },
{ INT16_C( 16219), -INT16_C( 20495), INT16_C( 8485), INT16_C( 9151), -INT16_C( 27794), INT16_C( 17348), -INT16_C( 17981), -INT16_C( 2270) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 27512), INT16_C( 30691), INT16_C( 14326), INT16_C( 27367), -INT16_C( 22187), INT16_C( 20513), -INT16_C( 14034), INT16_C( 7428) },
{ -INT16_C( 6486), INT16_C( 9783), -INT16_C( 27937), INT16_C( 16784), -INT16_C( 4515), INT16_C( 10304), INT16_C( 10243), INT16_C( 8011) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 16664), -INT16_C( 10436), INT16_C( 5271), -INT16_C( 28394), -INT16_C( 27447), -INT16_C( 31091), INT16_C( 21785), -INT16_C( 30858) },
{ INT16_C( 20005), -INT16_C( 7811), -INT16_C( 8943), -INT16_C( 31978), INT16_C( 2848), INT16_C( 25526), INT16_C( 4741), INT16_C( 7490) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 7286), -INT16_C( 8760), INT16_C( 20099), -INT16_C( 32659), INT16_C( 1318), -INT16_C( 2394), INT16_C( 24475), -INT16_C( 5205) },
{ -INT16_C( 271), -INT16_C( 22999), INT16_C( 2146), INT16_C( 12599), INT16_C( 29408), -INT16_C( 17780), INT16_C( 32752), INT16_C( 14831) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 31813), INT16_C( 21486), -INT16_C( 4766), INT16_C( 32467), -INT16_C( 31597), INT16_C( 26580), -INT16_C( 3750), -INT16_C( 28278) },
{ INT16_C( 32313), INT16_C( 16037), INT16_C( 7546), -INT16_C( 27939), -INT16_C( 21308), -INT16_C( 2516), INT16_C( 30701), -INT16_C( 17606) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comeq_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 15073521), -INT32_C( 718079266), -INT32_C( 1602250184), -INT32_C( 1057287426) },
{ -INT32_C( 15073521), -INT32_C( 718079266), -INT32_C( 1602250184), -INT32_C( 1057287426) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 1901549347), -INT32_C( 269540606), -INT32_C( 537116427), -INT32_C( 368377053) },
{ -INT32_C( 1414654055), -INT32_C( 881755235), INT32_C( 1779420734), -INT32_C( 1041839312) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 111743191), -INT32_C( 1873468510), INT32_C( 1013364378), INT32_C( 256518715) },
{ INT32_C( 488002434), -INT32_C( 1451721913), -INT32_C( 1913869875), -INT32_C( 583851112) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 956157570), -INT32_C( 1107876863), -INT32_C( 674195492), INT32_C( 1927280092) },
{ INT32_C( 515455985), -INT32_C( 1221591163), -INT32_C( 780160500), INT32_C( 1506484957) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 2060010048), -INT32_C( 1094897976), INT32_C( 1990486755), INT32_C( 1538419375) },
{ INT32_C( 1979668495), INT32_C( 1014895103), -INT32_C( 30510812), -INT32_C( 2137730905) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 395785148), -INT32_C( 628143714), -INT32_C( 498485290), INT32_C( 313300059) },
{ -INT32_C( 330223356), -INT32_C( 2108835748), -INT32_C( 614306243), -INT32_C( 1720240480) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 649701453), INT32_C( 1532329516), -INT32_C( 483981347), -INT32_C( 558663543) },
{ INT32_C( 1226133239), -INT32_C( 813367996), INT32_C( 830747261), -INT32_C( 346268818) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 365652404), -INT32_C( 2013801446), INT32_C( 1084678178), INT32_C( 162537697) },
{ INT32_C( 1437939728), INT32_C( 1812719201), -INT32_C( 923122673), -INT32_C( 1087617095) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comeq_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 6386856271473046416), -INT64_C( 2770677996306117174) },
{ -INT64_C( 6386856271473046416), -INT64_C( 2770677996306117174) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 6788474568251574663), INT64_C( 6759062096424348697) },
{ INT64_C( 175365179203798799), -INT64_C( 7553141662136446208) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 5356527267312463785), INT64_C( 948454573608432580) },
{ -INT64_C( 2155271835253202248), -INT64_C( 8467335260177564438) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 967758818504798251), INT64_C( 1668311107114934327) },
{ -INT64_C( 8270831391516285293), -INT64_C( 260363254095917136) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 7032190541284410856), -INT64_C( 4418485408765625445) },
{ INT64_C( 5530014961812003529), INT64_C( 3730934318756385915) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 150940866752567627), INT64_C( 6388544662910520343) },
{ INT64_C( 7462839796774061954), INT64_C( 8687675780418114675) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 7388068351796983188), INT64_C( 2304976088930770132) },
{ INT64_C( 2780819029497181157), INT64_C( 1416578837790889663) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 1269734626711540763), INT64_C( 6958671260799070969) },
{ -INT64_C( 3334082415450527717), INT64_C( 5545782954997113480) },
{ INT64_C( 0), INT64_C( 0) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comeq_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C( 9), UINT8_C( 1), UINT8_C( 63), UINT8_C( 11), UINT8_C( 67), UINT8_C( 52), UINT8_C( 70), UINT8_C( 77),
UINT8_C(175), UINT8_C(151), UINT8_C(100), UINT8_C( 94), UINT8_C(124), UINT8_C(113), UINT8_C( 82), UINT8_C( 98) },
{ UINT8_C( 9), UINT8_C( 1), UINT8_C( 63), UINT8_C( 11), UINT8_C( 67), UINT8_C( 52), UINT8_C( 70), UINT8_C( 77),
UINT8_C(175), UINT8_C(151), UINT8_C(100), UINT8_C( 94), UINT8_C(124), UINT8_C(113), UINT8_C( 82), UINT8_C( 98) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 75), UINT8_C(174), UINT8_C(221), UINT8_C( 60), UINT8_C(135), UINT8_C(223), UINT8_C(225), UINT8_C(175),
UINT8_C(245), UINT8_C(129), UINT8_C(116), UINT8_C(195), UINT8_C(140), UINT8_C(130), UINT8_C( 98), UINT8_C(107) },
{ UINT8_C(134), UINT8_C( 1), UINT8_C(218), UINT8_C(100), UINT8_C(183), UINT8_C( 86), UINT8_C(102), UINT8_C( 96),
UINT8_C( 30), UINT8_C( 82), UINT8_C( 32), UINT8_C(100), UINT8_C(186), UINT8_C(199), UINT8_C( 36), UINT8_C(111) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(158), UINT8_C( 75), UINT8_C( 65), UINT8_C( 92), UINT8_C( 72), UINT8_C( 58), UINT8_C(244), UINT8_C( 9),
UINT8_C( 47), UINT8_C(250), UINT8_C(150), UINT8_C(185), UINT8_C(155), UINT8_C(131), UINT8_C(212), UINT8_C(183) },
{ UINT8_C(185), UINT8_C( 30), UINT8_C( 96), UINT8_C( 61), UINT8_C(239), UINT8_C(108), UINT8_C(230), UINT8_C(147),
UINT8_C(109), UINT8_C(171), UINT8_C( 66), UINT8_C(123), UINT8_C( 5), UINT8_C( 53), UINT8_C(240), UINT8_C(205) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 60), UINT8_C( 73), UINT8_C(195), UINT8_C( 95), UINT8_C(161), UINT8_C( 14), UINT8_C(218), UINT8_C( 39),
UINT8_C( 93), UINT8_C(213), UINT8_C(209), UINT8_C(164), UINT8_C( 12), UINT8_C(159), UINT8_C( 52), UINT8_C(121) },
{ UINT8_C(203), UINT8_C(223), UINT8_C( 57), UINT8_C( 92), UINT8_C(146), UINT8_C(129), UINT8_C(174), UINT8_C( 46),
UINT8_C(197), UINT8_C( 42), UINT8_C( 48), UINT8_C(107), UINT8_C( 5), UINT8_C(194), UINT8_C(158), UINT8_C(197) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 76), UINT8_C( 48), UINT8_C(205), UINT8_C( 12), UINT8_C( 57), UINT8_C(100), UINT8_C(125), UINT8_C( 81),
UINT8_C(168), UINT8_C(155), UINT8_C(140), UINT8_C( 75), UINT8_C(134), UINT8_C(222), UINT8_C(106), UINT8_C(250) },
{ UINT8_C(228), UINT8_C(204), UINT8_C(205), UINT8_C(137), UINT8_C( 73), UINT8_C(154), UINT8_C(166), UINT8_C(121),
UINT8_C( 77), UINT8_C( 88), UINT8_C( 83), UINT8_C(252), UINT8_C( 99), UINT8_C(118), UINT8_C( 22), UINT8_C(159) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(247), UINT8_C(134), UINT8_C(198), UINT8_C( 44), UINT8_C(185), UINT8_C( 67), UINT8_C(196), UINT8_C(207),
UINT8_C( 56), UINT8_C(211), UINT8_C( 49), UINT8_C(119), UINT8_C(178), UINT8_C( 73), UINT8_C( 94), UINT8_C(127) },
{ UINT8_C( 42), UINT8_C(110), UINT8_C(132), UINT8_C(142), UINT8_C(188), UINT8_C(193), UINT8_C(182), UINT8_C(188),
UINT8_C( 46), UINT8_C(188), UINT8_C( 19), UINT8_C(246), UINT8_C(199), UINT8_C( 89), UINT8_C( 64), UINT8_C(163) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(100), UINT8_C(213), UINT8_C( 22), UINT8_C(135), UINT8_C(200), UINT8_C(180), UINT8_C(151), UINT8_C(232),
UINT8_C( 52), UINT8_C( 5), UINT8_C( 39), UINT8_C(240), UINT8_C( 55), UINT8_C(231), UINT8_C(249), UINT8_C( 83) },
{ UINT8_C(200), UINT8_C( 76), UINT8_C(199), UINT8_C( 50), UINT8_C(146), UINT8_C(253), UINT8_C(198), UINT8_C( 62),
UINT8_C(143), UINT8_C(223), UINT8_C(217), UINT8_C( 32), UINT8_C(216), UINT8_C(116), UINT8_C( 4), UINT8_C( 25) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(188), UINT8_C(164), UINT8_C( 36), UINT8_C(229), UINT8_C( 15), UINT8_C(190), UINT8_C(222), UINT8_C(230),
UINT8_C(196), UINT8_C(186), UINT8_C(214), UINT8_C(126), UINT8_C(191), UINT8_C(193), UINT8_C( 33), UINT8_C(189) },
{ UINT8_C(228), UINT8_C(239), UINT8_C(252), UINT8_C( 60), UINT8_C(116), UINT8_C( 87), UINT8_C(190), UINT8_C( 72),
UINT8_C(153), UINT8_C( 71), UINT8_C( 11), UINT8_C( 67), UINT8_C( 63), UINT8_C(206), UINT8_C( 75), UINT8_C( 72) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comeq_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(31782), UINT16_C( 3674), UINT16_C(26933), UINT16_C( 3969), UINT16_C(30738), UINT16_C(59814), UINT16_C(56815), UINT16_C( 1215) },
{ UINT16_C(31782), UINT16_C( 3674), UINT16_C(26933), UINT16_C( 3969), UINT16_C(30738), UINT16_C(59814), UINT16_C(56815), UINT16_C( 1215) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(56743), UINT16_C(30093), UINT16_C(54537), UINT16_C( 8838), UINT16_C(32371), UINT16_C(10003), UINT16_C(28580), UINT16_C(31227) },
{ UINT16_C(58571), UINT16_C(51487), UINT16_C(48611), UINT16_C(44137), UINT16_C(51779), UINT16_C(63743), UINT16_C(17777), UINT16_C(29116) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(41016), UINT16_C(42464), UINT16_C(33530), UINT16_C( 5126), UINT16_C( 3143), UINT16_C(37975), UINT16_C(24749), UINT16_C(62718) },
{ UINT16_C(25810), UINT16_C(57563), UINT16_C(50113), UINT16_C( 1148), UINT16_C(13698), UINT16_C(30025), UINT16_C( 493), UINT16_C(19710) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(49343), UINT16_C(37983), UINT16_C(25582), UINT16_C(26151), UINT16_C(30522), UINT16_C(21057), UINT16_C(43013), UINT16_C( 314) },
{ UINT16_C(33892), UINT16_C( 6647), UINT16_C(33398), UINT16_C(24995), UINT16_C(17397), UINT16_C( 9964), UINT16_C( 5898), UINT16_C(56687) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(50022), UINT16_C( 2416), UINT16_C(33422), UINT16_C(24527), UINT16_C(18806), UINT16_C(10295), UINT16_C(20306), UINT16_C(59545) },
{ UINT16_C(52649), UINT16_C(15833), UINT16_C( 683), UINT16_C( 2503), UINT16_C(31684), UINT16_C(54096), UINT16_C(37233), UINT16_C(27638) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(13139), UINT16_C(52605), UINT16_C(59010), UINT16_C(18663), UINT16_C( 2339), UINT16_C(57507), UINT16_C(24125), UINT16_C(61442) },
{ UINT16_C(50888), UINT16_C( 5354), UINT16_C(19463), UINT16_C(17870), UINT16_C(25880), UINT16_C(18141), UINT16_C(30410), UINT16_C(16506) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(38830), UINT16_C(43501), UINT16_C(38769), UINT16_C(26968), UINT16_C(16488), UINT16_C(16620), UINT16_C(56429), UINT16_C(25180) },
{ UINT16_C(63722), UINT16_C(26002), UINT16_C(26419), UINT16_C(23970), UINT16_C(35353), UINT16_C(18172), UINT16_C(53180), UINT16_C(41701) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(30880), UINT16_C(25128), UINT16_C(40451), UINT16_C( 2568), UINT16_C(30062), UINT16_C( 4474), UINT16_C(53643), UINT16_C(34449) },
{ UINT16_C(59702), UINT16_C(64058), UINT16_C(23510), UINT16_C(39209), UINT16_C(29166), UINT16_C(39443), UINT16_C(41967), UINT16_C(55838) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comeq_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(3281411409), UINT32_C(1944126177), UINT32_C( 448082013), UINT32_C(2760394302) },
{ UINT32_C(3281411409), UINT32_C(1944126177), UINT32_C( 448082013), UINT32_C(2760394302) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2571641813), UINT32_C(1095578009), UINT32_C( 193766336), UINT32_C( 789445132) },
{ UINT32_C(2476723944), UINT32_C(3972713395), UINT32_C( 621148764), UINT32_C( 69812527) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C( 187051758), UINT32_C(2633297956), UINT32_C(1640867510), UINT32_C(3952795067) },
{ UINT32_C(2578142093), UINT32_C(3165258016), UINT32_C(4174535059), UINT32_C(3999059205) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C( 389714090), UINT32_C(4077428766), UINT32_C(1681917177), UINT32_C(1420645027) },
{ UINT32_C(2653058410), UINT32_C( 745254353), UINT32_C(1568986923), UINT32_C(2836000617) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2280575793), UINT32_C(2389723696), UINT32_C(3679143088), UINT32_C(3022939245) },
{ UINT32_C(1785510820), UINT32_C(2230638446), UINT32_C( 428080204), UINT32_C(2115547395) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C( 581533354), UINT32_C(3038049537), UINT32_C(2421747460), UINT32_C(1359288512) },
{ UINT32_C(3320950374), UINT32_C( 204309918), UINT32_C(4147597085), UINT32_C(3044088442) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2949782077), UINT32_C(2967251258), UINT32_C(1238273053), UINT32_C(1947891781) },
{ UINT32_C(1998181590), UINT32_C( 201244937), UINT32_C(3188283591), UINT32_C(2533175927) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(4157812244), UINT32_C(3333451394), UINT32_C(3474301730), UINT32_C(1683327908) },
{ UINT32_C(1196275740), UINT32_C(3410989656), UINT32_C( 895459185), UINT32_C(1755447969) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comeq_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comeq_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 4717605833667723860), UINT64_C( 7755015510761520443) },
{ UINT64_C( 4717605833667723860), UINT64_C( 7755015510761520443) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(10522661852200296289), UINT64_C( 8451446297061403972) },
{ UINT64_C( 7429899117640998696), UINT64_C(14978668403143041426) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(12182540738121552845), UINT64_C( 278071019023567208) },
{ UINT64_C( 9332715478955625654), UINT64_C(15707509216151344972) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 6364383605199281031), UINT64_C( 6574707631012723460) },
{ UINT64_C(15463621001561887014), UINT64_C(15122938829150578580) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(16623996341821456312), UINT64_C(14221252935795067969) },
{ UINT64_C(12700545457662277281), UINT64_C(18406638509938956944) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(11321345988371400583), UINT64_C( 9807686704852845382) },
{ UINT64_C( 6153389593585271887), UINT64_C(12292702122824497000) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(14084578606058126365), UINT64_C(17178323387740530748) },
{ UINT64_C( 1075896664901780055), UINT64_C( 2035148905074804293) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(11648630285130147489), UINT64_C( 4404905146264912970) },
{ UINT64_C( 2576844816584833249), UINT64_C(11189786944117821519) },
{ UINT64_C( 0), UINT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comeq_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comeq_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { INT8_C( 60), INT8_C( 11), INT8_C( 54), -INT8_C( 32), -INT8_C( 110), -INT8_C( 37), -INT8_C( 102), INT8_MAX,
-INT8_C( 103), INT8_C( 93), -INT8_C( 120), -INT8_C( 114), INT8_C( 27), INT8_C( 7), INT8_C( 55), -INT8_C( 66) },
{ INT8_C( 60), INT8_C( 11), INT8_C( 54), -INT8_C( 32), -INT8_C( 110), -INT8_C( 37), -INT8_C( 102), INT8_MAX,
-INT8_C( 103), INT8_C( 93), -INT8_C( 120), -INT8_C( 114), INT8_C( 27), INT8_C( 7), INT8_C( 55), -INT8_C( 66) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 23), -INT8_C( 81), -INT8_C( 80), INT8_C( 62), INT8_C( 17), -INT8_C( 109), -INT8_C( 53), -INT8_C( 36),
-INT8_C( 83), -INT8_C( 100), INT8_C( 90), INT8_C( 110), INT8_C( 124), -INT8_C( 28), -INT8_C( 92), INT8_C( 112) },
{ INT8_C( 22), INT8_C( 117), INT8_C( 21), -INT8_C( 18), INT8_C( 105), INT8_C( 84), INT8_C( 51), -INT8_C( 91),
INT8_C( 80), -INT8_C( 66), -INT8_C( 44), INT8_C( 101), INT8_C( 104), -INT8_C( 79), -INT8_C( 114), -INT8_C( 71) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 31), -INT8_C( 82), INT8_C( 112), -INT8_C( 54), INT8_C( 13), -INT8_C( 66), -INT8_C( 17), -INT8_C( 127),
-INT8_C( 120), -INT8_C( 77), INT8_C( 35), -INT8_C( 20), INT8_C( 114), -INT8_C( 80), INT8_C( 52), -INT8_C( 29) },
{ INT8_C( 86), -INT8_C( 21), INT8_C( 15), -INT8_C( 21), -INT8_C( 77), -INT8_C( 78), INT8_C( 93), INT8_C( 90),
-INT8_C( 104), -INT8_C( 84), -INT8_C( 75), -INT8_C( 68), INT8_C( 113), INT8_C( 98), INT8_C( 16), INT8_C( 118) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 33), -INT8_C( 3), INT8_C( 126), -INT8_C( 87), INT8_C( 81), INT8_C( 81), INT8_C( 24), INT8_C( 89),
INT8_C( 7), INT8_C( 27), INT8_C( 54), -INT8_C( 49), INT8_C( 122), -INT8_C( 121), -INT8_C( 30), INT8_C( 59) },
{ INT8_C( 37), -INT8_C( 10), -INT8_C( 116), -INT8_C( 98), INT8_C( 26), -INT8_C( 3), -INT8_C( 1), -INT8_C( 25),
-INT8_C( 103), -INT8_C( 79), -INT8_C( 109), INT8_C( 92), -INT8_C( 31), INT8_C( 34), -INT8_C( 92), INT8_C( 60) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 70), INT8_C( 37), INT8_C( 68), -INT8_C( 93), -INT8_C( 124), INT8_C( 87), INT8_C( 45), -INT8_C( 83),
INT8_C( 83), INT8_C( 94), -INT8_C( 7), -INT8_C( 34), INT8_C( 59), INT8_C( 114), -INT8_C( 106), -INT8_C( 62) },
{ -INT8_C( 86), INT8_C( 29), -INT8_C( 12), -INT8_C( 48), INT8_C( 68), INT8_C( 62), INT8_C( 0), -INT8_C( 108),
INT8_C( 122), INT8_C( 84), -INT8_C( 42), INT8_C( 14), INT8_C( 94), -INT8_C( 7), INT8_C( 50), INT8_C( 85) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 75), -INT8_C( 83), INT8_C( 40), INT8_MAX, INT8_C( 78), -INT8_C( 43), INT8_C( 22), -INT8_C( 59),
-INT8_C( 109), INT8_C( 3), -INT8_C( 42), -INT8_C( 29), INT8_C( 94), INT8_C( 120), INT8_C( 56), -INT8_C( 66) },
{ INT8_C( 14), -INT8_C( 24), -INT8_C( 81), INT8_C( 73), -INT8_C( 39), INT8_C( 125), INT8_C( 74), -INT8_C( 87),
INT8_C( 100), INT8_C( 30), -INT8_C( 26), -INT8_C( 104), -INT8_C( 112), -INT8_C( 16), -INT8_C( 93), INT8_C( 7) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 105), INT8_C( 29), -INT8_C( 108), INT8_C( 7), INT8_C( 89), -INT8_C( 43), -INT8_C( 69), -INT8_C( 23),
-INT8_C( 16), -INT8_C( 109), INT8_C( 52), -INT8_C( 92), -INT8_C( 118), -INT8_C( 94), -INT8_C( 80), INT8_C( 120) },
{ INT8_C( 120), -INT8_C( 33), INT8_C( 37), -INT8_C( 47), -INT8_C( 126), -INT8_C( 64), -INT8_C( 60), INT8_C( 110),
INT8_C( 126), -INT8_C( 107), INT8_C( 44), -INT8_C( 62), INT8_C( 33), INT8_C( 14), -INT8_C( 35), -INT8_C( 101) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 20), -INT8_C( 2), -INT8_C( 17), INT8_C( 1), INT8_C( 74), INT8_C( 94), INT8_C( 4), INT8_C( 97),
-INT8_C( 110), -INT8_C( 107), INT8_C( 123), -INT8_C( 21), INT8_C( 104), -INT8_C( 9), -INT8_C( 26), INT8_C( 56) },
{ INT8_C( 17), -INT8_C( 117), -INT8_C( 66), INT8_C( 48), -INT8_C( 25), INT8_C( 17), INT8_C( 86), INT8_C( 43),
-INT8_C( 15), INT8_C( 67), INT8_C( 14), INT8_C( 86), -INT8_C( 74), INT8_C( 92), -INT8_C( 55), INT8_C( 89) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comneq_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 10413), INT16_C( 13985), INT16_C( 31180), INT16_C( 29913), -INT16_C( 28256), INT16_C( 32274), INT16_C( 32672), INT16_C( 18114) },
{ -INT16_C( 10413), INT16_C( 13985), INT16_C( 31180), INT16_C( 29913), -INT16_C( 28256), INT16_C( 32274), INT16_C( 32672), INT16_C( 18114) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 29440), INT16_C( 11747), INT16_C( 30639), INT16_C( 10216), -INT16_C( 20252), INT16_C( 6901), -INT16_C( 7942), -INT16_C( 30641) },
{ INT16_C( 12413), INT16_C( 28178), INT16_C( 11653), INT16_C( 27682), INT16_C( 4162), INT16_C( 9571), INT16_C( 17113), -INT16_C( 5843) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 8046), -INT16_C( 27910), -INT16_C( 1150), -INT16_C( 21662), INT16_C( 25216), -INT16_C( 10166), -INT16_C( 23406), INT16_C( 29016) },
{ -INT16_C( 28231), INT16_C( 29098), -INT16_C( 32227), -INT16_C( 28729), -INT16_C( 26206), -INT16_C( 21803), INT16_C( 18875), INT16_C( 27149) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 6275), INT16_C( 9581), -INT16_C( 23798), -INT16_C( 84), -INT16_C( 7188), INT16_C( 22131), -INT16_C( 20439), INT16_C( 24010) },
{ -INT16_C( 31952), INT16_C( 1745), -INT16_C( 32707), INT16_C( 9904), -INT16_C( 19227), -INT16_C( 11056), -INT16_C( 25616), INT16_C( 4428) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 6810), -INT16_C( 20574), INT16_C( 31212), INT16_C( 27567), -INT16_C( 17583), INT16_C( 24026), INT16_C( 2661), -INT16_C( 28017) },
{ -INT16_C( 29430), -INT16_C( 2065), INT16_C( 12429), INT16_C( 30917), -INT16_C( 5834), INT16_C( 27324), INT16_C( 16413), INT16_C( 9936) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 3648), -INT16_C( 2301), -INT16_C( 31277), INT16_C( 14161), INT16_C( 28887), -INT16_C( 19227), -INT16_C( 17170), INT16_C( 22925) },
{ INT16_C( 14446), INT16_C( 2668), -INT16_C( 26188), -INT16_C( 12305), -INT16_C( 15941), INT16_C( 13570), INT16_C( 16877), -INT16_C( 3709) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 7224), -INT16_C( 14346), -INT16_C( 12699), -INT16_C( 21893), -INT16_C( 29531), INT16_C( 9726), -INT16_C( 12691), -INT16_C( 1618) },
{ INT16_C( 2948), INT16_C( 2224), -INT16_C( 15525), INT16_C( 28948), -INT16_C( 15460), -INT16_C( 760), -INT16_C( 23291), -INT16_C( 17845) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 27017), -INT16_C( 6683), INT16_C( 23626), INT16_C( 3350), -INT16_C( 26652), INT16_C( 30348), INT16_C( 18058), -INT16_C( 17192) },
{ -INT16_C( 29067), -INT16_C( 18397), -INT16_C( 18647), -INT16_C( 22755), INT16_C( 30722), -INT16_C( 30409), INT16_C( 29712), -INT16_C( 14318) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comneq_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 439813157), -INT32_C( 1475856597), INT32_C( 1895241659), -INT32_C( 386584852) },
{ INT32_C( 439813157), -INT32_C( 1475856597), INT32_C( 1895241659), -INT32_C( 386584852) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 466794135), -INT32_C( 1175225145), -INT32_C( 1544067563), INT32_C( 1690285748) },
{ INT32_C( 777317993), -INT32_C( 1019516752), -INT32_C( 609839533), -INT32_C( 957575876) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 1379386759), -INT32_C( 277079332), INT32_C( 296818684), -INT32_C( 700812135) },
{ -INT32_C( 375071381), -INT32_C( 1500121472), INT32_C( 2130942932), -INT32_C( 1633326047) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 878212616), -INT32_C( 1851614703), -INT32_C( 1664412704), INT32_C( 1718335080) },
{ INT32_C( 328161620), -INT32_C( 1727993532), INT32_C( 594915173), -INT32_C( 1207381436) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 401022436), -INT32_C( 431226098), INT32_C( 212852968), INT32_C( 1547338441) },
{ INT32_C( 1937631308), -INT32_C( 480032349), -INT32_C( 1855694546), INT32_C( 1543358284) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 27456910), INT32_C( 929193338), INT32_C( 700647485), -INT32_C( 7347613) },
{ -INT32_C( 757721990), -INT32_C( 844816570), -INT32_C( 1892146856), -INT32_C( 798206750) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 1215551434), -INT32_C( 859065859), -INT32_C( 1150217466), -INT32_C( 1739399713) },
{ -INT32_C( 134061049), -INT32_C( 1615826220), -INT32_C( 430272757), INT32_C( 1614643118) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 1131410411), -INT32_C( 311359936), -INT32_C( 1994356884), INT32_C( 1869315044) },
{ -INT32_C( 1385603046), -INT32_C( 1586803722), INT32_C( 1580215406), INT32_C( 1347965527) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comneq_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 2145009836426055045), -INT64_C( 3692172023188427113) },
{ -INT64_C( 2145009836426055045), -INT64_C( 3692172023188427113) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 1927172668007879132), -INT64_C( 1466531328946896982) },
{ -INT64_C( 1003788530826162141), -INT64_C( 630571924344221778) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 6093841530576535157), INT64_C( 8650587926085505254) },
{ INT64_C( 7483676463588208182), INT64_C( 4020443149158757337) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 7652666475017031668), INT64_C( 4500793761105799243) },
{ -INT64_C( 8682651005132106533), -INT64_C( 3004755848539594430) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 2763101731854593481), -INT64_C( 8733947786854461951) },
{ -INT64_C( 7211148372848030917), INT64_C( 1921978243298205966) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 5700269870367375317), -INT64_C( 7426619846471480785) },
{ -INT64_C( 1584459702047040899), INT64_C( 5535302230343596904) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 6340521394491436376), -INT64_C( 4841440811628337666) },
{ -INT64_C( 4707356538522662197), -INT64_C( 5501906473491040138) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 8581209791696617351), INT64_C( 4201864310067635861) },
{ INT64_C( 6760919033000960586), -INT64_C( 7417949586054127776) },
{ -INT64_C( 1), -INT64_C( 1) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comneq_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C( 97), UINT8_C( 63), UINT8_C(177), UINT8_C( 41), UINT8_C(135), UINT8_C(142), UINT8_C(197), UINT8_C( 40),
UINT8_C( 29), UINT8_C( 85), UINT8_C( 24), UINT8_C(121), UINT8_C(136), UINT8_C( 51), UINT8_C( 92), UINT8_C( 89) },
{ UINT8_C( 97), UINT8_C( 63), UINT8_C(177), UINT8_C( 41), UINT8_C(135), UINT8_C(142), UINT8_C(197), UINT8_C( 40),
UINT8_C( 29), UINT8_C( 85), UINT8_C( 24), UINT8_C(121), UINT8_C(136), UINT8_C( 51), UINT8_C( 92), UINT8_C( 89) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 36), UINT8_C(234), UINT8_C(216), UINT8_C( 67), UINT8_C(146), UINT8_C(101), UINT8_C( 93), UINT8_C( 16),
UINT8_C( 79), UINT8_C(249), UINT8_C(124), UINT8_C( 99), UINT8_C(139), UINT8_C(235), UINT8_C(246), UINT8_C( 68) },
{ UINT8_C( 56), UINT8_C( 50), UINT8_C(116), UINT8_C( 11), UINT8_C( 97), UINT8_C(127), UINT8_C(120), UINT8_C(128),
UINT8_C(189), UINT8_C(123), UINT8_C(148), UINT8_C( 64), UINT8_C(132), UINT8_C( 79), UINT8_C(218), UINT8_C( 99) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(129), UINT8_C(106), UINT8_C(147), UINT8_C( 91), UINT8_C(105), UINT8_C(126), UINT8_C( 52), UINT8_C( 31),
UINT8_C(107), UINT8_C(204), UINT8_C(141), UINT8_C(138), UINT8_C( 8), UINT8_C(162), UINT8_C( 68), UINT8_C(253) },
{ UINT8_C( 37), UINT8_C( 34), UINT8_C(130), UINT8_C( 76), UINT8_C( 94), UINT8_C( 68), UINT8_C(236), UINT8_C(216),
UINT8_C(158), UINT8_C( 31), UINT8_C(213), UINT8_C(248), UINT8_C(236), UINT8_C(100), UINT8_C(177), UINT8_C(158) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(136), UINT8_C( 43), UINT8_C(205), UINT8_C( 55), UINT8_C( 55), UINT8_C(242), UINT8_C( 62), UINT8_C(210),
UINT8_C(219), UINT8_C(226), UINT8_C( 24), UINT8_C(133), UINT8_C( 70), UINT8_C( 85), UINT8_C(224), UINT8_C( 12) },
{ UINT8_C( 80), UINT8_C(150), UINT8_C( 67), UINT8_C(180), UINT8_C( 39), UINT8_C(231), UINT8_C( 7), UINT8_C(120),
UINT8_C(231), UINT8_C(201), UINT8_C( 67), UINT8_C(105), UINT8_C(107), UINT8_C(119), UINT8_C(203), UINT8_C( 83) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 98), UINT8_C(180), UINT8_C(239), UINT8_C(157), UINT8_C(165), UINT8_C(198), UINT8_C(101), UINT8_C(113),
UINT8_C(200), UINT8_C(195), UINT8_C(131), UINT8_C( 29), UINT8_C(238), UINT8_C( 11), UINT8_C(177), UINT8_C(185) },
{ UINT8_C(226), UINT8_C( 22), UINT8_C( 31), UINT8_C( 10), UINT8_C(100), UINT8_C(112), UINT8_C(179), UINT8_C(167),
UINT8_C(193), UINT8_C( 1), UINT8_C( 70), UINT8_C( 90), UINT8_C(167), UINT8_C(146), UINT8_C( 15), UINT8_C(201) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 54), UINT8_C(141), UINT8_C( 95), UINT8_C( 86), UINT8_C( 90), UINT8_C( 4), UINT8_C(143), UINT8_C( 67),
UINT8_C( 89), UINT8_C(245), UINT8_C( 55), UINT8_C( 26), UINT8_C(168), UINT8_C(205), UINT8_C(161), UINT8_C( 76) },
{ UINT8_C( 3), UINT8_C( 42), UINT8_C(126), UINT8_C( 24), UINT8_C(188), UINT8_C(229), UINT8_C(215), UINT8_C(174),
UINT8_C( 84), UINT8_C( 80), UINT8_C( 70), UINT8_C(149), UINT8_C( 72), UINT8_C(188), UINT8_C(101), UINT8_C( 74) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 45), UINT8_C( 63), UINT8_C(135), UINT8_C( 42), UINT8_MAX, UINT8_C(180), UINT8_C(166), UINT8_C(145),
UINT8_C(183), UINT8_C( 2), UINT8_C(157), UINT8_C( 68), UINT8_C( 27), UINT8_C(162), UINT8_C(151), UINT8_C( 12) },
{ UINT8_C(218), UINT8_C( 91), UINT8_C(200), UINT8_C(164), UINT8_C(216), UINT8_C( 80), UINT8_C( 91), UINT8_C(213),
UINT8_C(199), UINT8_C( 61), UINT8_C(171), UINT8_C(224), UINT8_C(247), UINT8_C(254), UINT8_C(181), UINT8_C( 28) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(111), UINT8_C( 81), UINT8_C(206), UINT8_C(224), UINT8_C( 60), UINT8_C(220), UINT8_C(145), UINT8_C(163),
UINT8_C( 9), UINT8_C(114), UINT8_C( 28), UINT8_C( 98), UINT8_C(240), UINT8_C(146), UINT8_C(124), UINT8_C( 67) },
{ UINT8_C(144), UINT8_C( 48), UINT8_C(101), UINT8_C(119), UINT8_C( 96), UINT8_C(184), UINT8_C( 38), UINT8_C(100),
UINT8_C( 66), UINT8_C( 81), UINT8_C(221), UINT8_C( 4), UINT8_C( 92), UINT8_C( 95), UINT8_C(231), UINT8_C(136) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comneq_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(19235), UINT16_C(17051), UINT16_C(34488), UINT16_C(49464), UINT16_C(52088), UINT16_C(15899), UINT16_C(42447), UINT16_C(14134) },
{ UINT16_C(19235), UINT16_C(17051), UINT16_C(34488), UINT16_C(49464), UINT16_C(52088), UINT16_C(15899), UINT16_C(42447), UINT16_C(14134) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(12876), UINT16_C(22973), UINT16_C( 9979), UINT16_C(41762), UINT16_C( 4847), UINT16_C(51524), UINT16_C(59166), UINT16_C(55012) },
{ UINT16_C(46706), UINT16_C( 5720), UINT16_C(47388), UINT16_C(13187), UINT16_C(38700), UINT16_C(40452), UINT16_C(58462), UINT16_C(12462) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(59191), UINT16_C( 4664), UINT16_C(41297), UINT16_C(55862), UINT16_C( 2804), UINT16_C(63048), UINT16_C(40677), UINT16_C(20114) },
{ UINT16_C( 6275), UINT16_C( 9580), UINT16_C(32271), UINT16_C(16474), UINT16_C(23884), UINT16_C(19262), UINT16_C(22088), UINT16_C(30924) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(55673), UINT16_C(26943), UINT16_C(12555), UINT16_C(20554), UINT16_C(49529), UINT16_C(21842), UINT16_C(36187), UINT16_C(14554) },
{ UINT16_C(64639), UINT16_C(14143), UINT16_C(56378), UINT16_C(12965), UINT16_C(42496), UINT16_C( 3377), UINT16_C( 819), UINT16_C(22137) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(36921), UINT16_C(10040), UINT16_C(57041), UINT16_C(20039), UINT16_C(48807), UINT16_C(44232), UINT16_C(47910), UINT16_C(56228) },
{ UINT16_C(59277), UINT16_C( 5177), UINT16_C(56133), UINT16_C(20300), UINT16_C(63858), UINT16_C(43845), UINT16_C(62664), UINT16_C( 4507) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(37791), UINT16_C( 5261), UINT16_C(45386), UINT16_C( 7187), UINT16_C(35237), UINT16_C(50196), UINT16_C(12526), UINT16_C(32985) },
{ UINT16_C(25558), UINT16_C(33730), UINT16_C(33751), UINT16_C(57399), UINT16_C(57031), UINT16_C(61410), UINT16_C(12462), UINT16_C(61979) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(27349), UINT16_C(63652), UINT16_C(45343), UINT16_C( 663), UINT16_C(43676), UINT16_C(26012), UINT16_C(62812), UINT16_C(28511) },
{ UINT16_C(63361), UINT16_C(19778), UINT16_C(56728), UINT16_C(11343), UINT16_C(56618), UINT16_C(40816), UINT16_C(49037), UINT16_C(16866) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(40192), UINT16_C(39911), UINT16_C(59384), UINT16_C(18619), UINT16_C(43444), UINT16_C(22218), UINT16_C( 4375), UINT16_C(61472) },
{ UINT16_C(11447), UINT16_C(14881), UINT16_C(61490), UINT16_C(32122), UINT16_C(32705), UINT16_C(33879), UINT16_C(43535), UINT16_C(18135) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comneq_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(3317478475), UINT32_C( 896031099), UINT32_C(1627721492), UINT32_C(1258523848) },
{ UINT32_C(3317478475), UINT32_C( 896031099), UINT32_C(1627721492), UINT32_C(1258523848) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C( 315066528), UINT32_C( 430031946), UINT32_C(1728007092), UINT32_C(1222768858) },
{ UINT32_C(1032665308), UINT32_C( 310645075), UINT32_C(1286890725), UINT32_C(3354357527) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2644284771), UINT32_C(1236099723), UINT32_C( 231852588), UINT32_C(2448077206) },
{ UINT32_C(3435246043), UINT32_C( 670570278), UINT32_C(3762368078), UINT32_C(2916008363) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2735332137), UINT32_C(1434767770), UINT32_C(1077117521), UINT32_C(1742331628) },
{ UINT32_C( 985703793), UINT32_C(3165483421), UINT32_C(3843291000), UINT32_C(1166510637) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(3950305561), UINT32_C(2232424738), UINT32_C(3381591370), UINT32_C( 328631939) },
{ UINT32_C(1341300422), UINT32_C( 428484959), UINT32_C( 596788875), UINT32_C(3607286340) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(1044787036), UINT32_C( 557269961), UINT32_C(1850458944), UINT32_C(3691557125) },
{ UINT32_C(3535741697), UINT32_C(2255898389), UINT32_C(1646699694), UINT32_C(2871501465) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(1692945689), UINT32_C(1893946935), UINT32_C(4174404186), UINT32_C( 202991383) },
{ UINT32_C(2375007562), UINT32_C(1247531366), UINT32_C(1765251081), UINT32_C( 165544404) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C( 633390201), UINT32_C(3153811989), UINT32_C( 780618945), UINT32_C(3937448291) },
{ UINT32_C(1187705547), UINT32_C(2921386491), UINT32_C( 19770053), UINT32_C( 940570780) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comneq_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comneq_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 5361350686904162980), UINT64_C(13669997797138899356) },
{ UINT64_C( 5361350686904162980), UINT64_C(13669997797138899356) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(18063179973976935849), UINT64_C( 9341185368968421898) },
{ UINT64_C( 7282134507660499649), UINT64_C(14848683848067669780) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8568750919223694095), UINT64_C( 3206505158861670911) },
{ UINT64_C( 6114586325512653304), UINT64_C( 7325759221035798609) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 7620057443402157603), UINT64_C( 9335601207311263437) },
{ UINT64_C( 6823929844010168691), UINT64_C(14513196095610043258) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 2095306404218111245), UINT64_C(14391353092876059035) },
{ UINT64_C(14807743135612787031), UINT64_C( 4915358179487967671) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(15623489378715681014), UINT64_C( 5252251355818517394) },
{ UINT64_C(16656562333259696847), UINT64_C( 2088054659659145522) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(16419614906668926982), UINT64_C( 5402323566441812954) },
{ UINT64_C(17695625336589536000), UINT64_C(11140625531488398096) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 9665645717917344868), UINT64_C( 1648566707567335834) },
{ UINT64_C( 4515750840144995349), UINT64_C( 433321513721155452) },
{ UINT64_MAX, UINT64_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comneq_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comneq_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { INT8_C( 57), INT8_C( 92), INT8_C( 113), -INT8_C( 91), -INT8_C( 30), INT8_C( 16), -INT8_C( 120), INT8_C( 8),
-INT8_C( 5), INT8_C( 62), -INT8_C( 44), -INT8_C( 32), -INT8_C( 124), -INT8_C( 77), -INT8_C( 127), -INT8_C( 12) },
{ INT8_C( 57), INT8_C( 92), INT8_C( 113), -INT8_C( 91), -INT8_C( 30), INT8_C( 16), -INT8_C( 120), INT8_C( 8),
-INT8_C( 5), INT8_C( 62), -INT8_C( 44), -INT8_C( 32), -INT8_C( 124), -INT8_C( 77), -INT8_C( 127), -INT8_C( 12) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 52), INT8_C( 29), INT8_C( 19), INT8_C( 11), -INT8_C( 56), INT8_C( 19), INT8_C( 88), INT8_C( 12),
-INT8_C( 100), INT8_C( 86), -INT8_C( 102), INT8_C( 100), INT8_C( 120), INT8_C( 87), INT8_C( 24), -INT8_C( 88) },
{ -INT8_C( 84), -INT8_C( 7), -INT8_C( 72), INT8_C( 123), INT8_C( 95), -INT8_C( 105), -INT8_C( 10), -INT8_C( 77),
INT8_C( 36), INT8_C( 73), INT8_C( 32), -INT8_C( 73), -INT8_C( 50), INT8_C( 99), -INT8_C( 59), INT8_C( 43) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 122), INT8_C( 63), INT8_C( 107), -INT8_C( 48), INT8_C( 26), INT8_C( 61), INT8_MIN, -INT8_C( 91),
-INT8_C( 104), INT8_C( 7), -INT8_C( 109), INT8_C( 83), INT8_C( 28), INT8_C( 26), -INT8_C( 60), -INT8_C( 57) },
{ -INT8_C( 26), -INT8_C( 126), INT8_C( 121), INT8_C( 33), -INT8_C( 81), -INT8_C( 28), INT8_C( 83), -INT8_C( 51),
INT8_C( 61), -INT8_C( 62), INT8_C( 97), -INT8_C( 17), INT8_C( 54), -INT8_C( 5), -INT8_C( 109), INT8_C( 5) },
{ INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0),
INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0) } },
{ { INT8_C( 50), -INT8_C( 111), INT8_C( 113), -INT8_C( 56), INT8_C( 19), -INT8_C( 81), INT8_C( 12), INT8_C( 82),
-INT8_C( 103), -INT8_C( 21), INT8_C( 53), -INT8_C( 122), INT8_C( 49), -INT8_C( 56), -INT8_C( 18), -INT8_C( 83) },
{ INT8_C( 14), INT8_MAX, INT8_C( 30), INT8_C( 93), INT8_C( 123), -INT8_C( 1), -INT8_C( 119), -INT8_C( 97),
INT8_C( 112), INT8_C( 50), -INT8_C( 2), INT8_C( 80), INT8_C( 99), -INT8_C( 126), -INT8_C( 46), -INT8_C( 56) },
{ -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), 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( 1), -INT8_C( 1), INT8_C( 0) } },
{ { INT8_C( 96), -INT8_C( 100), -INT8_C( 114), -INT8_C( 70), INT8_C( 92), INT8_C( 115), -INT8_C( 27), INT8_C( 91),
-INT8_C( 57), -INT8_C( 120), -INT8_C( 23), -INT8_C( 57), INT8_C( 96), INT8_C( 106), INT8_C( 126), -INT8_C( 96) },
{ INT8_C( 77), INT8_C( 120), INT8_C( 14), -INT8_C( 8), INT8_C( 107), -INT8_C( 18), INT8_C( 126), INT8_C( 113),
-INT8_C( 29), INT8_C( 32), INT8_C( 97), -INT8_C( 94), -INT8_C( 2), INT8_C( 0), INT8_C( 108), -INT8_C( 67) },
{ -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( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0) } },
{ { INT8_C( 58), -INT8_C( 26), INT8_C( 42), INT8_C( 111), -INT8_C( 99), -INT8_C( 111), -INT8_C( 15), INT8_C( 8),
INT8_C( 73), INT8_C( 105), INT8_C( 21), -INT8_C( 36), INT8_C( 81), INT8_C( 6), INT8_C( 91), -INT8_C( 23) },
{ -INT8_C( 53), -INT8_C( 10), -INT8_C( 79), -INT8_C( 70), INT8_C( 38), -INT8_C( 69), INT8_C( 28), -INT8_C( 117),
-INT8_C( 66), INT8_C( 20), -INT8_C( 15), -INT8_C( 83), -INT8_C( 82), INT8_C( 126), INT8_C( 72), INT8_C( 44) },
{ -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), 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( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 27), -INT8_C( 7), -INT8_C( 82), -INT8_C( 80), INT8_C( 125), INT8_C( 15), INT8_C( 26), -INT8_C( 95),
INT8_C( 72), INT8_C( 19), INT8_C( 35), -INT8_C( 114), -INT8_C( 85), -INT8_C( 89), INT8_C( 111), -INT8_C( 48) },
{ -INT8_C( 81), INT8_MIN, INT8_C( 111), INT8_C( 106), INT8_C( 85), INT8_C( 110), INT8_C( 73), INT8_C( 52),
INT8_C( 42), -INT8_C( 106), INT8_C( 22), INT8_C( 57), INT8_C( 28), INT8_C( 2), INT8_C( 78), INT8_C( 93) },
{ -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( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 116), INT8_C( 93), INT8_MIN, INT8_C( 67), -INT8_C( 92), -INT8_C( 9), INT8_C( 71), INT8_C( 109),
-INT8_C( 21), INT8_C( 16), INT8_C( 121), -INT8_C( 91), INT8_C( 22), INT8_C( 82), -INT8_C( 95), -INT8_C( 100) },
{ INT8_C( 34), -INT8_C( 97), -INT8_C( 80), -INT8_C( 46), -INT8_C( 97), INT8_C( 13), -INT8_C( 17), -INT8_C( 75),
INT8_C( 79), INT8_C( 47), INT8_C( 56), INT8_C( 13), -INT8_C( 17), -INT8_C( 105), INT8_C( 102), -INT8_C( 105) },
{ INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1),
INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comge_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comge_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 26539), -INT16_C( 4086), INT16_C( 20923), -INT16_C( 19104), -INT16_C( 6565), -INT16_C( 5759), INT16_C( 4412), -INT16_C( 26663) },
{ -INT16_C( 26539), -INT16_C( 4086), INT16_C( 20923), -INT16_C( 19104), -INT16_C( 6565), -INT16_C( 5759), INT16_C( 4412), -INT16_C( 26663) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 9653), -INT16_C( 18212), -INT16_C( 23891), INT16_C( 22261), INT16_C( 26196), -INT16_C( 3393), INT16_C( 17104), INT16_C( 9336) },
{ INT16_C( 13416), -INT16_C( 32333), INT16_C( 9066), -INT16_C( 16052), INT16_C( 8383), INT16_C( 8865), -INT16_C( 5182), INT16_C( 2047) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 18093), -INT16_C( 6821), INT16_C( 13350), INT16_C( 24387), -INT16_C( 15263), -INT16_C( 20460), INT16_C( 3431), INT16_C( 19052) },
{ -INT16_C( 17938), -INT16_C( 17182), INT16_C( 30552), -INT16_C( 9739), INT16_C( 17216), INT16_C( 5955), -INT16_C( 5805), INT16_C( 13820) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 15263), INT16_C( 8597), -INT16_C( 13133), INT16_C( 6337), -INT16_C( 12128), INT16_C( 3997), -INT16_C( 165), INT16_C( 21034) },
{ -INT16_C( 21233), INT16_C( 27393), INT16_C( 21550), INT16_C( 17730), -INT16_C( 9978), -INT16_C( 28210), INT16_C( 4501), INT16_C( 27062) },
{ -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 31586), INT16_C( 13299), INT16_C( 29180), -INT16_C( 13993), INT16_C( 4663), -INT16_C( 10301), INT16_C( 8277), -INT16_C( 31589) },
{ -INT16_C( 25870), INT16_C( 21623), -INT16_C( 15469), INT16_C( 19483), INT16_C( 27192), INT16_C( 22698), INT16_C( 27952), -INT16_C( 5354) },
{ INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 32719), -INT16_C( 6693), INT16_C( 11176), -INT16_C( 17939), INT16_C( 4686), -INT16_C( 12306), INT16_C( 31228), INT16_C( 10149) },
{ INT16_C( 1984), INT16_C( 16556), -INT16_C( 13776), INT16_C( 14440), INT16_C( 31998), INT16_C( 13374), INT16_C( 1485), INT16_C( 516) },
{ INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 16451), -INT16_C( 586), INT16_C( 608), INT16_C( 12651), INT16_C( 22798), -INT16_C( 16249), INT16_C( 4601), -INT16_C( 31439) },
{ INT16_C( 32160), -INT16_C( 2552), INT16_C( 29869), INT16_C( 20241), -INT16_C( 26239), -INT16_C( 4620), -INT16_C( 8428), -INT16_C( 2199) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 19964), INT16_C( 17645), -INT16_C( 53), INT16_C( 31161), INT16_C( 28318), INT16_C( 29428), -INT16_C( 3597), -INT16_C( 7128) },
{ -INT16_C( 31813), INT16_C( 16627), -INT16_C( 14671), -INT16_C( 9473), INT16_C( 18665), INT16_C( 18995), INT16_C( 1452), INT16_C( 4651) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comge_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comge_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 2098844029), -INT32_C( 641783406), -INT32_C( 1382033113), -INT32_C( 1922031725) },
{ -INT32_C( 2098844029), -INT32_C( 641783406), -INT32_C( 1382033113), -INT32_C( 1922031725) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 455761607), INT32_C( 538495716), INT32_C( 342102622), -INT32_C( 1691058370) },
{ INT32_C( 2131454721), -INT32_C( 1721333412), INT32_C( 971908049), -INT32_C( 923556479) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 1424597183), INT32_C( 1799718895), INT32_C( 334331143), -INT32_C( 630566031) },
{ INT32_C( 46370205), INT32_C( 9709010), -INT32_C( 582233149), -INT32_C( 594048156) },
{ INT32_C( 0), -INT32_C( 1), -INT32_C( 1), INT32_C( 0) } },
{ { INT32_C( 1562265339), INT32_C( 24053114), INT32_C( 255267596), INT32_C( 397904878) },
{ -INT32_C( 713745536), INT32_C( 1462896540), INT32_C( 1646096678), INT32_C( 323409892) },
{ -INT32_C( 1), INT32_C( 0), INT32_C( 0), -INT32_C( 1) } },
{ { -INT32_C( 1034560112), INT32_C( 729566508), -INT32_C( 794141546), -INT32_C( 1727910052) },
{ -INT32_C( 1098146351), -INT32_C( 433506463), -INT32_C( 1848867551), -INT32_C( 1276669014) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), INT32_C( 0) } },
{ { -INT32_C( 1591432152), INT32_C( 827745966), INT32_C( 497999821), -INT32_C( 1456257692) },
{ -INT32_C( 2039702343), -INT32_C( 178275383), INT32_C( 817928413), INT32_C( 90359390) },
{ -INT32_C( 1), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 990823190), INT32_C( 1541626023), -INT32_C( 1062460200), -INT32_C( 1892558930) },
{ -INT32_C( 176119968), -INT32_C( 859923074), INT32_C( 123744642), INT32_C( 1369405864) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 249228033), -INT32_C( 250794816), INT32_C( 2131407839), -INT32_C( 1813582623) },
{ -INT32_C( 768659731), -INT32_C( 1288837851), -INT32_C( 535373513), -INT32_C( 544885970) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), INT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comge_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comge_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { INT64_C( 4231951681613053327), -INT64_C( 199972968041671412) },
{ INT64_C( 4231951681613053327), -INT64_C( 199972968041671412) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 1039318408851500663), -INT64_C( 648944288963881180) },
{ INT64_C( 9211154201577831873), INT64_C( 1446431342413402501) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 3469245127459991205), -INT64_C( 2309541123369831566) },
{ INT64_C( 595107754553482941), INT64_C( 2403110769458442098) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 7644461919772969588), -INT64_C( 2069442768328493751) },
{ INT64_C( 2156352861533824940), INT64_C( 7851466218311481340) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 8383284232392702397), INT64_C( 5253030957281289936) },
{ INT64_C( 484869302557483446), INT64_C( 4454658751047889483) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { -INT64_C( 504594842707768663), INT64_C( 6248703133163752752) },
{ INT64_C( 762337237287621378), -INT64_C( 2534416100243281786) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { INT64_C( 2798601033062927334), INT64_C( 6314863776929002384) },
{ INT64_C( 8314271650882946489), -INT64_C( 8006698707022159915) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { INT64_C( 6563306511736312097), -INT64_C( 7957661828417413607) },
{ -INT64_C( 8715528813258751998), -INT64_C( 6635828572573114015) },
{ -INT64_C( 1), INT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comge_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comge_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(130), UINT8_C( 34), UINT8_C( 53), UINT8_C( 20), UINT8_C( 99), UINT8_C( 30), UINT8_C(164), UINT8_C(224),
UINT8_C(243), UINT8_C(216), UINT8_C(125), UINT8_C(129), UINT8_C(206), UINT8_C( 73), UINT8_C(103), UINT8_C( 77) },
{ UINT8_C(130), UINT8_C( 34), UINT8_C( 53), UINT8_C( 20), UINT8_C( 99), UINT8_C( 30), UINT8_C(164), UINT8_C(224),
UINT8_C(243), UINT8_C(216), UINT8_C(125), UINT8_C(129), UINT8_C(206), UINT8_C( 73), UINT8_C(103), UINT8_C( 77) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 6), UINT8_C( 10), UINT8_C( 35), UINT8_C( 86), UINT8_C(117), UINT8_C( 95), UINT8_C(122), UINT8_C(143),
UINT8_C( 82), UINT8_C(117), UINT8_C(116), UINT8_C( 48), UINT8_C( 3), UINT8_C(232), UINT8_C(203), UINT8_C( 91) },
{ UINT8_C( 50), UINT8_C(136), UINT8_C(159), UINT8_MAX, UINT8_C( 35), UINT8_C( 93), UINT8_C(107), UINT8_C(253),
UINT8_C( 69), UINT8_C(233), UINT8_C( 56), UINT8_C(137), UINT8_C( 7), UINT8_C(172), UINT8_C( 17), UINT8_C(211) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0),
UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C(236), UINT8_C(238), UINT8_C(182), UINT8_C(231), UINT8_C(226), UINT8_C(184), UINT8_C(149), UINT8_C(210),
UINT8_C(208), UINT8_C( 36), UINT8_C(245), UINT8_C( 7), UINT8_C(110), UINT8_C(214), UINT8_C(117), UINT8_C( 1) },
{ UINT8_C( 89), UINT8_C(203), UINT8_C(181), UINT8_C( 41), UINT8_C(103), UINT8_C( 82), UINT8_C( 83), UINT8_C(249),
UINT8_C( 55), UINT8_C( 87), UINT8_C( 25), UINT8_C( 98), UINT8_C( 13), UINT8_C(231), UINT8_C(116), UINT8_C(107) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0),
UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C(221), UINT8_C(241), UINT8_C( 40), UINT8_C( 28), UINT8_C(166), UINT8_C( 74), UINT8_C( 67), UINT8_C(154),
UINT8_C( 2), UINT8_C(244), UINT8_C( 79), UINT8_C(147), UINT8_C(250), UINT8_C(160), UINT8_C(204), UINT8_C(220) },
{ UINT8_C( 30), UINT8_C(113), UINT8_C(222), UINT8_C( 89), UINT8_C(214), UINT8_C( 3), UINT8_C( 66), UINT8_C( 30),
UINT8_C(243), UINT8_C(172), UINT8_C(134), UINT8_C(211), UINT8_C(137), UINT8_C( 2), UINT8_C(122), UINT8_C( 93) },
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 1), UINT8_C(157), UINT8_C(226), UINT8_C(187), UINT8_C(106), UINT8_C( 30), UINT8_C(109), UINT8_C( 45),
UINT8_C( 16), UINT8_C(111), UINT8_C(235), UINT8_C(156), UINT8_C( 80), UINT8_C( 77), UINT8_C(186), UINT8_C( 54) },
{ UINT8_C(170), UINT8_C( 4), UINT8_C(129), UINT8_C( 89), UINT8_C( 24), UINT8_C(122), UINT8_C( 33), UINT8_C(178),
UINT8_C(158), UINT8_C(111), UINT8_C(233), UINT8_C(166), UINT8_C( 35), UINT8_C( 3), UINT8_C( 10), UINT8_C(240) },
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C(127), UINT8_C(121), UINT8_C( 74), UINT8_C(140), UINT8_C(213), UINT8_C( 58), UINT8_C(252), UINT8_C(212),
UINT8_C( 35), UINT8_C( 29), UINT8_C( 47), UINT8_C(234), UINT8_C( 23), UINT8_C(229), UINT8_C( 38), UINT8_C( 85) },
{ UINT8_C( 37), UINT8_C( 12), UINT8_C( 8), UINT8_C(239), UINT8_C(214), UINT8_C(191), UINT8_C(217), UINT8_C(254),
UINT8_C( 99), UINT8_C( 41), UINT8_C(169), UINT8_C(161), UINT8_C(130), UINT8_C(244), UINT8_C( 11), UINT8_C(110) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C(128), UINT8_C( 13), UINT8_C(201), UINT8_C( 89), UINT8_C(144), UINT8_C(168), UINT8_C(214), UINT8_C(215),
UINT8_C( 99), UINT8_C(133), UINT8_C(132), UINT8_C( 68), UINT8_C(248), UINT8_C(113), UINT8_C(247), UINT8_C(130) },
{ UINT8_C(182), UINT8_C( 15), UINT8_C(218), UINT8_C(228), UINT8_C(184), UINT8_C(216), UINT8_C( 80), UINT8_C( 74),
UINT8_C(104), UINT8_C( 97), UINT8_C( 46), UINT8_C(141), UINT8_C( 79), UINT8_C(220), UINT8_C(103), UINT8_C( 29) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX,
UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 43), UINT8_C(226), UINT8_C(200), UINT8_C(232), UINT8_C( 66), UINT8_C(112), UINT8_C(229), UINT8_C(126),
UINT8_C(247), UINT8_C( 47), UINT8_C( 83), UINT8_C(115), UINT8_C(155), UINT8_C(248), UINT8_C( 23), UINT8_C( 5) },
{ UINT8_C(133), UINT8_C(151), UINT8_C( 95), UINT8_MAX, UINT8_C(101), UINT8_C(207), UINT8_C(112), UINT8_C(222),
UINT8_C(213), UINT8_C(159), UINT8_C(224), UINT8_C( 49), UINT8_C( 49), UINT8_C(196), UINT8_C( 5), UINT8_C( 70) },
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comge_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comge_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(32681), UINT16_C( 685), UINT16_C(39060), UINT16_C( 4367), UINT16_C(41735), UINT16_C(16386), UINT16_C(33447), UINT16_C( 9837) },
{ UINT16_C(32681), UINT16_C( 685), UINT16_C(39060), UINT16_C( 4367), UINT16_C(41735), UINT16_C(16386), UINT16_C(33447), UINT16_C( 9837) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(11195), UINT16_C( 2815), UINT16_C(44166), UINT16_C( 288), UINT16_C(27859), UINT16_C(22311), UINT16_C(46033), UINT16_C(12493) },
{ UINT16_C(27681), UINT16_C(28641), UINT16_C(10798), UINT16_C(55102), UINT16_C(27325), UINT16_C(28923), UINT16_C( 6341), UINT16_C(11745) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(21632), UINT16_C(52002), UINT16_C(30146), UINT16_C(64583), UINT16_C(20106), UINT16_C(50539), UINT16_C(45526), UINT16_C( 9639) },
{ UINT16_C(12988), UINT16_C(63437), UINT16_C(11703), UINT16_C( 6489), UINT16_C( 2879), UINT16_C(52900), UINT16_C(49308), UINT16_C(24923) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(39163), UINT16_C( 3120), UINT16_C(13506), UINT16_C( 6095), UINT16_C(53025), UINT16_C(17428), UINT16_C(51177), UINT16_C(27515) },
{ UINT16_C(22690), UINT16_C(25304), UINT16_C(43736), UINT16_C( 8008), UINT16_C( 3765), UINT16_C( 8551), UINT16_C(34005), UINT16_C( 3267) },
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(33365), UINT16_C(37777), UINT16_C(61485), UINT16_C(39583), UINT16_C(30656), UINT16_C(40074), UINT16_C(64434), UINT16_C(19249) },
{ UINT16_C(26362), UINT16_C(30569), UINT16_C(43064), UINT16_C(12787), UINT16_C(64584), UINT16_C(12459), UINT16_C(27671), UINT16_C(29697) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0) } },
{ { UINT16_C(38837), UINT16_C(10413), UINT16_C(45740), UINT16_C(52639), UINT16_C(52625), UINT16_C(38197), UINT16_C(22488), UINT16_C( 3505) },
{ UINT16_C(58860), UINT16_C(65514), UINT16_C(12160), UINT16_C(38722), UINT16_C(23327), UINT16_C(50391), UINT16_C(32523), UINT16_C(57854) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(24900), UINT16_C(38381), UINT16_C(33255), UINT16_C(63671), UINT16_C(22969), UINT16_C(63358), UINT16_C(58116), UINT16_C(63971) },
{ UINT16_C(23714), UINT16_C(50114), UINT16_C(18519), UINT16_C(38941), UINT16_C(46692), UINT16_C(42325), UINT16_C(50520), UINT16_C(40352) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(26410), UINT16_C(41399), UINT16_C(25989), UINT16_C(25295), UINT16_C(41827), UINT16_C(35275), UINT16_C(42717), UINT16_C(22448) },
{ UINT16_C(21313), UINT16_C(34905), UINT16_C(63846), UINT16_C(32364), UINT16_C(37436), UINT16_C(39820), UINT16_C(18087), UINT16_C(61392) },
{ UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comge_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comge_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C( 326381966), UINT32_C(1422878255), UINT32_C( 344274101), UINT32_C(1862182924) },
{ UINT32_C( 326381966), UINT32_C(1422878255), UINT32_C( 344274101), UINT32_C(1862182924) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C( 420958964), UINT32_C(2400668756), UINT32_C(1860467153), UINT32_C( 511118240) },
{ UINT32_C(3029158040), UINT32_C( 379555212), UINT32_C(1612026839), UINT32_C(2276979000) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(1030021857), UINT32_C( 335956426), UINT32_C(3854955083), UINT32_C(1937447914) },
{ UINT32_C(1281897330), UINT32_C(4029210949), UINT32_C( 903956722), UINT32_C(3938552330) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(3148384816), UINT32_C(1411512176), UINT32_C(3398928082), UINT32_C( 918978094) },
{ UINT32_C(2741992001), UINT32_C( 709913089), UINT32_C(1532222510), UINT32_C(3741743658) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(1548473098), UINT32_C(2572246765), UINT32_C(3821190028), UINT32_C(2940091667) },
{ UINT32_C(2148116016), UINT32_C( 184562025), UINT32_C(2580731570), UINT32_C(2926364991) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(3904193687), UINT32_C( 696026858), UINT32_C(4188937380), UINT32_C( 634216258) },
{ UINT32_C(2895986276), UINT32_C(3693165860), UINT32_C(3116744359), UINT32_C(2665316337) },
{ UINT32_MAX, UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C( 659449342), UINT32_C(1300985870), UINT32_C(3552849472), UINT32_C(3797609570) },
{ UINT32_C(4036348424), UINT32_C(3868825563), UINT32_C(2174098740), UINT32_C(4164986346) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(3766468200), UINT32_C(1298610946), UINT32_C( 996834185), UINT32_C( 751627548) },
{ UINT32_C( 307810882), UINT32_C(1850885430), UINT32_C(3131865474), UINT32_C( 92029903) },
{ UINT32_MAX, UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comge_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comge_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comge_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 8211987837427308796), UINT64_C( 5480151877524490918) },
{ UINT64_C( 8211987837427308796), UINT64_C( 5480151877524490918) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(13777164219077025594), UINT64_C( 755302138987371961) },
{ UINT64_C( 81722270716082915), UINT64_C( 9945189316467286975) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C( 2315908445777131546), UINT64_C( 5918859128641900032) },
{ UINT64_C( 4959233173195746372), UINT64_C( 3285923985569812478) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C(15567995769879471623), UINT64_C( 2620873581216454271) },
{ UINT64_C( 9506557910353180488), UINT64_C( 9201997689620698505) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C( 3518706747851305003), UINT64_C(14345092700155837535) },
{ UINT64_C( 458634775754859030), UINT64_C(14284795380240678280) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8099097797183463086), UINT64_C( 9523822594807941320) },
{ UINT64_C( 1515945609713235416), UINT64_C( 5412243535409106980) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(16187658354348390584), UINT64_C(11785212616360215521) },
{ UINT64_C(17931385931382127027), UINT64_C( 6213328243168416900) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C(14375210412457215855), UINT64_C( 7791293546164876499) },
{ UINT64_C(17777258666399839697), UINT64_C( 3350089076668880082) },
{ UINT64_C( 0), UINT64_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comge_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comge_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 2), INT8_C( 82), -INT8_C( 67), INT8_C( 54), -INT8_C( 53), INT8_C( 122), -INT8_C( 40), INT8_C( 111),
-INT8_C( 59), -INT8_C( 28), -INT8_C( 47), INT8_C( 30), INT8_C( 38), -INT8_C( 76), -INT8_C( 51), INT8_C( 38) },
{ -INT8_C( 2), INT8_C( 82), -INT8_C( 67), INT8_C( 54), -INT8_C( 53), INT8_C( 122), -INT8_C( 40), INT8_C( 111),
-INT8_C( 59), -INT8_C( 28), -INT8_C( 47), INT8_C( 30), INT8_C( 38), -INT8_C( 76), -INT8_C( 51), INT8_C( 38) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 90), INT8_C( 113), -INT8_C( 57), -INT8_C( 27), INT8_C( 89), INT8_C( 9), -INT8_C( 123), INT8_C( 89),
INT8_C( 51), INT8_C( 21), -INT8_C( 53), -INT8_C( 121), -INT8_C( 20), INT8_C( 95), -INT8_C( 50), INT8_C( 29) },
{ -INT8_C( 117), -INT8_C( 95), -INT8_C( 21), INT8_C( 86), INT8_C( 110), -INT8_C( 112), -INT8_C( 103), INT8_C( 30),
-INT8_C( 32), INT8_C( 25), -INT8_C( 99), INT8_C( 119), -INT8_C( 18), -INT8_C( 21), INT8_C( 125), INT8_C( 27) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1),
-INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) } },
{ { INT8_C( 118), INT8_C( 53), INT8_C( 54), INT8_C( 98), INT8_MIN, -INT8_C( 79), INT8_C( 49), INT8_C( 103),
-INT8_C( 47), -INT8_C( 31), INT8_C( 116), INT8_C( 102), -INT8_C( 66), -INT8_C( 103), INT8_C( 22), INT8_C( 105) },
{ INT8_C( 63), -INT8_C( 67), -INT8_C( 11), INT8_C( 36), INT8_C( 68), INT8_C( 76), -INT8_C( 85), INT8_C( 29),
INT8_C( 76), -INT8_C( 99), -INT8_C( 67), INT8_C( 16), INT8_C( 51), -INT8_C( 23), INT8_C( 22), -INT8_C( 111) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -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( 0), INT8_C( 0), -INT8_C( 1) } },
{ { INT8_C( 75), INT8_C( 10), -INT8_C( 76), -INT8_C( 13), -INT8_C( 81), -INT8_C( 126), -INT8_C( 94), INT8_C( 105),
-INT8_C( 44), -INT8_C( 65), INT8_C( 38), INT8_C( 107), INT8_C( 97), -INT8_C( 98), INT8_C( 59), INT8_C( 91) },
{ INT8_C( 65), INT8_C( 45), INT8_C( 65), INT8_C( 105), -INT8_C( 10), -INT8_C( 75), -INT8_C( 12), -INT8_C( 76),
INT8_C( 48), -INT8_C( 8), -INT8_C( 101), -INT8_C( 79), -INT8_C( 98), -INT8_C( 73), -INT8_C( 127), -INT8_C( 47) },
{ -INT8_C( 1), INT8_C( 0), INT8_C( 0), 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( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 4), INT8_C( 119), -INT8_C( 87), INT8_C( 94), -INT8_C( 114), -INT8_C( 123), -INT8_C( 66), -INT8_C( 90),
INT8_C( 100), INT8_C( 56), INT8_C( 73), INT8_C( 92), INT8_C( 126), INT8_C( 118), INT8_C( 39), INT8_C( 59) },
{ -INT8_C( 70), INT8_C( 121), INT8_C( 57), -INT8_C( 20), INT8_C( 43), -INT8_C( 45), INT8_C( 93), INT8_C( 42),
-INT8_C( 76), -INT8_C( 80), -INT8_C( 99), INT8_C( 36), -INT8_C( 42), INT8_C( 92), -INT8_C( 89), INT8_C( 35) },
{ -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( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 57), INT8_C( 5), INT8_C( 125), INT8_C( 108), -INT8_C( 60), -INT8_C( 63), INT8_C( 110), INT8_C( 104),
-INT8_C( 89), -INT8_C( 45), INT8_C( 69), INT8_C( 2), -INT8_C( 68), INT8_C( 42), -INT8_C( 64), INT8_C( 81) },
{ -INT8_C( 47), INT8_C( 42), INT8_C( 68), INT8_C( 119), -INT8_C( 116), -INT8_C( 81), -INT8_C( 50), -INT8_C( 55),
INT8_C( 2), INT8_C( 79), INT8_C( 45), INT8_C( 48), -INT8_C( 124), -INT8_C( 32), INT8_C( 111), -INT8_C( 50) },
{ INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -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( 1), INT8_C( 0), -INT8_C( 1) } },
{ { -INT8_C( 68), INT8_C( 58), -INT8_C( 103), -INT8_C( 27), -INT8_C( 6), INT8_C( 62), -INT8_C( 101), -INT8_C( 11),
-INT8_C( 56), INT8_C( 24), -INT8_C( 126), INT8_C( 37), -INT8_C( 60), -INT8_C( 64), -INT8_C( 16), -INT8_C( 28) },
{ -INT8_C( 81), -INT8_C( 57), -INT8_C( 55), -INT8_C( 48), -INT8_C( 63), INT8_C( 80), INT8_C( 48), -INT8_C( 41),
INT8_C( 63), INT8_C( 93), -INT8_C( 78), -INT8_C( 100), INT8_C( 80), INT8_C( 76), -INT8_C( 64), INT8_C( 28) },
{ -INT8_C( 1), -INT8_C( 1), 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( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { INT8_C( 13), -INT8_C( 95), INT8_C( 99), -INT8_C( 111), -INT8_C( 41), INT8_C( 5), INT8_C( 43), -INT8_C( 105),
-INT8_C( 19), -INT8_C( 113), INT8_C( 105), -INT8_C( 115), INT8_C( 61), INT8_C( 67), -INT8_C( 99), INT8_C( 62) },
{ INT8_C( 123), -INT8_C( 40), INT8_C( 50), -INT8_C( 64), INT8_C( 113), -INT8_C( 65), INT8_C( 105), -INT8_C( 99),
-INT8_C( 106), INT8_C( 96), -INT8_C( 108), INT8_C( 49), -INT8_C( 31), -INT8_C( 89), -INT8_C( 124), INT8_C( 83) },
{ INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0),
-INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comgt_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 16417), INT16_C( 14404), INT16_C( 7428), -INT16_C( 27896), -INT16_C( 16065), INT16_C( 352), -INT16_C( 18224), -INT16_C( 23119) },
{ -INT16_C( 16417), INT16_C( 14404), INT16_C( 7428), -INT16_C( 27896), -INT16_C( 16065), INT16_C( 352), -INT16_C( 18224), -INT16_C( 23119) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 6562), INT16_C( 4070), INT16_C( 580), INT16_C( 25443), -INT16_C( 7635), -INT16_C( 18630), -INT16_C( 1568), -INT16_C( 17246) },
{ INT16_C( 7773), -INT16_C( 24155), -INT16_C( 29144), INT16_C( 13336), INT16_C( 13797), INT16_C( 19408), INT16_C( 10533), INT16_C( 25107) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 30848), -INT16_C( 31411), INT16_C( 9188), INT16_C( 28932), INT16_C( 27180), -INT16_C( 2546), INT16_C( 19188), -INT16_C( 24830) },
{ INT16_C( 17836), -INT16_C( 27156), INT16_C( 25068), -INT16_C( 16059), INT16_C( 29447), INT16_C( 12578), -INT16_C( 25117), -INT16_C( 16981) },
{ -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 5640), -INT16_C( 5425), INT16_C( 10742), INT16_C( 3638), -INT16_C( 32324), -INT16_C( 19081), -INT16_C( 23610), INT16_C( 17548) },
{ -INT16_C( 17161), -INT16_C( 9085), -INT16_C( 25096), -INT16_C( 32395), INT16_C( 1231), INT16_C( 31932), INT16_C( 7603), -INT16_C( 671) },
{ -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( 18462), INT16_C( 1492), INT16_C( 7461), -INT16_C( 31776), -INT16_C( 21243), -INT16_C( 16675), INT16_C( 3070), -INT16_C( 3544) },
{ INT16_C( 3172), INT16_C( 16080), INT16_C( 19187), -INT16_C( 17006), INT16_C( 28515), -INT16_C( 3064), -INT16_C( 20420), INT16_C( 27677) },
{ -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0) } },
{ { -INT16_C( 26644), -INT16_C( 24636), INT16_C( 1558), INT16_C( 6634), INT16_C( 31022), -INT16_C( 10328), -INT16_C( 29885), -INT16_C( 3138) },
{ -INT16_C( 17381), -INT16_C( 31939), INT16_C( 29061), -INT16_C( 16765), INT16_C( 15595), INT16_C( 24684), INT16_C( 24103), INT16_C( 20679) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 30057), -INT16_C( 32761), -INT16_C( 5004), INT16_C( 5435), INT16_C( 27231), -INT16_C( 14015), INT16_C( 10813), -INT16_C( 29386) },
{ INT16_C( 21573), INT16_C( 29232), INT16_C( 6487), -INT16_C( 14032), -INT16_C( 2928), -INT16_C( 30382), INT16_C( 12059), -INT16_C( 3513) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 21942), INT16_C( 28677), -INT16_C( 10011), -INT16_C( 15683), INT16_C( 2754), INT16_C( 23310), -INT16_C( 3947), INT16_C( 2424) },
{ INT16_C( 23562), -INT16_C( 11245), INT16_C( 18961), INT16_C( 10625), INT16_C( 7801), INT16_C( 14369), INT16_C( 11457), -INT16_C( 25979) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comgt_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 925334827), INT32_C( 1733808145), INT32_C( 1467539580), -INT32_C( 1351817741) },
{ INT32_C( 925334827), INT32_C( 1733808145), INT32_C( 1467539580), -INT32_C( 1351817741) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 1900895633), INT32_C( 610143323), INT32_C( 859914960), -INT32_C( 1872077631) },
{ -INT32_C( 1663857310), INT32_C( 1274142626), -INT32_C( 2081917768), -INT32_C( 956624130) },
{ -INT32_C( 1), INT32_C( 0), -INT32_C( 1), INT32_C( 0) } },
{ { INT32_C( 289857283), INT32_C( 78604507), INT32_C( 1109059770), INT32_C( 467454146) },
{ INT32_C( 1769103896), -INT32_C( 1217131971), -INT32_C( 1446752356), -INT32_C( 1744077217) },
{ INT32_C( 0), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 2087086215), INT32_C( 257713468), INT32_C( 789879137), -INT32_C( 2067499412) },
{ INT32_C( 1684898421), -INT32_C( 205104244), -INT32_C( 1888094128), INT32_C( 1803891134) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), INT32_C( 0) } },
{ { INT32_C( 2031452742), -INT32_C( 1907553244), -INT32_C( 1047012115), INT32_C( 336293992) },
{ INT32_C( 1445623712), INT32_C( 1204869431), -INT32_C( 26937347), -INT32_C( 2007878463) },
{ -INT32_C( 1), INT32_C( 0), INT32_C( 0), -INT32_C( 1) } },
{ { -INT32_C( 759450520), -INT32_C( 932486084), -INT32_C( 1089783162), INT32_C( 278380126) },
{ INT32_C( 101960130), -INT32_C( 75854618), -INT32_C( 1107765813), INT32_C( 928550419) },
{ INT32_C( 0), INT32_C( 0), -INT32_C( 1), INT32_C( 0) } },
{ { INT32_C( 1304462868), INT32_C( 127694123), -INT32_C( 220710318), -INT32_C( 1018009867) },
{ INT32_C( 1049624066), INT32_C( 1454210368), -INT32_C( 1768416799), -INT32_C( 1082046630) },
{ -INT32_C( 1), INT32_C( 0), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 1282637454), -INT32_C( 1849079911), INT32_C( 577135740), INT32_C( 1948480214) },
{ -INT32_C( 1006264183), -INT32_C( 1588612115), INT32_C( 1336822632), INT32_C( 1790208063) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), -INT32_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comgt_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 5702714704422032213), INT64_C( 7706197349837389866) },
{ -INT64_C( 5702714704422032213), INT64_C( 7706197349837389866) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 2686738672218224510), INT64_C( 9140610051560567943) },
{ -INT64_C( 6217130683109076761), -INT64_C( 1250078657332488315) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 2847418335753423114), INT64_C( 4960714446316608359) },
{ -INT64_C( 4086288290319453363), INT64_C( 5199751851530465460) },
{ -INT64_C( 1), INT64_C( 0) } },
{ { -INT64_C( 943709202321481643), INT64_C( 331162107166771247) },
{ INT64_C( 5870370027943010054), -INT64_C( 4584062603918486561) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { -INT64_C( 3649639699874643066), INT64_C( 433351727370470152) },
{ -INT64_C( 8202798520132215751), -INT64_C( 7045432456963077840) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 16632113310352442), -INT64_C( 7998338059497122534) },
{ -INT64_C( 4087067891782225905), INT64_C( 2996758406856088013) },
{ -INT64_C( 1), INT64_C( 0) } },
{ { -INT64_C( 3382370887748153796), -INT64_C( 1263429811204012660) },
{ INT64_C( 5024271936180938160), -INT64_C( 6169576172347208738) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { -INT64_C( 8421059571642366447), INT64_C( 7372456205302914183) },
{ INT64_C( 5577648488510702403), INT64_C( 7602790810320267404) },
{ INT64_C( 0), INT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comgt_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(108), UINT8_C(171), UINT8_C(201), UINT8_C(204), UINT8_C(217), UINT8_C(227), UINT8_C(229), UINT8_C(117),
UINT8_C( 50), UINT8_C( 32), UINT8_C(146), UINT8_C(119), UINT8_C( 76), UINT8_C(180), UINT8_C(115), UINT8_C( 63) },
{ UINT8_C(108), UINT8_C(171), UINT8_C(201), UINT8_C(204), UINT8_C(217), UINT8_C(227), UINT8_C(229), UINT8_C(117),
UINT8_C( 50), UINT8_C( 32), UINT8_C(146), UINT8_C(119), UINT8_C( 76), UINT8_C(180), UINT8_C(115), UINT8_C( 63) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(241), UINT8_C( 16), UINT8_C(192), UINT8_C(119), UINT8_C( 50), UINT8_C(207), UINT8_C( 57), UINT8_C( 42),
UINT8_C(254), UINT8_C(247), UINT8_C( 94), UINT8_C( 41), UINT8_C(244), UINT8_C(123), UINT8_C(225), UINT8_C(174) },
{ UINT8_C(118), UINT8_C( 4), UINT8_C( 92), UINT8_C( 64), UINT8_MAX, UINT8_C(240), UINT8_C( 64), UINT8_C(214),
UINT8_C(182), UINT8_C(155), UINT8_C( 13), UINT8_C( 63), UINT8_C( 67), UINT8_C(222), UINT8_C(201), UINT8_C(193) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C(225), UINT8_C(214), UINT8_C(171), UINT8_C( 1), UINT8_C(180), UINT8_C(231), UINT8_C( 23), UINT8_C( 34),
UINT8_C( 94), UINT8_C( 0), UINT8_C(207), UINT8_C( 49), UINT8_C(205), UINT8_C( 32), UINT8_C(103), UINT8_C(193) },
{ UINT8_C( 86), UINT8_C( 25), UINT8_C(249), UINT8_C(210), UINT8_C( 8), UINT8_C(148), UINT8_C( 27), UINT8_C(248),
UINT8_C( 58), UINT8_C( 85), UINT8_C( 14), UINT8_C(185), UINT8_C(103), UINT8_C(192), UINT8_C( 56), UINT8_C( 54) },
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0),
UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 60), UINT8_C(156), UINT8_C(212), UINT8_C( 14), UINT8_C(238), UINT8_C( 24), UINT8_C(233), UINT8_C(127),
UINT8_C(209), UINT8_C( 11), UINT8_C(120), UINT8_C(206), UINT8_C( 39), UINT8_C(128), UINT8_C(250), UINT8_C(233) },
{ UINT8_C( 53), UINT8_C(114), UINT8_C( 10), UINT8_C( 76), UINT8_C(157), UINT8_C(212), UINT8_C( 94), UINT8_C( 33),
UINT8_C(231), UINT8_C(213), UINT8_C(251), UINT8_C(171), UINT8_C( 97), UINT8_C( 97), UINT8_C(169), UINT8_C(228) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX,
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 41), UINT8_C(235), UINT8_C(165), UINT8_C(101), UINT8_C(136), UINT8_C(106), UINT8_C(151), UINT8_C(135),
UINT8_C(129), UINT8_C(161), UINT8_C(195), UINT8_C(200), UINT8_C(170), UINT8_C(164), UINT8_C(131), UINT8_C(112) },
{ UINT8_C( 59), UINT8_C(152), UINT8_C(245), UINT8_C(116), UINT8_C(101), UINT8_C(186), UINT8_C(241), UINT8_C(154),
UINT8_C(229), UINT8_C(163), UINT8_C( 62), UINT8_C(222), UINT8_C(216), UINT8_C(202), UINT8_C( 5), UINT8_C( 20) },
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(209), UINT8_C( 74), UINT8_C(133), UINT8_C(208), UINT8_C( 41), UINT8_C(229), UINT8_C( 9), UINT8_C(131),
UINT8_C(150), UINT8_C( 73), UINT8_C( 23), UINT8_C(230), UINT8_MAX, UINT8_C(147), UINT8_C(235), UINT8_C(156) },
{ UINT8_C(143), UINT8_C( 18), UINT8_C( 36), UINT8_C( 19), UINT8_C( 9), UINT8_C( 77), UINT8_C(188), UINT8_C(171),
UINT8_C( 91), UINT8_C( 71), UINT8_C( 61), UINT8_C( 26), UINT8_C(117), UINT8_C( 1), UINT8_C( 50), UINT8_C( 15) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 91), UINT8_C( 65), UINT8_C(220), UINT8_C( 21), UINT8_C(121), UINT8_C(146), UINT8_C( 39), UINT8_C(186),
UINT8_C( 56), UINT8_C(140), UINT8_C(220), UINT8_C(241), UINT8_C(206), UINT8_C( 85), UINT8_C( 24), UINT8_C(182) },
{ UINT8_C( 90), UINT8_C(104), UINT8_C(253), UINT8_C(240), UINT8_C( 48), UINT8_C(149), UINT8_C(167), UINT8_C(155),
UINT8_C(113), UINT8_C( 73), UINT8_C( 98), UINT8_C( 38), UINT8_C(224), UINT8_C( 16), UINT8_C( 26), UINT8_C( 26) },
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX,
UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX } },
{ { UINT8_C(240), UINT8_C( 88), UINT8_C( 19), UINT8_C(253), UINT8_C( 34), UINT8_C(120), UINT8_C(218), UINT8_C(118),
UINT8_C(141), UINT8_C(241), UINT8_C(123), UINT8_C(178), UINT8_C(190), UINT8_C(243), UINT8_C(244), UINT8_C( 5) },
{ UINT8_C(195), UINT8_C( 35), UINT8_C(234), UINT8_C(213), UINT8_C(131), UINT8_C(155), UINT8_C(155), UINT8_C(180),
UINT8_C( 81), UINT8_C( 50), UINT8_C( 20), UINT8_C(204), UINT8_C(192), UINT8_C(254), UINT8_C(163), UINT8_C(128) },
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comgt_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C( 6328), UINT16_C(20624), UINT16_C(40905), UINT16_C(64776), UINT16_C( 192), UINT16_C(61018), UINT16_C(29816), UINT16_C(54118) },
{ UINT16_C( 6328), UINT16_C(20624), UINT16_C(40905), UINT16_C(64776), UINT16_C( 192), UINT16_C(61018), UINT16_C(29816), UINT16_C(54118) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(51955), UINT16_C(34897), UINT16_C(26281), UINT16_C(15486), UINT16_C(35360), UINT16_C(53946), UINT16_C(54461), UINT16_C(34743) },
{ UINT16_C( 2266), UINT16_C(54972), UINT16_C( 4121), UINT16_C(39322), UINT16_C(16887), UINT16_C(28898), UINT16_C(57508), UINT16_C(26197) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
{ { UINT16_C(58642), UINT16_C(53916), UINT16_C(65099), UINT16_C(31802), UINT16_C(55049), UINT16_C( 446), UINT16_C(39296), UINT16_C(31037) },
{ UINT16_C(45439), UINT16_C(22271), UINT16_C(53943), UINT16_C(36729), UINT16_C(15706), UINT16_C(65403), UINT16_C(16617), UINT16_C( 2219) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(64583), UINT16_C(31538), UINT16_C(27665), UINT16_C(48309), UINT16_C(41778), UINT16_C( 8583), UINT16_C(21937), UINT16_C(39965) },
{ UINT16_C(39374), UINT16_C(39618), UINT16_C(60750), UINT16_C(10891), UINT16_C(31507), UINT16_C(25230), UINT16_C(39919), UINT16_C(65103) },
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(39098), UINT16_C(19323), UINT16_C(47010), UINT16_C(17625), UINT16_C(30147), UINT16_C(64125), UINT16_C( 4600), UINT16_C(14655) },
{ UINT16_C(19184), UINT16_C(26731), UINT16_C(27268), UINT16_C(45498), UINT16_C(33607), UINT16_C(25217), UINT16_C(63839), UINT16_C(37673) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(16532), UINT16_C( 2783), UINT16_C(59303), UINT16_C(23436), UINT16_C(55013), UINT16_C(21256), UINT16_C(54523), UINT16_C(38795) },
{ UINT16_C(19468), UINT16_C(35172), UINT16_C(20481), UINT16_C(27629), UINT16_C(56865), UINT16_C(51134), UINT16_C(25313), UINT16_C( 3617) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(32253), UINT16_C(32710), UINT16_C( 1479), UINT16_C(19128), UINT16_C(19903), UINT16_C(63120), UINT16_C(42597), UINT16_C( 233) },
{ UINT16_C( 9547), UINT16_C(50451), UINT16_C(42862), UINT16_C(41228), UINT16_C( 5062), UINT16_C(22955), UINT16_C(57116), UINT16_C(46623) },
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(54812), UINT16_C(29592), UINT16_C( 6315), UINT16_C(23108), UINT16_C(25211), UINT16_C(43389), UINT16_C(36828), UINT16_C(47681) },
{ UINT16_C(24533), UINT16_C(58338), UINT16_C(30835), UINT16_C(40190), UINT16_C(43617), UINT16_C(57266), UINT16_C(30649), UINT16_C(54539) },
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comgt_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(2931675930), UINT32_C(3491244283), UINT32_C( 892837182), UINT32_C( 242980872) },
{ UINT32_C(2931675930), UINT32_C(3491244283), UINT32_C( 892837182), UINT32_C( 242980872) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2906161617), UINT32_C(2712521399), UINT32_C( 591014936), UINT32_C(2983015263) },
{ UINT32_C(4171168798), UINT32_C(4145823326), UINT32_C(1646692147), UINT32_C(1149225107) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C(3917223015), UINT32_C(4211123683), UINT32_C(3953795091), UINT32_C(2454526391) },
{ UINT32_C( 430037585), UINT32_C( 372793468), UINT32_C(4155746175), UINT32_C(2754947106) },
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(1612226497), UINT32_C(4041150878), UINT32_C( 7081595), UINT32_C(3262395497) },
{ UINT32_C(3627021531), UINT32_C(1951701502), UINT32_C(3192161613), UINT32_C(1988476512) },
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C(3665013252), UINT32_C(3392280465), UINT32_C( 719814264), UINT32_C(2284357916) },
{ UINT32_C(4273066723), UINT32_C(1515777676), UINT32_C(2101586627), UINT32_C( 22582514) },
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C( 536198747), UINT32_C(3487678052), UINT32_C( 813955377), UINT32_C( 726803064) },
{ UINT32_C(1401814417), UINT32_C( 271346125), UINT32_C(4246117641), UINT32_C(2392109699) },
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(4127613676), UINT32_C(1221922750), UINT32_C(3701999311), UINT32_C(4107994663) },
{ UINT32_C(2670590990), UINT32_C(3736605034), UINT32_C( 103278152), UINT32_C(1696800441) },
{ UINT32_MAX, UINT32_C( 0), UINT32_MAX, UINT32_MAX } },
{ { UINT32_C( 672014047), UINT32_C(2096369735), UINT32_C(4106104441), UINT32_C( 732511694) },
{ UINT32_C(2868336514), UINT32_C( 216395274), UINT32_C(1625034408), UINT32_C(3471565372) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comgt_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comgt_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C(13053625969493244509), UINT64_C( 1776335905635563608) },
{ UINT64_C(13053625969493244509), UINT64_C( 1776335905635563608) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(16256034595954595605), UINT64_C( 1285222121653378128) },
{ UINT64_C( 4131850939565080462), UINT64_C( 196125019575610516) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(12014875886658405357), UINT64_C( 8488037129192413289) },
{ UINT64_C( 5938715815015691417), UINT64_C( 3731556851665834580) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(11833795783221175093), UINT64_C( 4877831776391334682) },
{ UINT64_C( 4992985007803179430), UINT64_C(17420199667699905472) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C( 2375114234258259987), UINT64_C(14155653048210685068) },
{ UINT64_C( 6763726840653205471), UINT64_C( 9621179381699646978) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C( 7339593446906798511), UINT64_C( 4464734439121646566) },
{ UINT64_C(16216730157518636394), UINT64_C( 3963201710570668863) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C(13461328380725022258), UINT64_C(17952021491942488145) },
{ UINT64_C( 1783462140442348399), UINT64_C( 5627667542317712290) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 7402917169343205316), UINT64_C( 4603078424171451637) },
{ UINT64_C( 5467596465290160663), UINT64_C( 1493066304789536080) },
{ UINT64_MAX, UINT64_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comgt_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comgt_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 116), -INT8_C( 19), INT8_C( 26), -INT8_C( 107), INT8_C( 78), INT8_C( 25), -INT8_C( 119), -INT8_C( 78),
-INT8_C( 7), INT8_C( 78), INT8_MAX, INT8_C( 74), INT8_C( 0), INT8_C( 9), INT8_C( 26), INT8_C( 86) },
{ -INT8_C( 116), -INT8_C( 19), INT8_C( 26), -INT8_C( 107), INT8_C( 78), INT8_C( 25), -INT8_C( 119), -INT8_C( 78),
-INT8_C( 7), INT8_C( 78), INT8_MAX, INT8_C( 74), INT8_C( 0), INT8_C( 9), INT8_C( 26), INT8_C( 86) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 119), -INT8_C( 87), -INT8_C( 52), -INT8_C( 52), -INT8_C( 62), INT8_C( 115), INT8_C( 84), -INT8_C( 61),
INT8_C( 116), -INT8_C( 39), -INT8_C( 19), -INT8_C( 41), -INT8_C( 38), -INT8_C( 4), -INT8_C( 59), -INT8_C( 49) },
{ -INT8_C( 77), INT8_C( 111), -INT8_C( 80), INT8_C( 125), -INT8_C( 106), INT8_C( 62), INT8_C( 30), -INT8_C( 26),
-INT8_C( 122), INT8_C( 47), INT8_C( 75), -INT8_C( 93), -INT8_C( 58), INT8_C( 71), -INT8_C( 75), -INT8_C( 121) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1),
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( 18), -INT8_C( 112), -INT8_C( 45), -INT8_C( 126), INT8_C( 63), INT8_C( 26), INT8_C( 4), -INT8_C( 59),
INT8_C( 52), INT8_C( 64), -INT8_C( 58), INT8_C( 39), INT8_C( 89), INT8_C( 44), INT8_C( 40), -INT8_C( 56) },
{ INT8_C( 96), -INT8_C( 98), -INT8_C( 126), -INT8_C( 12), INT8_C( 114), -INT8_C( 24), INT8_C( 99), INT8_C( 74),
-INT8_C( 61), INT8_C( 62), -INT8_C( 53), INT8_C( 29), INT8_C( 105), INT8_C( 44), -INT8_C( 102), INT8_C( 26) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1),
INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) } },
{ { INT8_C( 110), INT8_C( 104), INT8_C( 73), INT8_C( 43), INT8_C( 36), -INT8_C( 54), -INT8_C( 40), -INT8_C( 100),
-INT8_C( 72), -INT8_C( 103), INT8_C( 7), INT8_C( 125), INT8_C( 10), INT8_C( 8), -INT8_C( 55), INT8_C( 71) },
{ -INT8_C( 68), INT8_C( 0), -INT8_C( 10), -INT8_C( 62), -INT8_C( 118), INT8_C( 32), INT8_C( 64), INT8_C( 37),
-INT8_C( 39), INT8_C( 3), INT8_C( 104), INT8_MAX, -INT8_C( 110), -INT8_C( 63), -INT8_C( 78), INT8_C( 87) },
{ 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( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), -INT8_C( 1) } },
{ { INT8_C( 48), -INT8_C( 72), -INT8_C( 106), -INT8_C( 113), INT8_C( 24), -INT8_C( 116), -INT8_C( 72), -INT8_C( 113),
INT8_C( 41), INT8_C( 108), INT8_C( 26), -INT8_C( 97), -INT8_C( 107), -INT8_C( 105), -INT8_C( 112), -INT8_C( 109) },
{ -INT8_C( 17), INT8_C( 31), INT8_C( 117), -INT8_C( 82), -INT8_C( 123), -INT8_C( 19), -INT8_C( 99), -INT8_C( 63),
-INT8_C( 17), INT8_C( 6), -INT8_C( 118), -INT8_C( 109), -INT8_C( 24), INT8_C( 13), -INT8_C( 29), -INT8_C( 123) },
{ INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -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( 0) } },
{ { INT8_C( 93), INT8_C( 8), INT8_C( 33), INT8_C( 118), -INT8_C( 60), INT8_C( 103), -INT8_C( 116), -INT8_C( 27),
-INT8_C( 81), INT8_C( 66), INT8_C( 102), INT8_C( 85), -INT8_C( 95), -INT8_C( 30), INT8_C( 102), -INT8_C( 10) },
{ INT8_C( 32), -INT8_C( 125), INT8_C( 104), -INT8_C( 127), INT8_C( 11), INT8_C( 88), INT8_C( 98), INT8_C( 100),
INT8_C( 46), -INT8_C( 48), -INT8_C( 102), INT8_C( 31), INT8_C( 20), INT8_C( 24), INT8_C( 22), -INT8_C( 18) },
{ INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -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( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 28), -INT8_C( 31), INT8_C( 84), -INT8_C( 88), -INT8_C( 49), INT8_C( 99), INT8_C( 60), -INT8_C( 25),
INT8_C( 113), -INT8_C( 95), INT8_C( 83), INT8_C( 105), -INT8_C( 42), -INT8_C( 17), INT8_C( 49), -INT8_C( 74) },
{ INT8_C( 120), -INT8_C( 78), INT8_C( 53), INT8_C( 3), -INT8_C( 58), INT8_C( 104), INT8_C( 119), INT8_C( 87),
-INT8_C( 66), -INT8_C( 24), -INT8_C( 2), -INT8_C( 20), -INT8_C( 67), -INT8_C( 22), INT8_C( 52), -INT8_C( 40) },
{ -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -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( 106), -INT8_C( 55), -INT8_C( 106), -INT8_C( 20), -INT8_C( 30), -INT8_C( 120), -INT8_C( 80), -INT8_C( 35),
-INT8_C( 104), INT8_C( 20), INT8_C( 73), -INT8_C( 95), -INT8_C( 34), -INT8_C( 56), -INT8_C( 37), INT8_C( 28) },
{ INT8_C( 30), INT8_C( 54), INT8_C( 70), -INT8_C( 4), INT8_C( 91), INT8_C( 37), -INT8_C( 60), -INT8_C( 30),
-INT8_C( 58), -INT8_C( 42), INT8_C( 32), -INT8_C( 62), -INT8_C( 116), -INT8_C( 116), INT8_C( 35), -INT8_C( 116) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comle_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comle_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { INT16_C( 19187), INT16_C( 3152), -INT16_C( 8283), INT16_C( 4049), INT16_C( 8267), -INT16_C( 14416), INT16_C( 30046), INT16_C( 28746) },
{ INT16_C( 19187), INT16_C( 3152), -INT16_C( 8283), INT16_C( 4049), INT16_C( 8267), -INT16_C( 14416), INT16_C( 30046), INT16_C( 28746) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 26822), INT16_C( 13313), -INT16_C( 26763), INT16_C( 19506), INT16_C( 9070), INT16_C( 26983), INT16_C( 1321), INT16_C( 21197) },
{ -INT16_C( 5030), -INT16_C( 12568), INT16_C( 28607), -INT16_C( 15227), INT16_C( 20403), -INT16_C( 24080), -INT16_C( 1023), -INT16_C( 1432) },
{ -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 23542), INT16_C( 29648), -INT16_C( 14406), -INT16_C( 8281), INT16_C( 22240), -INT16_C( 22470), INT16_C( 23867), INT16_C( 28952) },
{ INT16_C( 14067), -INT16_C( 1081), INT16_C( 16601), INT16_C( 17845), INT16_C( 10488), -INT16_C( 1935), INT16_C( 26476), INT16_C( 283) },
{ INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 3192), -INT16_C( 32742), -INT16_C( 17198), -INT16_C( 7924), -INT16_C( 2239), INT16_C( 18435), -INT16_C( 25494), INT16_C( 13294) },
{ -INT16_C( 20249), INT16_C( 23381), INT16_C( 23450), -INT16_C( 9398), INT16_C( 13121), -INT16_C( 27748), -INT16_C( 16822), -INT16_C( 12467) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 12776), INT16_C( 9286), INT16_C( 32358), -INT16_C( 25782), -INT16_C( 28996), INT16_C( 4649), -INT16_C( 13472), -INT16_C( 8650) },
{ -INT16_C( 7586), -INT16_C( 18950), -INT16_C( 14421), -INT16_C( 13270), -INT16_C( 1610), INT16_C( 15575), INT16_C( 1857), -INT16_C( 21787) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 21359), INT16_C( 10174), INT16_C( 5662), INT16_C( 21831), -INT16_C( 23434), -INT16_C( 13548), -INT16_C( 3390), -INT16_C( 17448) },
{ INT16_C( 21887), -INT16_C( 11745), -INT16_C( 29517), INT16_C( 24639), INT16_C( 385), -INT16_C( 18037), INT16_C( 19705), -INT16_C( 9269) },
{ -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 1739), INT16_C( 20969), -INT16_C( 29791), INT16_C( 22509), -INT16_C( 16230), INT16_C( 15915), INT16_C( 5947), INT16_C( 4795) },
{ -INT16_C( 28557), INT16_C( 31530), -INT16_C( 19621), -INT16_C( 7825), -INT16_C( 11321), -INT16_C( 11487), -INT16_C( 27620), -INT16_C( 21785) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 21663), INT16_C( 26927), -INT16_C( 6760), -INT16_C( 6109), INT16_C( 27470), INT16_C( 13016), INT16_C( 17521), INT16_C( 11209) },
{ INT16_C( 7010), INT16_C( 30341), INT16_C( 17227), -INT16_C( 27228), -INT16_C( 1869), INT16_C( 21247), -INT16_C( 6065), INT16_C( 24097) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comle_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comle_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 972616219), INT32_C( 1372597674), INT32_C( 1854090426), INT32_C( 1307148300) },
{ INT32_C( 972616219), INT32_C( 1372597674), INT32_C( 1854090426), INT32_C( 1307148300) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 1953071245), -INT32_C( 960150486), -INT32_C( 24119446), INT32_C( 1096896316) },
{ -INT32_C( 2018749299), -INT32_C( 606180736), -INT32_C( 1148024056), -INT32_C( 1039936331) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 2067315762), -INT32_C( 1162166367), -INT32_C( 1623697385), -INT32_C( 1718627957) },
{ INT32_C( 481516508), -INT32_C( 885742399), -INT32_C( 512880547), -INT32_C( 805288428) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 679473052), -INT32_C( 1184122281), -INT32_C( 60709664), -INT32_C( 1349290268) },
{ -INT32_C( 1065971917), INT32_C( 1824187158), -INT32_C( 1468054300), -INT32_C( 1060707888) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), -INT32_C( 1) } },
{ { INT32_C( 1042615301), INT32_C( 230703349), -INT32_C( 562797843), -INT32_C( 883603475) },
{ INT32_C( 979072952), INT32_C( 89665575), -INT32_C( 668094782), -INT32_C( 633427311) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), -INT32_C( 1) } },
{ { -INT32_C( 1893523152), -INT32_C( 39758302), INT32_C( 232266343), INT32_C( 901598033) },
{ INT32_C( 1422629779), -INT32_C( 571043173), INT32_C( 954324770), INT32_C( 1699785473) },
{ -INT32_C( 1), INT32_C( 0), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 471812538), -INT32_C( 789182841), INT32_C( 1375032694), INT32_C( 884247222) },
{ -INT32_C( 735083539), INT32_C( 1031541275), -INT32_C( 1862187734), -INT32_C( 1410995258) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 29643630), -INT32_C( 811116597), INT32_C( 1915984193), INT32_C( 287313349) },
{ -INT32_C( 2081572626), INT32_C( 1842526030), -INT32_C( 1409842686), -INT32_C( 219975032) },
{ INT32_C( 0), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comle_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comle_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { INT64_C( 4799802114370404817), INT64_C( 1579597047222923761) },
{ INT64_C( 4799802114370404817), INT64_C( 1579597047222923761) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 5340836100108729923), -INT64_C( 8992481259499743533) },
{ INT64_C( 8195985707901241238), -INT64_C( 8792156227641384275) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 6741765975996835459), -INT64_C( 6431571666177783867) },
{ -INT64_C( 6632849631960453402), -INT64_C( 6036378782141253986) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { -INT64_C( 5997152387731853209), -INT64_C( 6743291274089635841) },
{ INT64_C( 2388185130225810921), -INT64_C( 3346638795333847828) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 1482705454389385582), -INT64_C( 4530065313621924438) },
{ INT64_C( 3763171127669193926), INT64_C( 4314911291741316286) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 7163598407174705195), INT64_C( 5317164735680373485) },
{ INT64_C( 2457621231182050214), INT64_C( 3682365343409229628) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 6460805075322074715), -INT64_C( 8985463405146890767) },
{ INT64_C( 3724710257396886448), INT64_C( 81519815510080656) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { INT64_C( 1733865481417793866), -INT64_C( 5218947715972768035) },
{ -INT64_C( 5628849588688246003), -INT64_C( 1306506982751341601) },
{ INT64_C( 0), -INT64_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comle_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comle_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C( 31), UINT8_C(216), UINT8_C(111), UINT8_C( 81), UINT8_C(232), UINT8_C(220), UINT8_C(134), UINT8_C(231),
UINT8_C(218), UINT8_C( 46), UINT8_C( 89), UINT8_C( 89), UINT8_C( 3), UINT8_C(116), UINT8_C(129), UINT8_C( 45) },
{ UINT8_C( 31), UINT8_C(216), UINT8_C(111), UINT8_C( 81), UINT8_C(232), UINT8_C(220), UINT8_C(134), UINT8_C(231),
UINT8_C(218), UINT8_C( 46), UINT8_C( 89), UINT8_C( 89), UINT8_C( 3), UINT8_C(116), UINT8_C(129), UINT8_C( 45) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(228), UINT8_C(251), UINT8_C(173), UINT8_C(164), UINT8_C(200), UINT8_C(180), UINT8_C(152), UINT8_C(226),
UINT8_C( 84), UINT8_C(125), UINT8_C( 56), UINT8_C( 80), UINT8_C( 94), UINT8_C(162), UINT8_C( 57), UINT8_C( 63) },
{ UINT8_C( 3), UINT8_C(164), UINT8_C(169), UINT8_C(206), UINT8_C(243), UINT8_C( 57), UINT8_C(245), UINT8_C( 13),
UINT8_C( 16), UINT8_C(147), UINT8_C( 20), UINT8_C( 98), UINT8_C( 56), UINT8_C(229), UINT8_C( 2), UINT8_C( 44) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 94), UINT8_C( 36), UINT8_C(112), UINT8_C(167), UINT8_C(224), UINT8_C( 11), UINT8_C(186), UINT8_C( 16),
UINT8_C( 20), UINT8_C( 97), UINT8_C( 25), UINT8_C( 9), UINT8_C( 36), UINT8_C(126), UINT8_C( 26), UINT8_C( 62) },
{ UINT8_C( 29), UINT8_C( 12), UINT8_C( 78), UINT8_C( 73), UINT8_C( 66), UINT8_C( 11), UINT8_C( 67), UINT8_C(211),
UINT8_C(166), UINT8_C( 23), UINT8_C(180), UINT8_C(252), UINT8_C(250), UINT8_C(238), UINT8_C(253), UINT8_C(253) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX,
UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(163), UINT8_C( 45), UINT8_C(209), UINT8_C( 12), UINT8_C( 16), UINT8_C( 90), UINT8_C( 47), UINT8_C(129),
UINT8_C( 74), UINT8_C( 39), UINT8_C(146), UINT8_C( 54), UINT8_C(204), UINT8_C(245), UINT8_C(105), UINT8_C( 51) },
{ UINT8_C(150), UINT8_C(152), UINT8_C(198), UINT8_C(139), UINT8_C(125), UINT8_C( 90), UINT8_C( 90), UINT8_C(129),
UINT8_C(197), UINT8_C( 66), UINT8_C(161), UINT8_C(239), UINT8_C(241), UINT8_C(150), UINT8_C( 90), UINT8_C(233) },
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX } },
{ { UINT8_C(218), UINT8_C(158), UINT8_C( 58), UINT8_C(157), UINT8_MAX, UINT8_C(171), UINT8_C(225), UINT8_C(125),
UINT8_C( 28), UINT8_C( 88), UINT8_C( 13), UINT8_C(161), UINT8_C(254), UINT8_C( 16), UINT8_C( 14), UINT8_C(102) },
{ UINT8_C(149), UINT8_C(208), UINT8_C(122), UINT8_C( 92), UINT8_C( 75), UINT8_C( 46), UINT8_C( 33), UINT8_C( 95),
UINT8_C(148), UINT8_C(155), UINT8_C( 67), UINT8_C( 3), UINT8_C(198), UINT8_C(229), UINT8_C( 1), UINT8_C( 54) },
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 44), UINT8_C( 0), UINT8_C( 18), UINT8_C( 32), UINT8_C( 85), UINT8_C( 5), UINT8_C(183), UINT8_C( 78),
UINT8_C(178), UINT8_C(123), UINT8_C(241), UINT8_C( 16), UINT8_C( 97), UINT8_C(214), UINT8_C(241), UINT8_C( 31) },
{ UINT8_C( 67), UINT8_C( 61), UINT8_C(208), UINT8_C(131), UINT8_C( 84), UINT8_C(144), UINT8_C(128), UINT8_C(180),
UINT8_C( 60), UINT8_C(170), UINT8_C( 3), UINT8_C( 0), UINT8_C( 33), UINT8_C(227), UINT8_C(218), UINT8_C( 44) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX,
UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX } },
{ { UINT8_C(192), UINT8_C(217), UINT8_C(193), UINT8_C( 94), UINT8_C(188), UINT8_C(113), UINT8_C(153), UINT8_C( 59),
UINT8_C( 53), UINT8_C( 24), UINT8_C(166), UINT8_C( 76), UINT8_C(157), UINT8_C( 79), UINT8_C(250), UINT8_C(166) },
{ UINT8_C(199), UINT8_C(102), UINT8_C( 49), UINT8_C(202), UINT8_C( 65), UINT8_C(135), UINT8_C( 95), UINT8_C(202),
UINT8_C(228), UINT8_C(247), UINT8_C( 71), UINT8_C(173), UINT8_C(169), UINT8_C(153), UINT8_C(206), UINT8_C( 21) },
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(191), UINT8_C(180), UINT8_C(175), UINT8_C( 31), UINT8_C(218), UINT8_C(245), UINT8_C(111), UINT8_C(139),
UINT8_C(205), UINT8_C(184), UINT8_C(148), UINT8_C( 29), UINT8_C( 91), UINT8_C(131), UINT8_C( 18), UINT8_C( 66) },
{ UINT8_C( 74), UINT8_C(211), UINT8_C( 6), UINT8_C(247), UINT8_C(186), UINT8_C( 28), UINT8_C(166), UINT8_C(231),
UINT8_C(181), UINT8_C( 11), UINT8_C(120), UINT8_C(211), UINT8_C( 7), UINT8_C( 14), UINT8_C(195), UINT8_C( 55) },
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX,
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comle_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comle_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C( 5712), UINT16_C(11076), UINT16_C(40023), UINT16_C(34593), UINT16_C(58017), UINT16_C(18979), UINT16_C(31555), UINT16_C(15647) },
{ UINT16_C( 5712), UINT16_C(11076), UINT16_C(40023), UINT16_C(34593), UINT16_C(58017), UINT16_C(18979), UINT16_C(31555), UINT16_C(15647) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C( 3572), UINT16_C(54197), UINT16_C(22118), UINT16_C(21565), UINT16_C(28119), UINT16_C(15103), UINT16_C(19171), UINT16_C(56482) },
{ UINT16_C(35228), UINT16_C(18920), UINT16_C(27612), UINT16_C(30616), UINT16_C( 7898), UINT16_C(40379), UINT16_C(16124), UINT16_C(56586) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
{ { UINT16_C(39916), UINT16_C( 9896), UINT16_C(15854), UINT16_C(22797), UINT16_C(42353), UINT16_C(43586), UINT16_C(22243), UINT16_C(19028) },
{ UINT16_C(38090), UINT16_C(17155), UINT16_C(27665), UINT16_C(41914), UINT16_C(62623), UINT16_C(56516), UINT16_C(54319), UINT16_C(27580) },
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C( 1371), UINT16_C(47173), UINT16_C(55801), UINT16_C(15868), UINT16_C(15531), UINT16_C(60331), UINT16_C(14770), UINT16_C(51648) },
{ UINT16_C(49155), UINT16_C(57341), UINT16_C(42653), UINT16_C(21104), UINT16_C(60697), UINT16_C(53414), UINT16_C(18051), UINT16_C(11804) },
{ UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
{ { UINT16_C(54376), UINT16_C(20726), UINT16_C(13104), UINT16_C(19187), UINT16_C(47534), UINT16_C(50337), UINT16_C(64502), UINT16_C(41933) },
{ UINT16_C(37743), UINT16_C(58942), UINT16_C( 8489), UINT16_C(52643), UINT16_C(36976), UINT16_C(16841), UINT16_C(39841), UINT16_C(28689) },
{ UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(36668), UINT16_C(47138), UINT16_C(21051), UINT16_C(50907), UINT16_C(42146), UINT16_C(65419), UINT16_C(42328), UINT16_C( 7781) },
{ UINT16_C(38709), UINT16_C( 7982), UINT16_C(58972), UINT16_C(23865), UINT16_C(26059), UINT16_C(63381), UINT16_C(56112), UINT16_C(30597) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(48894), UINT16_C(46640), UINT16_C(16065), UINT16_C(64154), UINT16_C(34479), UINT16_C(25299), UINT16_C(15999), UINT16_C(33903) },
{ UINT16_C(21630), UINT16_C(21557), UINT16_C(64735), UINT16_C(18460), UINT16_C(62802), UINT16_C(47475), UINT16_C( 3801), UINT16_C(36191) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
{ { UINT16_C(60119), UINT16_C( 5002), UINT16_C( 106), UINT16_C(11802), UINT16_C(58875), UINT16_C(46816), UINT16_C(52756), UINT16_C( 7122) },
{ UINT16_C(20849), UINT16_C(19388), UINT16_C(27481), UINT16_C(54834), UINT16_C(50991), UINT16_C(20681), UINT16_C(15684), UINT16_C(63623) },
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comle_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comle_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(2526517999), UINT32_C(2856427488), UINT32_C(3256503473), UINT32_C( 746086078) },
{ UINT32_C(2526517999), UINT32_C(2856427488), UINT32_C(3256503473), UINT32_C( 746086078) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(3442021943), UINT32_C(1365589107), UINT32_C(2231395463), UINT32_C( 14970904) },
{ UINT32_C( 163534445), UINT32_C(3053003720), UINT32_C(1357463799), UINT32_C(4266193958) },
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C(2732993527), UINT32_C(4288378581), UINT32_C( 511791749), UINT32_C(4016090621) },
{ UINT32_C( 845850234), UINT32_C(2552862157), UINT32_C( 649415669), UINT32_C(3677002739) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(2455312858), UINT32_C( 717103398), UINT32_C(3820165966), UINT32_C( 199425693) },
{ UINT32_C(3674215229), UINT32_C(2629434517), UINT32_C( 233239765), UINT32_C( 151410894) },
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(1709991688), UINT32_C( 414533134), UINT32_C(2667398669), UINT32_C(2656266909) },
{ UINT32_C(3404276959), UINT32_C( 110125256), UINT32_C(3454321596), UINT32_C(3519296863) },
{ UINT32_MAX, UINT32_C( 0), UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(3792084392), UINT32_C( 292088631), UINT32_C( 365518056), UINT32_C(4003068328) },
{ UINT32_C(3364774535), UINT32_C( 563661071), UINT32_C( 773341652), UINT32_C(2068658509) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C(3540927458), UINT32_C(1606359878), UINT32_C( 293528583), UINT32_C(1151186020) },
{ UINT32_C(2622837598), UINT32_C( 884490258), UINT32_C(4176016709), UINT32_C(1334275137) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(4268679904), UINT32_C(1235409894), UINT32_C(1518560915), UINT32_C(3880231545) },
{ UINT32_C( 279413132), UINT32_C(2262355064), UINT32_C(4072499255), UINT32_C(2505824226) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comle_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comle_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comle_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 1655413424631120327), UINT64_C( 2414154322209303476) },
{ UINT64_C( 1655413424631120327), UINT64_C( 2414154322209303476) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 6980710169465156664), UINT64_C(10714487761357775057) },
{ UINT64_C( 1129330877660342722), UINT64_C( 4048235039675284113) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 772724745883726474), UINT64_C(10768796985887008571) },
{ UINT64_C( 8981255941545058806), UINT64_C( 8447328362611546963) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C(14720368943566013867), UINT64_C(16178253019982103966) },
{ UINT64_C(11945562851780112782), UINT64_C( 2345808535136622113) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(17183891286428431811), UINT64_C(13677796347659763746) },
{ UINT64_C(15131594902348964272), UINT64_C( 9299478155659654180) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(13200861144104929529), UINT64_C( 8376768063846769390) },
{ UINT64_C( 5274007808018332293), UINT64_C(16115053827258694788) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C( 8168005558465349750), UINT64_C( 5528346279398634283) },
{ UINT64_C( 6217680072136131380), UINT64_C( 9527755318477125480) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C( 7123170988958547042), UINT64_C(10242152464707090688) },
{ UINT64_C( 4479972021671527909), UINT64_C(13165159143517481976) },
{ UINT64_C( 0), UINT64_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comle_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comle_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 28), INT8_C( 45), -INT8_C( 120), -INT8_C( 63), INT8_C( 105), -INT8_C( 19), -INT8_C( 101), -INT8_C( 46),
-INT8_C( 106), INT8_C( 126), -INT8_C( 34), INT8_C( 99), INT8_C( 20), -INT8_C( 76), INT8_C( 104), -INT8_C( 125) },
{ -INT8_C( 28), INT8_C( 45), -INT8_C( 120), -INT8_C( 63), INT8_C( 105), -INT8_C( 19), -INT8_C( 101), -INT8_C( 46),
-INT8_C( 106), INT8_C( 126), -INT8_C( 34), INT8_C( 99), INT8_C( 20), -INT8_C( 76), INT8_C( 104), -INT8_C( 125) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 62), -INT8_C( 58), INT8_C( 34), -INT8_C( 64), INT8_C( 4), INT8_C( 83), -INT8_C( 60), INT8_C( 73),
INT8_C( 94), -INT8_C( 94), INT8_C( 0), INT8_C( 84), INT8_C( 65), INT8_C( 46), -INT8_C( 4), -INT8_C( 66) },
{ INT8_C( 36), INT8_C( 98), INT8_C( 6), -INT8_C( 15), -INT8_C( 41), -INT8_C( 95), -INT8_C( 124), INT8_C( 11),
INT8_C( 20), -INT8_C( 119), INT8_C( 41), INT8_C( 61), INT8_C( 88), INT8_C( 121), INT8_C( 111), INT8_C( 112) },
{ -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( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 16), INT8_C( 80), INT8_C( 65), INT8_C( 47), INT8_C( 87), INT8_C( 120), -INT8_C( 9), -INT8_C( 63),
-INT8_C( 65), INT8_C( 36), -INT8_C( 120), -INT8_C( 107), -INT8_C( 18), -INT8_C( 43), -INT8_C( 5), -INT8_C( 28) },
{ INT8_C( 75), INT8_C( 35), INT8_C( 31), -INT8_C( 111), INT8_C( 57), -INT8_C( 70), INT8_C( 124), INT8_C( 84),
-INT8_C( 93), -INT8_C( 93), -INT8_C( 119), INT8_C( 23), -INT8_C( 40), -INT8_C( 59), INT8_C( 32), -INT8_C( 96) },
{ -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( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 102), -INT8_C( 85), INT8_C( 46), INT8_C( 113), INT8_C( 113), -INT8_C( 121), -INT8_C( 81), -INT8_C( 20),
INT8_C( 70), INT8_C( 119), -INT8_C( 38), -INT8_C( 69), INT8_C( 44), INT8_C( 8), -INT8_C( 104), INT8_C( 111) },
{ -INT8_C( 127), -INT8_C( 7), INT8_C( 59), INT8_C( 103), INT8_C( 54), INT8_C( 65), INT8_C( 109), -INT8_C( 12),
INT8_C( 107), INT8_C( 82), INT8_C( 102), -INT8_C( 70), INT8_C( 63), -INT8_C( 96), INT8_C( 99), INT8_C( 90) },
{ INT8_C( 0), -INT8_C( 1), -INT8_C( 1), 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( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 0) } },
{ { -INT8_C( 26), INT8_C( 93), INT8_C( 83), INT8_C( 78), -INT8_C( 4), -INT8_C( 121), -INT8_C( 45), INT8_C( 20),
INT8_C( 24), INT8_C( 37), INT8_C( 92), -INT8_C( 114), -INT8_C( 91), -INT8_C( 50), -INT8_C( 69), -INT8_C( 87) },
{ -INT8_C( 19), INT8_C( 106), -INT8_C( 62), INT8_C( 61), INT8_C( 119), INT8_C( 61), INT8_C( 62), INT8_C( 52),
-INT8_C( 109), INT8_C( 33), INT8_C( 41), -INT8_C( 17), INT8_C( 51), INT8_C( 18), INT8_C( 32), -INT8_C( 27) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
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( 4), -INT8_C( 16), INT8_C( 23), -INT8_C( 115), -INT8_C( 99), -INT8_C( 127), INT8_C( 75), INT8_MAX,
INT8_C( 96), -INT8_C( 74), INT8_C( 120), -INT8_C( 42), -INT8_C( 2), INT8_C( 47), INT8_C( 76), -INT8_C( 40) },
{ -INT8_C( 72), INT8_C( 0), INT8_C( 28), -INT8_C( 39), -INT8_C( 93), -INT8_C( 74), -INT8_C( 41), INT8_C( 92),
INT8_C( 68), -INT8_C( 107), INT8_C( 56), INT8_C( 124), INT8_C( 92), INT8_C( 36), INT8_C( 63), -INT8_C( 118) },
{ INT8_C( 0), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -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( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 5), -INT8_C( 20), -INT8_C( 31), -INT8_C( 8), -INT8_C( 2), INT8_C( 124), -INT8_C( 1), INT8_C( 117),
INT8_C( 68), -INT8_C( 80), -INT8_C( 107), INT8_C( 90), -INT8_C( 30), INT8_C( 51), INT8_C( 52), INT8_C( 69) },
{ INT8_C( 9), INT8_C( 67), -INT8_C( 78), INT8_C( 3), INT8_C( 99), -INT8_C( 76), INT8_C( 32), -INT8_C( 76),
-INT8_C( 91), INT8_C( 56), -INT8_C( 4), INT8_C( 41), INT8_C( 100), -INT8_C( 35), -INT8_C( 88), -INT8_C( 111) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -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( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 41), -INT8_C( 41), INT8_C( 27), INT8_C( 85), -INT8_C( 57), INT8_MIN, -INT8_C( 41), INT8_C( 64),
-INT8_C( 20), -INT8_C( 99), INT8_C( 26), -INT8_C( 29), -INT8_C( 9), -INT8_C( 29), INT8_C( 89), INT8_C( 56) },
{ INT8_C( 9), -INT8_C( 70), -INT8_C( 22), -INT8_C( 123), INT8_C( 95), INT8_C( 64), INT8_C( 1), -INT8_C( 125),
-INT8_C( 33), -INT8_C( 111), -INT8_C( 35), -INT8_C( 64), -INT8_C( 16), INT8_C( 70), INT8_C( 67), INT8_C( 66) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), 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( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comlt_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { INT16_C( 15247), INT16_C( 27948), -INT16_C( 26976), INT16_C( 10171), INT16_C( 1153), INT16_C( 14705), INT16_C( 18149), -INT16_C( 1884) },
{ INT16_C( 15247), INT16_C( 27948), -INT16_C( 26976), INT16_C( 10171), INT16_C( 1153), INT16_C( 14705), INT16_C( 18149), -INT16_C( 1884) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 4640), INT16_C( 9773), INT16_C( 24894), INT16_C( 4962), INT16_C( 10265), INT16_C( 1860), INT16_C( 26027), -INT16_C( 6919) },
{ -INT16_C( 24736), INT16_C( 2172), -INT16_C( 15313), INT16_C( 29075), INT16_C( 28203), INT16_C( 9217), INT16_C( 25685), -INT16_C( 12291) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 25781), -INT16_C( 21020), INT16_C( 8361), -INT16_C( 21973), -INT16_C( 31108), -INT16_C( 14185), INT16_C( 17466), -INT16_C( 15952) },
{ -INT16_C( 29501), -INT16_C( 4493), INT16_C( 5151), INT16_C( 26439), INT16_C( 25105), INT16_C( 27698), INT16_C( 18159), INT16_C( 845) },
{ INT16_C( 0), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 22352), -INT16_C( 7307), -INT16_C( 31929), -INT16_C( 28348), INT16_C( 12848), -INT16_C( 14017), -INT16_C( 5304), INT16_C( 8017) },
{ -INT16_C( 30239), -INT16_C( 6535), -INT16_C( 29162), INT16_C( 20927), INT16_C( 26716), -INT16_C( 10132), -INT16_C( 3238), -INT16_C( 8838) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0) } },
{ { INT16_C( 16635), -INT16_C( 28598), -INT16_C( 27199), INT16_C( 4245), -INT16_C( 19364), -INT16_C( 11355), INT16_C( 24699), INT16_C( 18373) },
{ INT16_C( 7906), -INT16_C( 17930), INT16_C( 14780), INT16_C( 30691), INT16_C( 2099), INT16_C( 12567), INT16_C( 29503), -INT16_C( 23186) },
{ INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), INT16_C( 0) } },
{ { -INT16_C( 19269), INT16_C( 31945), INT16_C( 23486), INT16_C( 28166), -INT16_C( 27352), -INT16_C( 21200), -INT16_C( 21125), -INT16_C( 32270) },
{ -INT16_C( 11283), INT16_C( 12114), INT16_C( 7611), INT16_C( 8348), -INT16_C( 13377), INT16_C( 16283), -INT16_C( 12475), -INT16_C( 23793) },
{ -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 29413), INT16_C( 28252), -INT16_C( 8217), -INT16_C( 2688), INT16_C( 23741), INT16_C( 8519), -INT16_C( 9487), INT16_C( 5570) },
{ INT16_C( 12586), INT16_C( 4341), INT16_C( 17080), -INT16_C( 27184), INT16_C( 14376), -INT16_C( 13727), INT16_C( 3605), INT16_C( 8007) },
{ -INT16_C( 1), INT16_C( 0), -INT16_C( 1), INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 21057), INT16_C( 12138), INT16_C( 10468), -INT16_C( 5143), -INT16_C( 28349), -INT16_C( 2732), -INT16_C( 4731), INT16_C( 18972) },
{ -INT16_C( 16446), INT16_C( 9287), -INT16_C( 20130), INT16_C( 8040), -INT16_C( 10091), -INT16_C( 25905), INT16_C( 14422), INT16_C( 24829) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), -INT16_C( 1), -INT16_C( 1), INT16_C( 0), -INT16_C( 1), -INT16_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comlt_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 2007266475), -INT32_C( 1725219236), -INT32_C( 222380575), INT32_C( 1776808158) },
{ -INT32_C( 2007266475), -INT32_C( 1725219236), -INT32_C( 222380575), INT32_C( 1776808158) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 867239389), INT32_C( 72184146), INT32_C( 1984835886), -INT32_C( 1357293903) },
{ INT32_C( 1050067072), INT32_C( 1194076919), -INT32_C( 521312320), -INT32_C( 1173493083) },
{ -INT32_C( 1), -INT32_C( 1), INT32_C( 0), -INT32_C( 1) } },
{ { INT32_C( 77171874), -INT32_C( 1939502529), INT32_C( 675794205), INT32_C( 1417834446) },
{ INT32_C( 478509801), INT32_C( 1037497182), -INT32_C( 2025253112), -INT32_C( 2055871359) },
{ -INT32_C( 1), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 1617484602), INT32_C( 26871243), INT32_C( 1981822087), -INT32_C( 1759343788) },
{ -INT32_C( 376487750), -INT32_C( 1039163079), -INT32_C( 1371908640), INT32_C( 302507291) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), -INT32_C( 1) } },
{ { INT32_C( 260537293), -INT32_C( 1445729890), INT32_C( 692317335), -INT32_C( 1075793172) },
{ INT32_C( 1813814040), INT32_C( 532757807), INT32_C( 522758768), -INT32_C( 1465125606) },
{ -INT32_C( 1), -INT32_C( 1), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 648220030), -INT32_C( 822591903), INT32_C( 152469362), INT32_C( 379907389) },
{ INT32_C( 1855197741), -INT32_C( 1647063575), -INT32_C( 1602511391), -INT32_C( 1857479641) },
{ -INT32_C( 1), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 2041460095), -INT32_C( 1225782084), -INT32_C( 586975933), -INT32_C( 497662992) },
{ -INT32_C( 1218433759), -INT32_C( 2110956529), -INT32_C( 90458277), INT32_C( 331965418) },
{ -INT32_C( 1), INT32_C( 0), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 573732109), -INT32_C( 1448780714), INT32_C( 1869632560), INT32_C( 1826602412) },
{ INT32_C( 266761244), INT32_C( 381153096), -INT32_C( 168788475), INT32_C( 1997787402) },
{ -INT32_C( 1), -INT32_C( 1), INT32_C( 0), -INT32_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comlt_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 1009310061849691392), -INT64_C( 277707935960291743) },
{ -INT64_C( 1009310061849691392), -INT64_C( 277707935960291743) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 6676146384178024379), INT64_C( 364913823257426952) },
{ -INT64_C( 3034404798427700017), -INT64_C( 2733338756895476993) },
{ -INT64_C( 1), INT64_C( 0) } },
{ { INT64_C( 8069120759030851780), INT64_C( 335030005951773068) },
{ -INT64_C( 7188690367506903671), INT64_C( 5587645156847305010) },
{ INT64_C( 0), -INT64_C( 1) } },
{ { -INT64_C( 4358047410867690302), -INT64_C( 4702224012875514696) },
{ -INT64_C( 8074591999440568491), -INT64_C( 7026560871118497247) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 1738651072766022297), INT64_C( 8737461920207474100) },
{ -INT64_C( 654263243386552228), INT64_C( 1642202949236884981) },
{ -INT64_C( 1), INT64_C( 0) } },
{ { INT64_C( 2589914495479646938), INT64_C( 9085271308915061929) },
{ INT64_C( 1806110484765072325), -INT64_C( 333482292974875947) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 4637417923057319100), INT64_C( 1523448370915064255) },
{ INT64_C( 4560264752526579129), -INT64_C( 7700718862329793814) },
{ -INT64_C( 1), INT64_C( 0) } },
{ { INT64_C( 206652225637310924), -INT64_C( 8839227657813777123) },
{ -INT64_C( 5656579576308303776), INT64_C( 3385089157130093660) },
{ INT64_C( 0), -INT64_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comlt_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(155), UINT8_C(171), UINT8_C( 38), UINT8_C(163), UINT8_C(144), UINT8_C( 11), UINT8_C(136), UINT8_C( 54),
UINT8_C(236), UINT8_C( 0), UINT8_C(208), UINT8_C( 40), UINT8_C(243), UINT8_C(137), UINT8_C(143), UINT8_C( 24) },
{ UINT8_C(155), UINT8_C(171), UINT8_C( 38), UINT8_C(163), UINT8_C(144), UINT8_C( 11), UINT8_C(136), UINT8_C( 54),
UINT8_C(236), UINT8_C( 0), UINT8_C(208), UINT8_C( 40), UINT8_C(243), UINT8_C(137), UINT8_C(143), UINT8_C( 24) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(225), UINT8_C(203), UINT8_C(236), UINT8_C(222), UINT8_C( 54), UINT8_C( 14), UINT8_C(152), UINT8_C(184),
UINT8_C( 82), UINT8_C( 9), UINT8_C( 4), UINT8_C(164), UINT8_C( 65), UINT8_C( 95), UINT8_C(209), UINT8_C( 12) },
{ UINT8_C(216), UINT8_C(105), UINT8_C(136), UINT8_C(168), UINT8_C( 1), UINT8_C( 54), UINT8_C(139), UINT8_C(161),
UINT8_C( 83), UINT8_C(208), UINT8_C( 75), UINT8_C(242), UINT8_C(230), UINT8_C(193), UINT8_C(188), UINT8_C( 20) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX } },
{ { UINT8_C(101), UINT8_C(214), UINT8_C( 6), UINT8_C(218), UINT8_C(100), UINT8_C( 35), UINT8_C(126), UINT8_C(154),
UINT8_C(244), UINT8_C( 71), UINT8_C(212), UINT8_C(141), UINT8_C(117), UINT8_C(242), UINT8_C(141), UINT8_C(120) },
{ UINT8_C(172), UINT8_C(164), UINT8_C(180), UINT8_C(140), UINT8_C( 22), UINT8_C(183), UINT8_C(205), UINT8_C(139),
UINT8_C(123), UINT8_C(159), UINT8_C( 11), UINT8_C( 45), UINT8_C(197), UINT8_C(113), UINT8_C(195), UINT8_C(194) },
{ UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 19), UINT8_C(162), UINT8_C( 31), UINT8_C( 24), UINT8_C( 10), UINT8_C( 17), UINT8_C( 23), UINT8_C(159),
UINT8_C(107), UINT8_C( 72), UINT8_C(157), UINT8_C(203), UINT8_C(235), UINT8_MAX, UINT8_C( 24), UINT8_C(186) },
{ UINT8_C( 63), UINT8_C(226), UINT8_C( 20), UINT8_C( 23), UINT8_C(118), UINT8_C(149), UINT8_C( 56), UINT8_C( 62),
UINT8_C(139), UINT8_C(244), UINT8_C(120), UINT8_C(161), UINT8_C( 59), UINT8_C(159), UINT8_C(140), UINT8_C(106) },
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0),
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
{ { UINT8_C( 20), UINT8_C(182), UINT8_C(160), UINT8_C( 98), UINT8_C(207), UINT8_C(225), UINT8_C( 77), UINT8_C( 17),
UINT8_C(223), UINT8_C(148), UINT8_C(200), UINT8_C( 39), UINT8_C( 74), UINT8_C(145), UINT8_C( 89), UINT8_C( 26) },
{ UINT8_C(184), UINT8_C(174), UINT8_C( 15), UINT8_C( 17), UINT8_C(201), UINT8_C(216), UINT8_C(179), UINT8_C( 1),
UINT8_C(172), UINT8_C( 88), UINT8_C(250), UINT8_C( 21), UINT8_C(238), UINT8_C( 85), UINT8_C(254), UINT8_C( 84) },
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(143), UINT8_C(154), UINT8_C(239), UINT8_C(126), UINT8_C( 91), UINT8_C(154), UINT8_C( 6), UINT8_C( 54),
UINT8_C(119), UINT8_C(177), UINT8_C(187), UINT8_C(102), UINT8_C( 59), UINT8_C(173), UINT8_C( 56), UINT8_C(224) },
{ UINT8_C( 63), UINT8_C(141), UINT8_C( 13), UINT8_C( 65), UINT8_C(185), UINT8_C(137), UINT8_C( 37), UINT8_C( 27),
UINT8_C( 6), UINT8_C( 82), UINT8_C(249), UINT8_C( 83), UINT8_C(134), UINT8_C(154), UINT8_C( 3), UINT8_C(199) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(173), UINT8_C(215), UINT8_C(118), UINT8_C( 52), UINT8_C( 87), UINT8_C( 68), UINT8_C( 44), UINT8_C( 88),
UINT8_C( 92), UINT8_C( 41), UINT8_C(224), UINT8_C( 83), UINT8_C(101), UINT8_C( 93), UINT8_C(157), UINT8_C( 83) },
{ UINT8_C(254), UINT8_C( 9), UINT8_C(118), UINT8_C(112), UINT8_C(236), UINT8_C(174), UINT8_C(120), UINT8_C(213),
UINT8_C(192), UINT8_C(106), UINT8_C(221), UINT8_C( 33), UINT8_C(172), UINT8_C(119), UINT8_C(130), UINT8_C( 13) },
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(150), UINT8_C(244), UINT8_C(156), UINT8_C( 78), UINT8_C(107), UINT8_C(232), UINT8_C(166), UINT8_C(189),
UINT8_C(182), UINT8_C(132), UINT8_C(158), UINT8_C(181), UINT8_C(113), UINT8_C(168), UINT8_C(112), UINT8_C(188) },
{ UINT8_C( 26), UINT8_C(169), UINT8_C(179), UINT8_C(102), UINT8_C( 10), UINT8_C( 82), UINT8_C(147), UINT8_C(119),
UINT8_C( 3), UINT8_C( 40), UINT8_C( 14), UINT8_C( 72), UINT8_C( 8), UINT8_C(242), UINT8_C(100), UINT8_C(108) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comlt_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(31089), UINT16_C(37576), UINT16_C(36158), UINT16_C(44380), UINT16_C(18604), UINT16_C(21340), UINT16_C(38662), UINT16_C(25497) },
{ UINT16_C(31089), UINT16_C(37576), UINT16_C(36158), UINT16_C(44380), UINT16_C(18604), UINT16_C(21340), UINT16_C(38662), UINT16_C(25497) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(62910), UINT16_C(60202), UINT16_C(31420), UINT16_C(18782), UINT16_C( 5622), UINT16_C(37109), UINT16_C( 5697), UINT16_C(11663) },
{ UINT16_C(61286), UINT16_C(51812), UINT16_C(15225), UINT16_C(29238), UINT16_C(65382), UINT16_C(63108), UINT16_C(12493), UINT16_C(36865) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(30224), UINT16_C(51012), UINT16_C(12458), UINT16_C(37569), UINT16_C(47298), UINT16_C(49400), UINT16_C(59647), UINT16_C(38892) },
{ UINT16_C(56735), UINT16_C(48343), UINT16_C(64195), UINT16_C(21276), UINT16_C(12301), UINT16_C(26237), UINT16_C(32109), UINT16_C(35726) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(45880), UINT16_C(49513), UINT16_C(31611), UINT16_C(40100), UINT16_C(39310), UINT16_C(41600), UINT16_C(29420), UINT16_C(62563) },
{ UINT16_C(52033), UINT16_C(12681), UINT16_C(54213), UINT16_C(38902), UINT16_C(25801), UINT16_C(27567), UINT16_C(34447), UINT16_C(39721) },
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
{ { UINT16_C(13663), UINT16_C(41730), UINT16_C(25815), UINT16_C(44527), UINT16_C(16771), UINT16_C(64758), UINT16_C(48046), UINT16_C(35549) },
{ UINT16_C(16759), UINT16_C(61666), UINT16_C(52519), UINT16_C(34732), UINT16_C( 8897), UINT16_C(52610), UINT16_C(21211), UINT16_C( 2747) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(33453), UINT16_C(13173), UINT16_C(61800), UINT16_C( 3722), UINT16_C(14281), UINT16_C(38848), UINT16_C(52205), UINT16_C(41792) },
{ UINT16_C(51303), UINT16_C(49994), UINT16_C(61840), UINT16_C(27430), UINT16_C(61982), UINT16_C(21342), UINT16_C(59896), UINT16_C( 7722) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
{ { UINT16_C( 9289), UINT16_C(14892), UINT16_C(11475), UINT16_C( 1885), UINT16_C( 903), UINT16_C(15176), UINT16_C(43858), UINT16_C(34166) },
{ UINT16_C(59193), UINT16_C(28713), UINT16_C(18088), UINT16_C(35661), UINT16_C(23559), UINT16_C(51115), UINT16_C(21391), UINT16_C( 8288) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(41820), UINT16_C(32653), UINT16_C( 7619), UINT16_C(57169), UINT16_C(12005), UINT16_C(45044), UINT16_C(25220), UINT16_C(30821) },
{ UINT16_C(10006), UINT16_C(49383), UINT16_C(54296), UINT16_C(11783), UINT16_C(59813), UINT16_C(61393), UINT16_C(38983), UINT16_C(22339) },
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comlt_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(3422717197), UINT32_C(3763129310), UINT32_C(3173924620), UINT32_C(3338139692) },
{ UINT32_C(3422717197), UINT32_C(3763129310), UINT32_C(3173924620), UINT32_C(3338139692) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2079067942), UINT32_C(2638062472), UINT32_C(2469928992), UINT32_C( 230539721) },
{ UINT32_C(3891418245), UINT32_C(1345797836), UINT32_C( 727563812), UINT32_C(3037886194) },
{ UINT32_MAX, UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C(1772103568), UINT32_C( 567852191), UINT32_C(2101906079), UINT32_C(2293618365) },
{ UINT32_C(2579863531), UINT32_C(2029747766), UINT32_C(3269997652), UINT32_C(2409685885) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(1366095741), UINT32_C( 12461574), UINT32_C(1953148234), UINT32_C( 303226313) },
{ UINT32_C(2866993000), UINT32_C(2692650180), UINT32_C(1245259973), UINT32_C(2592622454) },
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
{ { UINT32_C(4256565268), UINT32_C(2195319141), UINT32_C(1057231690), UINT32_C(4055818392) },
{ UINT32_C(3803421476), UINT32_C( 279611165), UINT32_C(2344034975), UINT32_C( 531802756) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
{ { UINT32_C( 870834558), UINT32_C(4044295779), UINT32_C(2810201287), UINT32_C(1839261392) },
{ UINT32_C( 161442630), UINT32_C( 258367466), UINT32_C(1305127433), UINT32_C(1694897488) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(3160935138), UINT32_C(2471140264), UINT32_C(1950664680), UINT32_C(3500210202) },
{ UINT32_C(3859730423), UINT32_C(3868796114), UINT32_C(1473923371), UINT32_C(3060567938) },
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(1621101673), UINT32_C(2993789917), UINT32_C(1857692630), UINT32_C(1621499165) },
{ UINT32_C(1114132574), UINT32_C(3727548286), UINT32_C(1917814318), UINT32_C(1489772993) },
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comlt_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comlt_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C(10694944839838363194), UINT64_C( 7465382146795430841) },
{ UINT64_C(10694944839838363194), UINT64_C( 7465382146795430841) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 4398214280665003428), UINT64_C(10668696243839101498) },
{ UINT64_C( 9305296330829379711), UINT64_C( 3126836178466671800) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C( 5410324813019269104), UINT64_C(12833757039398878326) },
{ UINT64_C(14086855747445027677), UINT64_C(17720907039855716603) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 5924802686951738731), UINT64_C(18075392130194162699) },
{ UINT64_C(11629883228059608830), UINT64_C( 872310240276364971) },
{ UINT64_MAX, UINT64_C( 0) } },
{ { UINT64_C(10978932502879473468), UINT64_C(12984423513631115809) },
{ UINT64_C( 7115779669251021194), UINT64_C(13463246126398199792) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C( 7379709048895640973), UINT64_C( 2813464160161863646) },
{ UINT64_C( 5726224131170604072), UINT64_C( 4974875778945776369) },
{ UINT64_C( 0), UINT64_MAX } },
{ { UINT64_C( 307687679989737603), UINT64_C(11263558847133430381) },
{ UINT64_C(12714394728952127489), UINT64_C(17769756759069503447) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C(13464197959855214408), UINT64_C( 6622059559939810292) },
{ UINT64_C(14814948272629236797), UINT64_C( 1545221821489315785) },
{ UINT64_MAX, UINT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comlt_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comlt_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { INT8_C( 4), INT8_C( 18), INT8_C( 7), -INT8_C( 71), INT8_C( 29), -INT8_C( 10), INT8_C( 14), -INT8_C( 48),
-INT8_C( 100), INT8_C( 115), -INT8_C( 17), INT8_C( 105), INT8_C( 97), -INT8_C( 76), -INT8_C( 73), -INT8_C( 84) },
{ INT8_C( 4), INT8_C( 18), INT8_C( 7), -INT8_C( 71), INT8_C( 29), -INT8_C( 10), INT8_C( 14), -INT8_C( 48),
-INT8_C( 100), INT8_C( 115), -INT8_C( 17), INT8_C( 105), INT8_C( 97), -INT8_C( 76), -INT8_C( 73), -INT8_C( 84) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 3), -INT8_C( 55), -INT8_C( 55), -INT8_C( 63), INT8_C( 31), -INT8_C( 89), -INT8_C( 43), -INT8_C( 19),
-INT8_C( 16), INT8_C( 112), INT8_C( 4), -INT8_C( 2), INT8_C( 32), -INT8_C( 11), INT8_C( 117), -INT8_C( 22) },
{ -INT8_C( 34), INT8_C( 122), -INT8_C( 19), -INT8_C( 77), INT8_C( 49), -INT8_C( 71), -INT8_C( 54), -INT8_C( 115),
-INT8_C( 116), INT8_C( 41), INT8_C( 57), INT8_C( 67), -INT8_C( 94), INT8_MAX, -INT8_C( 87), -INT8_C( 41) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 123), INT8_C( 117), INT8_MIN, INT8_C( 105), -INT8_C( 56), -INT8_C( 53), INT8_C( 12), INT8_C( 89),
INT8_C( 116), -INT8_C( 116), -INT8_C( 68), -INT8_C( 80), INT8_C( 123), -INT8_C( 109), -INT8_C( 112), -INT8_C( 68) },
{ -INT8_C( 1), INT8_C( 77), -INT8_C( 50), -INT8_C( 5), -INT8_C( 103), -INT8_C( 63), -INT8_C( 9), INT8_C( 59),
-INT8_C( 19), -INT8_C( 51), -INT8_C( 7), -INT8_C( 2), -INT8_C( 127), -INT8_C( 78), -INT8_C( 90), INT8_C( 35) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 49), -INT8_C( 45), INT8_C( 101), -INT8_C( 61), -INT8_C( 104), -INT8_C( 71), INT8_C( 39), INT8_C( 90),
INT8_C( 124), INT8_C( 91), -INT8_C( 99), INT8_C( 39), -INT8_C( 56), -INT8_C( 100), -INT8_C( 87), -INT8_C( 43) },
{ -INT8_C( 113), INT8_C( 22), INT8_C( 18), INT8_C( 90), -INT8_C( 4), INT8_C( 22), INT8_C( 123), INT8_C( 32),
-INT8_C( 26), -INT8_C( 25), -INT8_C( 106), INT8_C( 98), -INT8_C( 91), INT8_C( 84), -INT8_C( 107), -INT8_C( 38) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 36), INT8_C( 104), -INT8_C( 31), -INT8_C( 103), INT8_C( 56), INT8_C( 120), INT8_C( 15), INT8_C( 54),
INT8_C( 48), INT8_C( 100), INT8_C( 16), INT8_C( 42), -INT8_C( 82), INT8_C( 25), -INT8_C( 89), INT8_C( 123) },
{ -INT8_C( 75), INT8_C( 90), INT8_C( 32), -INT8_C( 104), INT8_C( 2), -INT8_C( 63), INT8_C( 64), -INT8_C( 124),
-INT8_C( 96), INT8_C( 0), INT8_C( 120), INT8_C( 55), -INT8_C( 73), INT8_C( 109), INT8_C( 93), INT8_C( 66) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 91), -INT8_C( 66), INT8_C( 93), -INT8_C( 79), INT8_C( 79), INT8_C( 16), -INT8_C( 86), INT8_C( 53),
-INT8_C( 71), INT8_C( 47), INT8_C( 123), -INT8_C( 125), -INT8_C( 43), INT8_C( 17), INT8_C( 116), -INT8_C( 9) },
{ -INT8_C( 103), -INT8_C( 93), INT8_C( 98), INT8_C( 125), INT8_C( 84), -INT8_C( 55), INT8_C( 44), -INT8_C( 79),
INT8_C( 66), -INT8_C( 97), INT8_C( 7), INT8_C( 69), INT8_C( 94), INT8_C( 6), -INT8_C( 24), -INT8_C( 93) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 119), INT8_C( 92), INT8_C( 63), -INT8_C( 44), -INT8_C( 122), -INT8_C( 118), -INT8_C( 30), -INT8_C( 95),
INT8_C( 63), INT8_C( 68), INT8_C( 71), -INT8_C( 8), -INT8_C( 26), -INT8_C( 116), -INT8_C( 9), -INT8_C( 111) },
{ INT8_C( 100), INT8_C( 120), INT8_C( 63), -INT8_C( 48), -INT8_C( 102), INT8_C( 54), INT8_C( 41), -INT8_C( 18),
-INT8_C( 11), INT8_C( 77), -INT8_C( 85), INT8_C( 84), INT8_C( 67), INT8_C( 37), INT8_C( 29), INT8_C( 71) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { -INT8_C( 59), -INT8_C( 54), -INT8_C( 16), -INT8_C( 54), -INT8_C( 123), -INT8_C( 19), -INT8_C( 98), -INT8_C( 64),
-INT8_C( 23), INT8_C( 44), -INT8_C( 35), INT8_C( 82), -INT8_C( 119), -INT8_C( 109), INT8_C( 24), -INT8_C( 112) },
{ INT8_C( 62), INT8_C( 98), INT8_C( 31), INT8_C( 91), INT8_C( 123), INT8_C( 16), INT8_C( 30), -INT8_C( 126),
-INT8_C( 31), -INT8_C( 111), -INT8_C( 52), INT8_C( 43), INT8_C( 13), -INT8_C( 43), -INT8_C( 28), INT8_C( 117) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comtrue_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 28235), INT16_C( 23513), INT16_C( 16883), -INT16_C( 9018), INT16_C( 28384), INT16_C( 22691), INT16_C( 11365), INT16_C( 16063) },
{ -INT16_C( 28235), INT16_C( 23513), INT16_C( 16883), -INT16_C( 9018), INT16_C( 28384), INT16_C( 22691), INT16_C( 11365), INT16_C( 16063) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 6066), -INT16_C( 7062), INT16_C( 24736), -INT16_C( 18702), -INT16_C( 3283), -INT16_C( 27694), INT16_C( 7013), INT16_C( 29733) },
{ INT16_C( 14447), INT16_C( 20321), -INT16_C( 28807), INT16_C( 15169), -INT16_C( 28084), -INT16_C( 11261), INT16_C( 25123), -INT16_C( 7724) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 27971), INT16_C( 13449), INT16_C( 11953), -INT16_C( 11633), -INT16_C( 1278), INT16_C( 21541), INT16_C( 499), -INT16_C( 29240) },
{ INT16_C( 18204), INT16_C( 28143), -INT16_C( 8514), INT16_C( 9721), INT16_C( 8276), -INT16_C( 29596), INT16_C( 14954), -INT16_C( 15809) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 5966), INT16_C( 5090), -INT16_C( 32683), INT16_C( 7900), INT16_C( 12935), INT16_C( 13869), -INT16_C( 29090), INT16_C( 2230) },
{ INT16_C( 18148), INT16_C( 32493), INT16_C( 13931), -INT16_C( 6955), -INT16_C( 24288), INT16_C( 18990), -INT16_C( 16669), INT16_C( 10728) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 29526), INT16_C( 18910), INT16_C( 24628), -INT16_C( 7743), INT16_C( 8165), INT16_C( 338), -INT16_C( 13745), INT16_C( 11733) },
{ -INT16_C( 16658), INT16_C( 19138), -INT16_C( 24793), -INT16_C( 16451), -INT16_C( 25127), -INT16_C( 11064), -INT16_C( 2762), INT16_C( 23992) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 17711), -INT16_C( 25115), -INT16_C( 10761), INT16_C( 25894), INT16_C( 19267), INT16_C( 31997), -INT16_C( 16787), INT16_C( 17166) },
{ INT16_C( 14179), -INT16_C( 26154), INT16_C( 8859), -INT16_C( 615), -INT16_C( 25945), -INT16_C( 3428), -INT16_C( 6390), -INT16_C( 22379) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { INT16_C( 17738), -INT16_C( 10144), -INT16_C( 6330), -INT16_C( 3853), INT16_C( 15562), INT16_C( 28820), INT16_C( 29025), -INT16_C( 27574) },
{ INT16_C( 14186), INT16_C( 13201), -INT16_C( 14738), -INT16_C( 6319), INT16_C( 8881), INT16_C( 28177), -INT16_C( 25337), INT16_C( 20584) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
{ { -INT16_C( 25111), -INT16_C( 15691), -INT16_C( 24632), -INT16_C( 13552), INT16_C( 31905), -INT16_C( 23167), -INT16_C( 5166), INT16_C( 26223) },
{ INT16_C( 18476), -INT16_C( 8101), -INT16_C( 27575), -INT16_C( 14898), -INT16_C( 17376), INT16_C( 3983), INT16_C( 7894), -INT16_C( 25062) },
{ -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1), -INT16_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comtrue_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 592333272), INT32_C( 1046873126), -INT32_C( 483748878), INT32_C( 40252777) },
{ INT32_C( 592333272), INT32_C( 1046873126), -INT32_C( 483748878), INT32_C( 40252777) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 1738338769), -INT32_C( 537488684), -INT32_C( 1669402341), -INT32_C( 628002273) },
{ -INT32_C( 1013853892), -INT32_C( 1864687864), -INT32_C( 218560542), -INT32_C( 1340582194) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 1849902208), INT32_C( 2092092086), -INT32_C( 565753909), INT32_C( 1287103113) },
{ INT32_C( 1793637952), INT32_C( 190379540), -INT32_C( 1722522981), -INT32_C( 1200859480) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 639839329), -INT32_C( 437566312), -INT32_C( 1655682984), INT32_C( 1014216125) },
{ -INT32_C( 541419767), -INT32_C( 171535115), -INT32_C( 1583011003), INT32_C( 1632190111) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 298201443), INT32_C( 1669793569), -INT32_C( 1610449687), -INT32_C( 240340125) },
{ -INT32_C( 344988478), -INT32_C( 1760821679), -INT32_C( 749475065), -INT32_C( 191294116) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { -INT32_C( 1335416484), INT32_C( 1013980154), -INT32_C( 1312462170), -INT32_C( 1270045406) },
{ INT32_C( 1450126993), INT32_C( 957431505), -INT32_C( 171562742), -INT32_C( 1186733177) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 907264965), -INT32_C( 1198749494), -INT32_C( 1778214216), -INT32_C( 851799390) },
{ -INT32_C( 400426082), INT32_C( 599677468), -INT32_C( 815370890), -INT32_C( 131092024) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
{ { INT32_C( 1185359361), INT32_C( 566580794), INT32_C( 404722759), -INT32_C( 2074180980) },
{ INT32_C( 1760548370), -INT32_C( 1661182501), INT32_C( 731594866), -INT32_C( 112884027) },
{ -INT32_C( 1), -INT32_C( 1), -INT32_C( 1), -INT32_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comtrue_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 4827420152686847433), INT64_C( 2351017032843452794) },
{ -INT64_C( 4827420152686847433), INT64_C( 2351017032843452794) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 1318907397904776171), INT64_C( 246970282387777574) },
{ -INT64_C( 3014534770133342832), -INT64_C( 1447753086249662342) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 6901820662948417486), INT64_C( 6957891663631265723) },
{ -INT64_C( 5609414929122897612), INT64_C( 3107121265309028719) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 4045661127513538150), INT64_C( 6238471471275466073) },
{ -INT64_C( 7358602143334717878), INT64_C( 2966188204622873984) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { -INT64_C( 4561025498887071483), INT64_C( 3342166001191074087) },
{ -INT64_C( 3081258487602582789), INT64_C( 3311408266836896469) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 4709059121473874385), INT64_C( 3522154446598982478) },
{ -INT64_C( 5969826206700296338), INT64_C( 9179788988322859927) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 144109204175369717), -INT64_C( 6630182630353298442) },
{ INT64_C( 7530936525393257676), INT64_C( 7377758891505561070) },
{ -INT64_C( 1), -INT64_C( 1) } },
{ { INT64_C( 5299929538076591767), -INT64_C( 3343706590326083003) },
{ INT64_C( 5709504304017058364), INT64_C( 3231116635510249985) },
{ -INT64_C( 1), -INT64_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comtrue_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(224), UINT8_C( 34), UINT8_C(237), UINT8_C(194), UINT8_C(209), UINT8_C(110), UINT8_C(236), UINT8_C( 97),
UINT8_C(102), UINT8_C(151), UINT8_C(249), UINT8_C(228), UINT8_C( 29), UINT8_C(244), UINT8_C(158), UINT8_C( 0) },
{ UINT8_C(224), UINT8_C( 34), UINT8_C(237), UINT8_C(194), UINT8_C(209), UINT8_C(110), UINT8_C(236), UINT8_C( 97),
UINT8_C(102), UINT8_C(151), UINT8_C(249), UINT8_C(228), UINT8_C( 29), UINT8_C(244), UINT8_C(158), UINT8_C( 0) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(231), UINT8_C(128), UINT8_C(123), UINT8_C( 38), UINT8_C(126), UINT8_C(221), UINT8_C( 57), UINT8_C(170),
UINT8_C(249), UINT8_C(153), UINT8_C(192), UINT8_C( 36), UINT8_C(158), UINT8_C(177), UINT8_C(170), UINT8_C( 23) },
{ UINT8_C(247), UINT8_C( 83), UINT8_C(247), UINT8_C(208), UINT8_C( 40), UINT8_C(232), UINT8_C( 2), UINT8_C(145),
UINT8_C(127), UINT8_C( 82), UINT8_C(179), UINT8_C(239), UINT8_C( 77), UINT8_C(114), UINT8_C(247), UINT8_C(121) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(244), UINT8_C(238), UINT8_C(109), UINT8_C(154), UINT8_C( 66), UINT8_C( 49), UINT8_C( 99), UINT8_C(193),
UINT8_C(253), UINT8_C(179), UINT8_C( 0), UINT8_C(190), UINT8_C(191), UINT8_C(122), UINT8_C(194), UINT8_C(112) },
{ UINT8_C( 4), UINT8_C(225), UINT8_C( 44), UINT8_C(157), UINT8_C(130), UINT8_C(152), UINT8_C(184), UINT8_C( 33),
UINT8_C(185), UINT8_C(236), UINT8_C( 19), UINT8_C( 75), UINT8_C(202), UINT8_C( 72), UINT8_C(137), UINT8_C(132) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(140), UINT8_C(252), UINT8_C(190), UINT8_C( 49), UINT8_C(221), UINT8_C( 62), UINT8_C(160), UINT8_C(219),
UINT8_C( 54), UINT8_C(110), UINT8_C(153), UINT8_C(141), UINT8_C(131), UINT8_C(159), UINT8_C( 9), UINT8_C(126) },
{ UINT8_C( 49), UINT8_C( 82), UINT8_C(243), UINT8_C(240), UINT8_C(136), UINT8_C(132), UINT8_C(247), UINT8_C( 88),
UINT8_C( 59), UINT8_C(236), UINT8_C(128), UINT8_C(191), UINT8_C( 61), UINT8_C(126), UINT8_C( 62), UINT8_C(104) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(215), UINT8_C( 51), UINT8_C(215), UINT8_C(179), UINT8_C(248), UINT8_C( 12), UINT8_C(217), UINT8_C( 65),
UINT8_C(204), UINT8_C( 85), UINT8_C(244), UINT8_C( 89), UINT8_C(143), UINT8_C( 39), UINT8_C(102), UINT8_C(139) },
{ UINT8_C(164), UINT8_C( 48), UINT8_C(182), UINT8_C(147), UINT8_C(225), UINT8_C(182), UINT8_C(165), UINT8_C(128),
UINT8_C( 46), UINT8_C(218), UINT8_C( 98), UINT8_C( 21), UINT8_C( 78), UINT8_C( 26), UINT8_C(253), UINT8_C(111) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(252), UINT8_C( 26), UINT8_C( 30), UINT8_C(232), UINT8_C( 58), UINT8_C(164), UINT8_C(247), UINT8_C( 60),
UINT8_C(230), UINT8_C(237), UINT8_C(119), UINT8_C(234), UINT8_C(142), UINT8_C( 26), UINT8_C(192), UINT8_C(221) },
{ UINT8_C(133), UINT8_C( 2), UINT8_C(220), UINT8_C( 76), UINT8_C( 54), UINT8_C( 54), UINT8_C(171), UINT8_C(223),
UINT8_C(185), UINT8_C( 63), UINT8_C( 32), UINT8_C( 19), UINT8_C(164), UINT8_C( 38), UINT8_C(173), UINT8_C(223) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C( 36), UINT8_C( 58), UINT8_C(252), UINT8_C(152), UINT8_C( 76), UINT8_C( 13), UINT8_C(224), UINT8_C( 18),
UINT8_C(172), UINT8_C(192), UINT8_C(139), UINT8_C( 8), UINT8_C( 38), UINT8_C(128), UINT8_C( 1), UINT8_C(189) },
{ UINT8_C(253), UINT8_C( 81), UINT8_C(205), UINT8_C(228), UINT8_C( 47), UINT8_C( 10), UINT8_C(242), UINT8_C(189),
UINT8_C( 5), UINT8_C(161), UINT8_C( 36), UINT8_C(130), UINT8_C(232), UINT8_C(169), UINT8_C( 56), UINT8_C( 1) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
{ { UINT8_C(118), UINT8_C( 25), UINT8_C(218), UINT8_C(138), UINT8_C(213), UINT8_C( 79), UINT8_C(126), UINT8_C( 11),
UINT8_C( 71), UINT8_C( 85), UINT8_C(153), UINT8_C(122), UINT8_MAX, UINT8_C( 98), UINT8_C( 16), UINT8_C(115) },
{ UINT8_C( 52), UINT8_C(164), UINT8_C(240), UINT8_C( 35), UINT8_C(115), UINT8_C( 60), UINT8_C( 97), UINT8_C(100),
UINT8_C( 57), UINT8_C(139), UINT8_C(213), UINT8_C( 41), UINT8_C(193), UINT8_C(172), UINT8_C(133), UINT8_C( 29) },
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comtrue_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(16667), UINT16_C(34590), UINT16_C(29566), UINT16_C(29111), UINT16_C(13535), UINT16_C( 2311), UINT16_C(51138), UINT16_C(18389) },
{ UINT16_C(16667), UINT16_C(34590), UINT16_C(29566), UINT16_C(29111), UINT16_C(13535), UINT16_C( 2311), UINT16_C(51138), UINT16_C(18389) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(33617), UINT16_C(53423), UINT16_C(54443), UINT16_C( 7135), UINT16_C(33406), UINT16_C(53915), UINT16_C(14040), UINT16_C(31612) },
{ UINT16_C(14906), UINT16_C(22322), UINT16_C(33007), UINT16_C(35445), UINT16_C(59035), UINT16_C(32062), UINT16_C(47127), UINT16_C(33080) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(30332), UINT16_C(46449), UINT16_C(55422), UINT16_C(10582), UINT16_C( 4348), UINT16_C(17374), UINT16_C(20436), UINT16_C(25093) },
{ UINT16_C(35580), UINT16_C(49788), UINT16_C(32463), UINT16_C(41119), UINT16_C(62116), UINT16_C(40615), UINT16_C(15525), UINT16_C(26657) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C( 1759), UINT16_C(39071), UINT16_C(21141), UINT16_C(55213), UINT16_C(48346), UINT16_C(17670), UINT16_C(65375), UINT16_C( 7176) },
{ UINT16_C(48009), UINT16_C(36966), UINT16_C(30406), UINT16_C(63773), UINT16_C(57378), UINT16_C(13225), UINT16_C(23317), UINT16_C(17784) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(47775), UINT16_C(17055), UINT16_C(18839), UINT16_C(28108), UINT16_C( 3649), UINT16_C(41083), UINT16_C(20254), UINT16_C(61293) },
{ UINT16_C(21768), UINT16_C(34902), UINT16_C(28542), UINT16_C(56791), UINT16_C(14652), UINT16_C( 1707), UINT16_C( 7438), UINT16_C(24613) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C( 7143), UINT16_C(31706), UINT16_C(50733), UINT16_C(13211), UINT16_C(36696), UINT16_C( 7334), UINT16_C(18107), UINT16_C( 9244) },
{ UINT16_C(56993), UINT16_C(29622), UINT16_C(29084), UINT16_C(38580), UINT16_C(33562), UINT16_C(56599), UINT16_C(35641), UINT16_C( 272) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C(45277), UINT16_C( 2744), UINT16_C(53503), UINT16_C(28673), UINT16_C(50760), UINT16_C(33261), UINT16_C(60894), UINT16_C( 766) },
{ UINT16_C(57470), UINT16_C( 6637), UINT16_C(33995), UINT16_C(27551), UINT16_C(18917), UINT16_C(33108), UINT16_C(44094), UINT16_C(28706) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
{ { UINT16_C( 425), UINT16_C(47522), UINT16_C(28596), UINT16_C(28393), UINT16_C(15416), UINT16_C(38585), UINT16_C(18990), UINT16_C(54265) },
{ UINT16_C(58052), UINT16_C(16995), UINT16_C(45489), UINT16_C(41853), UINT16_C( 4293), UINT16_C(47818), UINT16_C(35268), UINT16_C(62529) },
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comtrue_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C(1325307508), UINT32_C(1933093877), UINT32_C( 611546961), UINT32_C(3723913300) },
{ UINT32_C(1325307508), UINT32_C(1933093877), UINT32_C( 611546961), UINT32_C(3723913300) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(3061869982), UINT32_C(2268594166), UINT32_C(1340170977), UINT32_C(3612747891) },
{ UINT32_C(2453010534), UINT32_C(3369569641), UINT32_C(4085318074), UINT32_C(1792953591) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(1017907250), UINT32_C(1605728067), UINT32_C( 167888482), UINT32_C(1598723061) },
{ UINT32_C(1303424678), UINT32_C(3048086713), UINT32_C(3410846364), UINT32_C(3231121600) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2655992744), UINT32_C(1944002368), UINT32_C(2979186031), UINT32_C(3573797615) },
{ UINT32_C(1205223517), UINT32_C(2175099276), UINT32_C(1950162975), UINT32_C( 655067991) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2731642409), UINT32_C( 178061716), UINT32_C( 234677809), UINT32_C(2171333388) },
{ UINT32_C(1192114098), UINT32_C(1990550155), UINT32_C(3048981866), UINT32_C(3911251299) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C( 295340765), UINT32_C(1842882023), UINT32_C(3869749712), UINT32_C(2859067633) },
{ UINT32_C( 398596558), UINT32_C(3667143006), UINT32_C(1479465382), UINT32_C(1304446605) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(2987570923), UINT32_C(3849753059), UINT32_C( 83668595), UINT32_C(2581909577) },
{ UINT32_C(2103013848), UINT32_C(4133273260), UINT32_C( 603906810), UINT32_C(2597488508) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
{ { UINT32_C(1336056443), UINT32_C(3093385006), UINT32_C( 778135106), UINT32_C(2546379962) },
{ UINT32_C(1111213305), UINT32_C( 316876573), UINT32_C(3750914703), UINT32_C( 423543000) },
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comtrue_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comtrue_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 3350510381451755447), UINT64_C(16930864899557384294) },
{ UINT64_C( 3350510381451755447), UINT64_C(16930864899557384294) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8508265454644468825), UINT64_C( 1363736690095880333) },
{ UINT64_C(10500951027009105093), UINT64_C(15734554044523291655) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 7625327590781190175), UINT64_C(14754978182317413659) },
{ UINT64_C( 2880546174294223309), UINT64_C(12817318442109975372) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 3750008482140780916), UINT64_C(10497191513006491489) },
{ UINT64_C( 4189497283825827832), UINT64_C(13072326418065599582) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 2351656805455728255), UINT64_C(12074971609072998792) },
{ UINT64_C( 1162739342028862829), UINT64_C( 3522466258036686693) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8323443085463963497), UINT64_C( 6293901481351254200) },
{ UINT64_C(17428138038975976277), UINT64_C( 7507649261918993800) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8472081730515119193), UINT64_C(16854752128826783256) },
{ UINT64_C( 2827141321774572248), UINT64_C(11978707203669650927) },
{ UINT64_MAX, UINT64_MAX } },
{ { UINT64_C( 8122805138361239160), UINT64_C(11901595990489207505) },
{ UINT64_C(17953440984500758813), UINT64_C( 3597954551509030851) },
{ UINT64_MAX, UINT64_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comtrue_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comtrue_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 19), -INT8_C( 100), -INT8_C( 104), INT8_MAX, INT8_C( 106), INT8_C( 52), -INT8_C( 30), -INT8_C( 86),
INT8_C( 10), INT8_C( 44), -INT8_C( 80), INT8_C( 91), -INT8_C( 25), INT8_C( 9), INT8_C( 6), -INT8_C( 45) },
{ -INT8_C( 19), -INT8_C( 100), -INT8_C( 104), INT8_MAX, INT8_C( 106), INT8_C( 52), -INT8_C( 30), -INT8_C( 86),
INT8_C( 10), INT8_C( 44), -INT8_C( 80), INT8_C( 91), -INT8_C( 25), INT8_C( 9), INT8_C( 6), -INT8_C( 45) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 77), -INT8_C( 80), -INT8_C( 63), -INT8_C( 49), INT8_C( 19), INT8_C( 112), -INT8_C( 122), -INT8_C( 82),
INT8_C( 44), INT8_C( 67), -INT8_C( 7), -INT8_C( 43), INT8_C( 121), INT8_C( 81), INT8_C( 47), INT8_C( 83) },
{ -INT8_C( 31), -INT8_C( 74), INT8_C( 101), -INT8_C( 63), -INT8_C( 92), -INT8_C( 123), -INT8_C( 14), INT8_C( 108),
-INT8_C( 20), INT8_C( 13), INT8_C( 122), -INT8_C( 73), -INT8_C( 90), INT8_C( 91), INT8_C( 101), -INT8_C( 70) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 113), INT8_C( 0), -INT8_C( 113), INT8_C( 47), -INT8_C( 110), INT8_C( 20), INT8_C( 65), -INT8_C( 113),
INT8_C( 81), INT8_C( 122), INT8_C( 97), INT8_C( 120), INT8_C( 2), INT8_C( 102), -INT8_C( 27), INT8_C( 82) },
{ INT8_C( 124), INT8_C( 29), -INT8_C( 115), INT8_C( 50), -INT8_C( 111), -INT8_C( 4), -INT8_C( 46), -INT8_C( 2),
-INT8_C( 97), -INT8_C( 68), INT8_C( 26), -INT8_C( 45), INT8_C( 98), -INT8_C( 12), INT8_C( 45), -INT8_C( 93) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 12), -INT8_C( 33), -INT8_C( 20), INT8_C( 35), -INT8_C( 104), INT8_C( 96), INT8_C( 65), -INT8_C( 28),
INT8_C( 91), INT8_C( 67), INT8_C( 82), -INT8_C( 65), -INT8_C( 36), -INT8_C( 58), -INT8_C( 6), INT8_C( 119) },
{ -INT8_C( 27), INT8_C( 88), INT8_C( 121), -INT8_C( 102), -INT8_C( 38), -INT8_C( 96), INT8_C( 106), -INT8_C( 88),
INT8_C( 74), -INT8_C( 63), -INT8_C( 10), INT8_C( 119), -INT8_C( 60), -INT8_C( 35), INT8_C( 72), -INT8_C( 42) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { -INT8_C( 20), -INT8_C( 40), INT8_C( 64), INT8_C( 113), -INT8_C( 51), INT8_C( 94), INT8_C( 108), -INT8_C( 11),
INT8_C( 113), INT8_C( 39), INT8_C( 52), INT8_C( 116), -INT8_C( 81), INT8_C( 121), INT8_C( 84), INT8_C( 10) },
{ INT8_C( 69), -INT8_C( 17), -INT8_C( 112), -INT8_C( 63), INT8_C( 39), INT8_C( 122), -INT8_C( 94), -INT8_C( 78),
INT8_C( 22), -INT8_C( 91), INT8_C( 120), INT8_C( 109), INT8_C( 115), INT8_C( 29), -INT8_C( 100), -INT8_C( 101) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 86), INT8_C( 112), -INT8_C( 12), -INT8_C( 30), -INT8_C( 37), INT8_C( 21), -INT8_C( 85), INT8_C( 9),
-INT8_C( 68), -INT8_C( 83), INT8_C( 111), INT8_C( 93), INT8_C( 37), -INT8_C( 120), -INT8_C( 35), INT8_C( 83) },
{ -INT8_C( 61), INT8_C( 107), INT8_C( 57), INT8_C( 110), INT8_C( 31), -INT8_C( 112), INT8_C( 99), INT8_C( 99),
INT8_C( 42), -INT8_C( 17), INT8_C( 6), INT8_C( 124), INT8_C( 24), -INT8_C( 68), INT8_C( 19), INT8_C( 58) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 114), INT8_C( 49), INT8_C( 110), INT8_C( 62), INT8_C( 103), -INT8_C( 115), -INT8_C( 25), INT8_C( 105),
INT8_C( 100), INT8_C( 93), INT8_C( 107), INT8_C( 67), -INT8_C( 28), -INT8_C( 6), INT8_C( 123), -INT8_C( 103) },
{ -INT8_C( 120), INT8_C( 83), -INT8_C( 34), INT8_C( 107), INT8_C( 106), -INT8_C( 20), -INT8_C( 109), INT8_C( 5),
-INT8_C( 81), INT8_C( 39), INT8_C( 10), INT8_C( 107), INT8_C( 91), -INT8_C( 61), -INT8_C( 108), -INT8_C( 6) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
{ { INT8_C( 105), -INT8_C( 94), INT8_C( 23), INT8_C( 77), INT8_C( 28), -INT8_C( 49), INT8_C( 6), INT8_C( 94),
-INT8_C( 112), -INT8_C( 65), -INT8_C( 112), -INT8_C( 19), -INT8_C( 108), -INT8_C( 41), INT8_C( 24), INT8_C( 38) },
{ -INT8_C( 68), INT8_C( 47), -INT8_C( 26), INT8_C( 126), -INT8_C( 79), -INT8_C( 106), INT8_C( 28), -INT8_C( 34),
-INT8_C( 52), -INT8_C( 42), -INT8_C( 21), INT8_C( 3), -INT8_C( 29), INT8_C( 57), INT8_C( 6), INT8_C( 37) },
{ INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0),
INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_comfalse_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { INT16_C( 19299), -INT16_C( 10665), -INT16_C( 7521), INT16_C( 12018), INT16_C( 23656), INT16_C( 9543), INT16_C( 10462), INT16_C( 16539) },
{ INT16_C( 19299), -INT16_C( 10665), -INT16_C( 7521), INT16_C( 12018), INT16_C( 23656), INT16_C( 9543), INT16_C( 10462), INT16_C( 16539) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 30587), INT16_C( 28857), -INT16_C( 27492), INT16_C( 14308), -INT16_C( 31830), INT16_C( 3089), INT16_C( 9817), INT16_C( 339) },
{ -INT16_C( 19065), -INT16_C( 23657), -INT16_C( 12645), INT16_C( 8593), -INT16_C( 17643), -INT16_C( 19978), -INT16_C( 2966), INT16_C( 12524) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 7154), INT16_C( 2239), -INT16_C( 3886), INT16_C( 22485), -INT16_C( 18832), INT16_C( 20196), -INT16_C( 28060), -INT16_C( 10398) },
{ INT16_C( 26622), INT16_C( 31293), -INT16_C( 25418), -INT16_C( 32307), INT16_C( 25791), INT16_C( 23047), INT16_C( 17375), INT16_C( 16115) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 12675), INT16_C( 4192), -INT16_C( 19716), -INT16_C( 30506), -INT16_C( 2233), -INT16_C( 28468), -INT16_C( 31059), -INT16_C( 4581) },
{ -INT16_C( 5648), INT16_C( 9395), INT16_C( 21400), -INT16_C( 27508), -INT16_C( 8051), -INT16_C( 5920), INT16_C( 7653), -INT16_C( 20072) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 13317), INT16_C( 19972), -INT16_C( 7999), INT16_C( 4302), -INT16_C( 12457), -INT16_C( 25551), INT16_C( 2524), -INT16_C( 28570) },
{ -INT16_C( 15228), INT16_C( 26975), -INT16_C( 1046), -INT16_C( 23368), -INT16_C( 18776), INT16_C( 9195), -INT16_C( 29914), -INT16_C( 11325) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 26031), -INT16_C( 29677), -INT16_C( 31542), INT16_C( 14503), -INT16_C( 14905), INT16_C( 14459), INT16_C( 9368), INT16_C( 811) },
{ INT16_C( 32738), INT16_C( 4267), -INT16_C( 25260), -INT16_C( 2248), INT16_C( 28216), -INT16_C( 11378), -INT16_C( 27577), -INT16_C( 5540) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { INT16_C( 9154), -INT16_C( 28427), -INT16_C( 23106), INT16_C( 18504), INT16_C( 25280), INT16_C( 11538), -INT16_C( 8567), -INT16_C( 28590) },
{ -INT16_C( 24013), -INT16_C( 7170), INT16_C( 16253), -INT16_C( 10764), -INT16_C( 28316), -INT16_C( 16589), INT16_C( 16883), INT16_C( 16203) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
{ { -INT16_C( 29349), INT16_C( 8722), INT16_C( 19526), -INT16_C( 30567), INT16_C( 11369), INT16_C( 16990), INT16_C( 16216), INT16_C( 32707) },
{ -INT16_C( 18785), -INT16_C( 22337), -INT16_C( 5106), -INT16_C( 30508), -INT16_C( 22956), -INT16_C( 20415), -INT16_C( 26160), INT16_C( 6776) },
{ INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0), INT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_comfalse_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { INT32_C( 215100579), INT32_C( 1065517066), INT32_C( 1103670763), INT32_C( 409423789) },
{ INT32_C( 215100579), INT32_C( 1065517066), INT32_C( 1103670763), INT32_C( 409423789) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 676872781), INT32_C( 1472244142), INT32_C( 1847604529), -INT32_C( 1026841466) },
{ INT32_C( 362710978), -INT32_C( 1209316943), -INT32_C( 256479891), -INT32_C( 1557915857) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 724618854), -INT32_C( 1985970170), -INT32_C( 1053309405), -INT32_C( 2127729986) },
{ INT32_C( 81536991), INT32_C( 918335460), INT32_C( 428995352), INT32_C( 1742970503) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 2041569809), INT32_C( 1734113470), INT32_C( 1911611985), -INT32_C( 1652231136) },
{ -INT32_C( 1560899038), INT32_C( 98417482), -INT32_C( 2101164269), -INT32_C( 1383207843) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 650311817), INT32_C( 970758525), INT32_C( 1169297636), INT32_C( 1606043987) },
{ -INT32_C( 1219341644), INT32_C( 1815508108), -INT32_C( 189828729), -INT32_C( 1123546536) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 339920063), INT32_C( 1191832811), INT32_C( 115792131), INT32_C( 263549184) },
{ INT32_C( 190508989), -INT32_C( 1297030319), INT32_C( 918714780), -INT32_C( 549519584) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { -INT32_C( 232349166), -INT32_C( 657885007), INT32_C( 2096284887), -INT32_C( 178293298) },
{ INT32_C( 1702162276), INT32_C( 556863042), INT32_C( 308439161), INT32_C( 1528157022) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
{ { INT32_C( 995174552), INT32_C( 889538167), INT32_C( 1866422664), INT32_C( 1503550566) },
{ -INT32_C( 1911890734), -INT32_C( 6095098), INT32_C( 1324795463), INT32_C( 2021101498) },
{ INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_comfalse_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 6366298885846147464), -INT64_C( 9053310093840015299) },
{ -INT64_C( 6366298885846147464), -INT64_C( 9053310093840015299) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 7643525258363585233), INT64_C( 9172489781360728365) },
{ INT64_C( 8399992451541847259), -INT64_C( 5079792567336525282) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 3167527705361488802), -INT64_C( 5153845950562702508) },
{ -INT64_C( 1967080906568107032), INT64_C( 5112346950309340756) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 695738907731328339), INT64_C( 7775603355661091812) },
{ INT64_C( 4751201580733526728), INT64_C( 8185989162854183943) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 8568407790313302891), -INT64_C( 2269208996944795132) },
{ -INT64_C( 3373138648826693214), -INT64_C( 9052155927955122850) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 4854216040627442414), INT64_C( 6858664712003037148) },
{ -INT64_C( 2423726253071017569), -INT64_C( 4599253573658439550) },
{ INT64_C( 0), INT64_C( 0) } },
{ { INT64_C( 2430982534606457967), INT64_C( 3446570983174816405) },
{ -INT64_C( 5882078299363616281), INT64_C( 8423466024813833627) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 1288368508354637909), -INT64_C( 7395581740469386409) },
{ -INT64_C( 8567077577994681951), -INT64_C( 1840201770462104112) },
{ INT64_C( 0), INT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_comfalse_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint8_t b[16];
const uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(237), UINT8_C( 63), UINT8_C(198), UINT8_C(174), UINT8_C(171), UINT8_C( 7), UINT8_C(176), UINT8_C(106),
UINT8_C( 73), UINT8_C(243), UINT8_C(211), UINT8_C(142), UINT8_C(127), UINT8_C(179), UINT8_C(175), UINT8_C(229) },
{ UINT8_C(237), UINT8_C( 63), UINT8_C(198), UINT8_C(174), UINT8_C(171), UINT8_C( 7), UINT8_C(176), UINT8_C(106),
UINT8_C( 73), UINT8_C(243), UINT8_C(211), UINT8_C(142), UINT8_C(127), UINT8_C(179), UINT8_C(175), UINT8_C(229) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(246), UINT8_C( 26), UINT8_C( 92), UINT8_C(122), UINT8_C(159), UINT8_C( 33), UINT8_C(123), UINT8_C(185),
UINT8_C( 73), UINT8_C( 47), UINT8_C(110), UINT8_C(210), UINT8_C(115), UINT8_C(151), UINT8_C(196), UINT8_C( 94) },
{ UINT8_C( 94), UINT8_C( 98), UINT8_C(247), UINT8_C( 69), UINT8_C(103), UINT8_C( 80), UINT8_C( 90), UINT8_C(223),
UINT8_C(148), UINT8_C( 25), UINT8_C( 77), UINT8_C( 89), UINT8_C(109), UINT8_C(248), UINT8_C(179), UINT8_C( 91) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 13), UINT8_C(106), UINT8_C(166), UINT8_C(231), UINT8_C(120), UINT8_C( 52), UINT8_C(105), UINT8_C(133),
UINT8_C( 47), UINT8_C(163), UINT8_C(157), UINT8_C(157), UINT8_C( 2), UINT8_C( 23), UINT8_C(184), UINT8_C( 36) },
{ UINT8_C( 38), UINT8_C(195), UINT8_C(180), UINT8_C(122), UINT8_C(135), UINT8_C(174), UINT8_C( 4), UINT8_C(147),
UINT8_C( 95), UINT8_C(253), UINT8_C(204), UINT8_C( 86), UINT8_C( 8), UINT8_C(117), UINT8_C( 81), UINT8_C( 66) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 15), UINT8_C( 60), UINT8_C(175), UINT8_C( 87), UINT8_C(137), UINT8_C(223), UINT8_C(202), UINT8_C( 52),
UINT8_C(170), UINT8_C(153), UINT8_C(134), UINT8_C(125), UINT8_C(147), UINT8_C(211), UINT8_C( 59), UINT8_C(127) },
{ UINT8_C(108), UINT8_C(231), UINT8_C( 99), UINT8_C( 23), UINT8_C(179), UINT8_C( 41), UINT8_C(150), UINT8_C(207),
UINT8_C(211), UINT8_C( 40), UINT8_C(185), UINT8_C( 75), UINT8_C(249), UINT8_C( 49), UINT8_C(114), UINT8_C(228) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 35), UINT8_C( 21), UINT8_C(222), UINT8_C(146), UINT8_C(122), UINT8_C( 44), UINT8_C(135), UINT8_C( 15),
UINT8_C(225), UINT8_C(154), UINT8_C(144), UINT8_C( 57), UINT8_C(206), UINT8_C(209), UINT8_C( 51), UINT8_C(185) },
{ UINT8_C( 88), UINT8_C( 88), UINT8_C(110), UINT8_C(226), UINT8_C(146), UINT8_C(202), UINT8_C(248), UINT8_C(219),
UINT8_C( 24), UINT8_C( 33), UINT8_C(122), UINT8_C( 1), UINT8_C(231), UINT8_C( 52), UINT8_C(252), UINT8_C(135) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C(114), UINT8_C(127), UINT8_C(157), UINT8_C( 95), UINT8_C(242), UINT8_C( 35), UINT8_C(136), UINT8_C( 94),
UINT8_C(253), UINT8_C( 45), UINT8_C( 35), UINT8_C(155), UINT8_C( 90), UINT8_C( 27), UINT8_C(138), UINT8_C( 24) },
{ UINT8_C( 20), UINT8_C(157), UINT8_C( 59), UINT8_C(164), UINT8_C(205), UINT8_C(152), UINT8_C( 19), UINT8_MAX,
UINT8_C( 85), UINT8_C(112), UINT8_C(121), UINT8_C( 64), UINT8_C(123), UINT8_C(135), UINT8_C(217), UINT8_C(116) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 35), UINT8_C( 1), UINT8_C( 84), UINT8_C(136), UINT8_C(153), UINT8_C(203), UINT8_C(181), UINT8_C(105),
UINT8_C( 37), UINT8_C(219), UINT8_C(167), UINT8_C(105), UINT8_C(224), UINT8_C(185), UINT8_C( 38), UINT8_C(229) },
{ UINT8_C(197), UINT8_C( 62), UINT8_C( 52), UINT8_C( 36), UINT8_C( 11), UINT8_C(155), UINT8_C(205), UINT8_C(131),
UINT8_C(179), UINT8_C(158), UINT8_C( 28), UINT8_C(207), UINT8_C( 93), UINT8_C( 49), UINT8_C(239), UINT8_C(243) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
{ { UINT8_C( 95), UINT8_C( 36), UINT8_C(105), UINT8_C(211), UINT8_C( 24), UINT8_C( 44), UINT8_C(246), UINT8_C(119),
UINT8_C(130), UINT8_C( 43), UINT8_C(132), UINT8_C(108), UINT8_C( 7), UINT8_C(177), UINT8_C(241), UINT8_C(103) },
{ UINT8_C(150), UINT8_C(195), UINT8_C(191), UINT8_C( 44), UINT8_C(245), UINT8_C(220), UINT8_C( 15), UINT8_C(174),
UINT8_C( 89), UINT8_C( 50), UINT8_C(205), UINT8_C(120), UINT8_C( 52), UINT8_C( 58), UINT8_C( 40), UINT8_C( 75) },
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epu8(a, b);
simde_test_x86_assert_equal_u8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_comfalse_epu8(a, b);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint16_t b[8];
const uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(28238), UINT16_C( 2373), UINT16_C(19991), UINT16_C(53556), UINT16_C(42300), UINT16_C(27683), UINT16_C( 3448), UINT16_C(59601) },
{ UINT16_C(28238), UINT16_C( 2373), UINT16_C(19991), UINT16_C(53556), UINT16_C(42300), UINT16_C(27683), UINT16_C( 3448), UINT16_C(59601) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(46509), UINT16_C(33350), UINT16_C(25139), UINT16_C(51906), UINT16_C(46191), UINT16_C( 499), UINT16_C(43944), UINT16_C(50794) },
{ UINT16_C(26903), UINT16_C(62032), UINT16_C(14909), UINT16_C(49237), UINT16_C(53626), UINT16_C(12778), UINT16_C(54746), UINT16_C(44720) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(39986), UINT16_C(61232), UINT16_C(13932), UINT16_C( 7628), UINT16_C(44319), UINT16_C(13301), UINT16_C(35683), UINT16_C(43679) },
{ UINT16_C(40419), UINT16_C(22002), UINT16_C(63283), UINT16_C(35395), UINT16_C(14436), UINT16_C(33346), UINT16_C( 4054), UINT16_C( 629) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(65102), UINT16_C(15333), UINT16_C(24136), UINT16_C(61463), UINT16_C(42127), UINT16_C(54845), UINT16_C(57866), UINT16_C(16558) },
{ UINT16_C(37337), UINT16_C(64404), UINT16_C(36257), UINT16_C(30692), UINT16_C(24867), UINT16_C(10388), UINT16_C(50452), UINT16_C(11272) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(25896), UINT16_C(11981), UINT16_C(58481), UINT16_C(35465), UINT16_C( 8679), UINT16_C(45618), UINT16_C(47432), UINT16_C(53375) },
{ UINT16_C(52514), UINT16_C(44444), UINT16_C( 1325), UINT16_C(53538), UINT16_C(54495), UINT16_C(60486), UINT16_C(65083), UINT16_C(29777) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(22762), UINT16_C(36944), UINT16_C(53132), UINT16_C(13580), UINT16_C(44112), UINT16_C(36412), UINT16_C( 6082), UINT16_C(41722) },
{ UINT16_C(55781), UINT16_C(12660), UINT16_C(26242), UINT16_C(57060), UINT16_C( 6847), UINT16_C(38082), UINT16_C(50163), UINT16_C( 8759) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C(24761), UINT16_C(10454), UINT16_C(10308), UINT16_C(14215), UINT16_C(52978), UINT16_C(13507), UINT16_C( 1059), UINT16_C(64775) },
{ UINT16_C(15947), UINT16_C(20354), UINT16_C(47174), UINT16_C(59409), UINT16_C(47852), UINT16_C(59502), UINT16_C( 7142), UINT16_C(32165) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
{ { UINT16_C( 1216), UINT16_C(49095), UINT16_C(63038), UINT16_C(55777), UINT16_C( 3828), UINT16_C(27183), UINT16_C(34833), UINT16_C(11150) },
{ UINT16_C(33660), UINT16_C(53552), UINT16_C( 802), UINT16_C(13715), UINT16_C(15502), UINT16_C(45748), UINT16_C( 3770), UINT16_C(52864) },
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epu16(a, b);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_comfalse_epu16(a, b);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint32_t b[4];
const uint32_t r[4];
} test_vec[] = {
{ { UINT32_C( 495701028), UINT32_C(1661223205), UINT32_C(4192859518), UINT32_C(1920445492) },
{ UINT32_C( 495701028), UINT32_C(1661223205), UINT32_C(4192859518), UINT32_C(1920445492) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2112172191), UINT32_C( 223432893), UINT32_C(3103467980), UINT32_C(1571922967) },
{ UINT32_C( 176832528), UINT32_C( 500634271), UINT32_C(2841053882), UINT32_C( 464156470) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C( 487116252), UINT32_C(3123947200), UINT32_C(3282700494), UINT32_C(1914758822) },
{ UINT32_C(1311566250), UINT32_C(1312976980), UINT32_C(1105384910), UINT32_C(1829761724) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(1996743516), UINT32_C(2199981778), UINT32_C(2603311549), UINT32_C(1437981454) },
{ UINT32_C(2967096858), UINT32_C(1076716526), UINT32_C(2347949794), UINT32_C(2995725169) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(1413347655), UINT32_C(2936246172), UINT32_C( 149274049), UINT32_C(1297714168) },
{ UINT32_C(4210751369), UINT32_C( 964752146), UINT32_C(1307618847), UINT32_C( 806360314) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(2065602757), UINT32_C(2277585349), UINT32_C(3527451137), UINT32_C(2767388428) },
{ UINT32_C(4076236063), UINT32_C(2183342442), UINT32_C(1346555052), UINT32_C( 830196994) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(3054389244), UINT32_C(1397030134), UINT32_C(3232013222), UINT32_C(2691251953) },
{ UINT32_C(1630811907), UINT32_C(1677659294), UINT32_C(1548927154), UINT32_C(4223226927) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
{ { UINT32_C(3413478935), UINT32_C(1534261719), UINT32_C(2625187287), UINT32_C(2326220880) },
{ UINT32_C( 236903774), UINT32_C( 603628630), UINT32_C( 965153625), UINT32_C(3601969961) },
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epu32(a, b);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_comfalse_epu32(a, b);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_comfalse_epu64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint64_t a[2];
const uint64_t b[2];
const uint64_t r[2];
} test_vec[] = {
{ { UINT64_C(16587935071193527612), UINT64_C(12291236871839146685) },
{ UINT64_C(16587935071193527612), UINT64_C(12291236871839146685) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 936179423556331607), UINT64_C( 885787018599615688) },
{ UINT64_C( 4428066784809584020), UINT64_C( 5121735281528422783) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 7273618990605459223), UINT64_C(16460119146588271400) },
{ UINT64_C(12183757784063755590), UINT64_C(12255644603997213255) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 8411877623334783685), UINT64_C(11890677820861681824) },
{ UINT64_C( 8071428364446482042), UINT64_C( 2052088554210205242) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 9532074734755492490), UINT64_C(11021214541104852057) },
{ UINT64_C(15719502767937189466), UINT64_C(16370063756630862978) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(15887387323360124302), UINT64_C( 370777384618741371) },
{ UINT64_C( 3559445977505232651), UINT64_C( 5122796480762872903) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C(14069199249831139064), UINT64_C( 3783401529332825901) },
{ UINT64_C(13522030736708520376), UINT64_C(10529289842004242352) },
{ UINT64_C( 0), UINT64_C( 0) } },
{ { UINT64_C( 9474241958379987696), UINT64_C( 7849626402426275479) },
{ UINT64_C(14039565349656785543), UINT64_C( 733341401437713638) },
{ UINT64_C( 0), UINT64_C( 0) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_comfalse_epu64(a, b);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u64x2();
simde__m128i b = (i == 0) ? a : simde_test_x86_random_u64x2();
simde__m128i r = simde_mm_comfalse_epu64(a, b);
simde_test_x86_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_frcz_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float32 a[4];
const simde_float32 r[4];
} test_vec[] = {
#if !defined(SIMDE_FAST_NANS)
{ { SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 12.42), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -45.81) },
{ SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 0.42), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -0.81) } },
{ { SIMDE_FLOAT32_C( -0.00), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) },
{ SIMDE_FLOAT32_C( -0.00), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
#endif
{ { SIMDE_FLOAT32_C( -267.43), SIMDE_FLOAT32_C( 697.99), SIMDE_FLOAT32_C( 720.88), SIMDE_FLOAT32_C( 488.02) },
{ SIMDE_FLOAT32_C( -0.43), SIMDE_FLOAT32_C( 0.99), SIMDE_FLOAT32_C( 0.88), SIMDE_FLOAT32_C( 0.02) } },
{ { SIMDE_FLOAT32_C( -83.96), SIMDE_FLOAT32_C( 757.62), SIMDE_FLOAT32_C( 563.16), SIMDE_FLOAT32_C( -657.64) },
{ SIMDE_FLOAT32_C( -0.96), SIMDE_FLOAT32_C( 0.62), SIMDE_FLOAT32_C( 0.16), SIMDE_FLOAT32_C( -0.64) } },
{ { SIMDE_FLOAT32_C( -248.94), SIMDE_FLOAT32_C( -920.22), SIMDE_FLOAT32_C( 216.77), SIMDE_FLOAT32_C( 216.41) },
{ SIMDE_FLOAT32_C( -0.94), SIMDE_FLOAT32_C( -0.22), SIMDE_FLOAT32_C( 0.77), SIMDE_FLOAT32_C( 0.41) } },
{ { SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) },
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ { SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) },
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ { SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) },
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 r = simde_mm_frcz_ps(a);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float32 values[8 * 1 * sizeof(simde__m128)];
simde_test_x86_random_f32x4_full(8, 1, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);
for (size_t i = 0 ; i < 8 ; i++) {
simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
simde__m128 r = simde_mm_frcz_ps(a);
simde_test_x86_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_frcz_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float64 a[2];
const simde_float64 r[2];
} test_vec[] = {
{ { SIMDE_FLOAT64_C( 721.61), SIMDE_FLOAT64_C( -998.54) },
{ SIMDE_FLOAT64_C( 0.61), SIMDE_FLOAT64_C( -0.54) } },
{ { SIMDE_FLOAT64_C( 303.63), SIMDE_FLOAT64_C( -654.53) },
{ SIMDE_FLOAT64_C( 0.63), SIMDE_FLOAT64_C( -0.53) } },
{ { SIMDE_FLOAT64_C( 252.97), SIMDE_FLOAT64_C( -202.67) },
{ SIMDE_FLOAT64_C( 0.97), SIMDE_FLOAT64_C( -0.67) } },
{ { SIMDE_FLOAT64_C( 265.30), SIMDE_FLOAT64_C( 854.12) },
{ SIMDE_FLOAT64_C( 0.30), SIMDE_FLOAT64_C( 0.12) } },
{ { SIMDE_FLOAT64_C( 222.08), SIMDE_FLOAT64_C( 378.34) },
{ SIMDE_FLOAT64_C( 0.08), SIMDE_FLOAT64_C( 0.34) } },
{ { SIMDE_FLOAT64_C( -860.59), SIMDE_FLOAT64_C( 134.25) },
{ SIMDE_FLOAT64_C( -0.59), SIMDE_FLOAT64_C( 0.25) } },
{ { SIMDE_FLOAT64_C( -587.76), SIMDE_FLOAT64_C( -499.31) },
{ SIMDE_FLOAT64_C( -0.76), SIMDE_FLOAT64_C( -0.31) } },
{ { SIMDE_FLOAT64_C( 337.99), SIMDE_FLOAT64_C( 907.90) },
{ SIMDE_FLOAT64_C( 0.99), SIMDE_FLOAT64_C( 0.90) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
simde__m128d r = simde_mm_frcz_pd(a);
simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128d a = simde_test_x86_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m128d r = simde_mm_frcz_pd(a);
simde_test_x86_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_frcz_ss (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float32 a[4];
const simde_float32 b[4];
const simde_float32 r[4];
} test_vec[] = {
#if !defined(SIMDE_FAST_NANS)
{ { SIMDE_MATH_NANF, SIMDE_FLOAT32_C( 905.27), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -960.75) },
{ SIMDE_FLOAT32_C( 948.61), SIMDE_MATH_NANF, SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -509.69) },
{ SIMDE_FLOAT32_C( 0.61), SIMDE_FLOAT32_C( 905.27), SIMDE_MATH_NANF, SIMDE_FLOAT32_C( -960.75) } },
#endif
{ { SIMDE_FLOAT32_C( -447.80), SIMDE_FLOAT32_C( 686.39), SIMDE_FLOAT32_C( -727.16), SIMDE_FLOAT32_C( 702.02) },
{ SIMDE_FLOAT32_C( 382.92), SIMDE_FLOAT32_C( -167.09), SIMDE_FLOAT32_C( -187.72), SIMDE_FLOAT32_C( 463.24) },
{ SIMDE_FLOAT32_C( 0.92), SIMDE_FLOAT32_C( 686.39), SIMDE_FLOAT32_C( -727.16), SIMDE_FLOAT32_C( 702.02) } },
{ { SIMDE_FLOAT32_C( -988.16), SIMDE_FLOAT32_C( 55.76), SIMDE_FLOAT32_C( -728.63), SIMDE_FLOAT32_C( 331.46) },
{ SIMDE_FLOAT32_C( 783.44), SIMDE_FLOAT32_C( 272.32), SIMDE_FLOAT32_C( -952.27), SIMDE_FLOAT32_C( 666.01) },
{ SIMDE_FLOAT32_C( 0.44), SIMDE_FLOAT32_C( 55.76), SIMDE_FLOAT32_C( -728.63), SIMDE_FLOAT32_C( 331.46) } },
{ { SIMDE_FLOAT32_C( -35.49), SIMDE_FLOAT32_C( 647.51), SIMDE_FLOAT32_C( 748.77), SIMDE_FLOAT32_C( -662.83) },
{ SIMDE_FLOAT32_C( -133.03), SIMDE_FLOAT32_C( -522.75), SIMDE_FLOAT32_C( -207.62), SIMDE_FLOAT32_C( 173.86) },
{ SIMDE_FLOAT32_C( -0.03), SIMDE_FLOAT32_C( 647.51), SIMDE_FLOAT32_C( 748.77), SIMDE_FLOAT32_C( -662.83) } },
{ { SIMDE_FLOAT32_C( -244.91), SIMDE_FLOAT32_C( -284.10), SIMDE_FLOAT32_C( 74.56), SIMDE_FLOAT32_C( 211.89) },
{ SIMDE_FLOAT32_C( -649.34), SIMDE_FLOAT32_C( 710.75), SIMDE_FLOAT32_C( -984.68), SIMDE_FLOAT32_C( -194.62) },
{ SIMDE_FLOAT32_C( -0.34), SIMDE_FLOAT32_C( -284.10), SIMDE_FLOAT32_C( 74.56), SIMDE_FLOAT32_C( 211.89) } },
{ { SIMDE_FLOAT32_C( 748.28), SIMDE_FLOAT32_C( -293.86), SIMDE_FLOAT32_C( -703.67), SIMDE_FLOAT32_C( 664.42) },
{ SIMDE_FLOAT32_C( 553.33), SIMDE_FLOAT32_C( 680.04), SIMDE_FLOAT32_C( 602.34), SIMDE_FLOAT32_C( -119.66) },
{ SIMDE_FLOAT32_C( 0.33), SIMDE_FLOAT32_C( -293.86), SIMDE_FLOAT32_C( -703.67), SIMDE_FLOAT32_C( 664.42) } },
{ { SIMDE_FLOAT32_C( 55.02), SIMDE_FLOAT32_C( -925.84), SIMDE_FLOAT32_C( -321.21), SIMDE_FLOAT32_C( -997.62) },
{ SIMDE_FLOAT32_C( 247.23), SIMDE_FLOAT32_C( -17.61), SIMDE_FLOAT32_C( 19.20), SIMDE_FLOAT32_C( 227.45) },
{ SIMDE_FLOAT32_C( 0.23), SIMDE_FLOAT32_C( -925.84), SIMDE_FLOAT32_C( -321.21), SIMDE_FLOAT32_C( -997.62) } },
{ { SIMDE_FLOAT32_C( -490.77), SIMDE_FLOAT32_C( 357.46), SIMDE_FLOAT32_C( -507.37), SIMDE_FLOAT32_C( 765.25) },
{ SIMDE_FLOAT32_C( 759.58), SIMDE_FLOAT32_C( 800.53), SIMDE_FLOAT32_C( -773.67), SIMDE_FLOAT32_C( -557.60) },
{ SIMDE_FLOAT32_C( 0.58), SIMDE_FLOAT32_C( 357.46), SIMDE_FLOAT32_C( -507.37), SIMDE_FLOAT32_C( 765.25) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
simde__m128 r = simde_mm_frcz_ss(a, b);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float32 values[8 * 2 * sizeof(simde__m128)];
simde_test_x86_random_f32x4_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);
for (size_t i = 0 ; i < 8 ; i++) {
simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
simde__m128 r = simde_mm_frcz_ss(a, b);
simde_test_x86_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_frcz_sd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float64 a[2];
const simde_float64 b[2];
const simde_float64 r[2];
} test_vec[] = {
#if !defined(SIMDE_FAST_NANS)
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -505.11) },
{ SIMDE_FLOAT64_C( 53.80), SIMDE_MATH_NAN },
{ SIMDE_FLOAT64_C( 0.80), SIMDE_FLOAT64_C( -505.11) } },
{ { SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -152.81) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -604.42) },
{ SIMDE_MATH_NAN, SIMDE_FLOAT64_C( -152.81) } },
#endif
{ { SIMDE_FLOAT64_C( -580.37), SIMDE_FLOAT64_C( 397.44) },
{ SIMDE_FLOAT64_C( 12.30), SIMDE_FLOAT64_C( -571.64) },
{ SIMDE_FLOAT64_C( 0.30), SIMDE_FLOAT64_C( 397.44) } },
{ { SIMDE_FLOAT64_C( -317.73), SIMDE_FLOAT64_C( 561.51) },
{ SIMDE_FLOAT64_C( 558.76), SIMDE_FLOAT64_C( 989.68) },
{ SIMDE_FLOAT64_C( 0.76), SIMDE_FLOAT64_C( 561.51) } },
{ { SIMDE_FLOAT64_C( 447.19), SIMDE_FLOAT64_C( 768.18) },
{ SIMDE_FLOAT64_C( -108.37), SIMDE_FLOAT64_C( 761.16) },
{ SIMDE_FLOAT64_C( -0.37), SIMDE_FLOAT64_C( 768.18) } },
{ { SIMDE_FLOAT64_C( 935.85), SIMDE_FLOAT64_C( 553.27) },
{ SIMDE_FLOAT64_C( 803.16), SIMDE_FLOAT64_C( -832.27) },
{ SIMDE_FLOAT64_C( 0.16), SIMDE_FLOAT64_C( 553.27) } },
{ { SIMDE_FLOAT64_C( 468.06), SIMDE_FLOAT64_C( -827.20) },
{ SIMDE_FLOAT64_C( 877.56), SIMDE_FLOAT64_C( 399.46) },
{ SIMDE_FLOAT64_C( 0.56), SIMDE_FLOAT64_C( -827.20) } },
{ { SIMDE_FLOAT64_C( 647.08), SIMDE_FLOAT64_C( 298.93) },
{ SIMDE_FLOAT64_C( 654.10), SIMDE_FLOAT64_C( -828.97) },
{ SIMDE_FLOAT64_C( 0.10), SIMDE_FLOAT64_C( 298.93) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
simde__m128d r = simde_mm_frcz_sd(a, b);
simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
simde_float64 values[8 * 2 * sizeof(simde__m128d)];
simde_test_x86_random_f64x2_full(8, 2, values, -1000.0, 1000.0, SIMDE_TEST_VEC_FLOAT_NAN);
for (size_t i = 0 ; i < 8 ; i++) {
simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
simde__m128d r = simde_mm_frcz_sd(a, b);
simde_test_x86_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm256_frcz_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float32 a[8];
const simde_float32 r[8];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -670.89), SIMDE_FLOAT32_C( -640.19), SIMDE_FLOAT32_C( -142.80), SIMDE_FLOAT32_C( -716.79),
SIMDE_FLOAT32_C( -808.65), SIMDE_FLOAT32_C( -913.21), SIMDE_FLOAT32_C( -995.30), SIMDE_FLOAT32_C( 46.54) },
{ SIMDE_FLOAT32_C( -0.89), SIMDE_FLOAT32_C( -0.19), SIMDE_FLOAT32_C( -0.80), SIMDE_FLOAT32_C( -0.79),
SIMDE_FLOAT32_C( -0.65), SIMDE_FLOAT32_C( -0.21), SIMDE_FLOAT32_C( -0.30), SIMDE_FLOAT32_C( 0.54) } },
{ { SIMDE_FLOAT32_C( 709.52), SIMDE_FLOAT32_C( -168.92), SIMDE_FLOAT32_C( 708.30), SIMDE_FLOAT32_C( -368.88),
SIMDE_FLOAT32_C( 358.26), SIMDE_FLOAT32_C( 212.20), SIMDE_FLOAT32_C( -23.04), SIMDE_FLOAT32_C( -594.96) },
{ SIMDE_FLOAT32_C( 0.52), SIMDE_FLOAT32_C( -0.92), SIMDE_FLOAT32_C( 0.30), SIMDE_FLOAT32_C( -0.88),
SIMDE_FLOAT32_C( 0.26), SIMDE_FLOAT32_C( 0.20), SIMDE_FLOAT32_C( -0.04), SIMDE_FLOAT32_C( -0.96) } },
{ { SIMDE_FLOAT32_C( -152.93), SIMDE_FLOAT32_C( 661.67), SIMDE_FLOAT32_C( -162.02), SIMDE_FLOAT32_C( 323.10),
SIMDE_FLOAT32_C( -796.75), SIMDE_FLOAT32_C( -577.32), SIMDE_FLOAT32_C( -414.41), SIMDE_FLOAT32_C( -571.15) },
{ SIMDE_FLOAT32_C( -0.93), SIMDE_FLOAT32_C( 0.67), SIMDE_FLOAT32_C( -0.02), SIMDE_FLOAT32_C( 0.10),
SIMDE_FLOAT32_C( -0.75), SIMDE_FLOAT32_C( -0.32), SIMDE_FLOAT32_C( -0.41), SIMDE_FLOAT32_C( -0.15) } },
{ { SIMDE_FLOAT32_C( -484.73), SIMDE_FLOAT32_C( -429.49), SIMDE_FLOAT32_C( -27.86), SIMDE_FLOAT32_C( -466.84),
SIMDE_FLOAT32_C( 149.21), SIMDE_FLOAT32_C( 613.76), SIMDE_FLOAT32_C( 652.27), SIMDE_FLOAT32_C( 129.73) },
{ SIMDE_FLOAT32_C( -0.73), SIMDE_FLOAT32_C( -0.49), SIMDE_FLOAT32_C( -0.86), SIMDE_FLOAT32_C( -0.84),
SIMDE_FLOAT32_C( 0.21), SIMDE_FLOAT32_C( 0.76), SIMDE_FLOAT32_C( 0.27), SIMDE_FLOAT32_C( 0.73) } },
{ { SIMDE_FLOAT32_C( 249.43), SIMDE_FLOAT32_C( -759.09), SIMDE_FLOAT32_C( 194.25), SIMDE_FLOAT32_C( 612.66),
SIMDE_FLOAT32_C( -662.04), SIMDE_FLOAT32_C( 773.80), SIMDE_FLOAT32_C( -30.49), SIMDE_FLOAT32_C( -143.59) },
{ SIMDE_FLOAT32_C( 0.43), SIMDE_FLOAT32_C( -0.09), SIMDE_FLOAT32_C( 0.25), SIMDE_FLOAT32_C( 0.66),
SIMDE_FLOAT32_C( -0.04), SIMDE_FLOAT32_C( 0.80), SIMDE_FLOAT32_C( -0.49), SIMDE_FLOAT32_C( -0.59) } },
{ { SIMDE_FLOAT32_C( 823.36), SIMDE_FLOAT32_C( -109.71), SIMDE_FLOAT32_C( 234.41), SIMDE_FLOAT32_C( -777.64),
SIMDE_FLOAT32_C( -767.94), SIMDE_FLOAT32_C( 179.54), SIMDE_FLOAT32_C( -285.07), SIMDE_FLOAT32_C( -947.33) },
{ SIMDE_FLOAT32_C( 0.36), SIMDE_FLOAT32_C( -0.71), SIMDE_FLOAT32_C( 0.41), SIMDE_FLOAT32_C( -0.64),
SIMDE_FLOAT32_C( -0.94), SIMDE_FLOAT32_C( 0.54), SIMDE_FLOAT32_C( -0.07), SIMDE_FLOAT32_C( -0.33) } },
{ { SIMDE_FLOAT32_C( 975.95), SIMDE_FLOAT32_C( -909.05), SIMDE_FLOAT32_C( -991.33), SIMDE_FLOAT32_C( -284.04),
SIMDE_FLOAT32_C( -533.98), SIMDE_FLOAT32_C( -158.67), SIMDE_FLOAT32_C( -884.82), SIMDE_FLOAT32_C( -734.86) },
{ SIMDE_FLOAT32_C( 0.95), SIMDE_FLOAT32_C( -0.05), SIMDE_FLOAT32_C( -0.33), SIMDE_FLOAT32_C( -0.04),
SIMDE_FLOAT32_C( -0.98), SIMDE_FLOAT32_C( -0.67), SIMDE_FLOAT32_C( -0.82), SIMDE_FLOAT32_C( -0.86) } },
{ { SIMDE_FLOAT32_C( 387.80), SIMDE_FLOAT32_C( 840.27), SIMDE_FLOAT32_C( -592.09), SIMDE_FLOAT32_C( 772.45),
SIMDE_FLOAT32_C( -51.97), SIMDE_FLOAT32_C( 198.58), SIMDE_FLOAT32_C( 360.09), SIMDE_FLOAT32_C( -598.99) },
{ SIMDE_FLOAT32_C( 0.80), SIMDE_FLOAT32_C( 0.27), SIMDE_FLOAT32_C( -0.09), SIMDE_FLOAT32_C( 0.45),
SIMDE_FLOAT32_C( -0.97), SIMDE_FLOAT32_C( 0.58), SIMDE_FLOAT32_C( 0.09), SIMDE_FLOAT32_C( -0.99) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m256 a = simde_mm256_loadu_ps(test_vec[i].a);
simde__m256 r = simde_mm256_frcz_ps(a);
simde_test_x86_assert_equal_f32x8(r, simde_mm256_loadu_ps(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m256 a = simde_test_x86_random_f32x8(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
simde__m256 r = simde_mm256_frcz_ps(a);
simde_test_x86_write_f32x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f32x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm256_frcz_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float64 a[4];
const simde_float64 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT64_C( -92.32), SIMDE_FLOAT64_C( -119.17), SIMDE_FLOAT64_C( -663.14), SIMDE_FLOAT64_C( 279.09) },
{ SIMDE_FLOAT64_C( -0.32), SIMDE_FLOAT64_C( -0.17), SIMDE_FLOAT64_C( -0.14), SIMDE_FLOAT64_C( 0.09) } },
{ { SIMDE_FLOAT64_C( 211.65), SIMDE_FLOAT64_C( -935.18), SIMDE_FLOAT64_C( 766.59), SIMDE_FLOAT64_C( -764.15) },
{ SIMDE_FLOAT64_C( 0.65), SIMDE_FLOAT64_C( -0.18), SIMDE_FLOAT64_C( 0.59), SIMDE_FLOAT64_C( -0.15) } },
{ { SIMDE_FLOAT64_C( -970.76), SIMDE_FLOAT64_C( -729.00), SIMDE_FLOAT64_C( -996.77), SIMDE_FLOAT64_C( -535.75) },
{ SIMDE_FLOAT64_C( -0.76), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( -0.77), SIMDE_FLOAT64_C( -0.75) } },
{ { SIMDE_FLOAT64_C( -982.91), SIMDE_FLOAT64_C( 823.36), SIMDE_FLOAT64_C( -807.06), SIMDE_FLOAT64_C( 171.42) },
{ SIMDE_FLOAT64_C( -0.91), SIMDE_FLOAT64_C( 0.36), SIMDE_FLOAT64_C( -0.06), SIMDE_FLOAT64_C( 0.42) } },
{ { SIMDE_FLOAT64_C( -382.67), SIMDE_FLOAT64_C( -794.85), SIMDE_FLOAT64_C( 456.89), SIMDE_FLOAT64_C( 280.19) },
{ SIMDE_FLOAT64_C( -0.67), SIMDE_FLOAT64_C( -0.85), SIMDE_FLOAT64_C( 0.89), SIMDE_FLOAT64_C( 0.19) } },
{ { SIMDE_FLOAT64_C( 203.16), SIMDE_FLOAT64_C( 872.13), SIMDE_FLOAT64_C( 702.87), SIMDE_FLOAT64_C( -756.46) },
{ SIMDE_FLOAT64_C( 0.16), SIMDE_FLOAT64_C( 0.13), SIMDE_FLOAT64_C( 0.87), SIMDE_FLOAT64_C( -0.46) } },
{ { SIMDE_FLOAT64_C( -115.21), SIMDE_FLOAT64_C( -916.01), SIMDE_FLOAT64_C( -621.39), SIMDE_FLOAT64_C( 35.68) },
{ SIMDE_FLOAT64_C( -0.21), SIMDE_FLOAT64_C( -0.01), SIMDE_FLOAT64_C( -0.39), SIMDE_FLOAT64_C( 0.68) } },
{ { SIMDE_FLOAT64_C( 788.26), SIMDE_FLOAT64_C( -680.53), SIMDE_FLOAT64_C( -520.92), SIMDE_FLOAT64_C( 379.99) },
{ SIMDE_FLOAT64_C( 0.26), SIMDE_FLOAT64_C( -0.53), SIMDE_FLOAT64_C( -0.92), SIMDE_FLOAT64_C( 0.99) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m256d a = simde_mm256_loadu_pd(test_vec[i].a);
simde__m256d r = simde_mm256_frcz_pd(a);
simde_test_x86_assert_equal_f64x4(r, simde_mm256_loadu_pd(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m256d a = simde_test_x86_random_f64x4(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m256d r = simde_mm256_frcz_pd(a);
simde_test_x86_write_f64x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f64x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddw_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int16_t r[8];
} test_vec[] = {
{ { -INT8_C( 101), INT8_C( 107), -INT8_C( 89), -INT8_C( 33), -INT8_C( 91), INT8_C( 120), INT8_C( 62), INT8_C( 29),
INT8_C( 25), -INT8_C( 49), INT8_C( 91), -INT8_C( 98), INT8_C( 80), INT8_C( 56), INT8_C( 56), -INT8_C( 1) },
{ INT16_C( 6), -INT16_C( 122), INT16_C( 29), INT16_C( 91), -INT16_C( 24), -INT16_C( 7), INT16_C( 136), INT16_C( 55) } },
{ { -INT8_C( 122), -INT8_C( 52), INT8_C( 24), -INT8_C( 56), INT8_C( 48), -INT8_C( 3), INT8_C( 55), -INT8_C( 108),
-INT8_C( 113), -INT8_C( 41), INT8_C( 1), INT8_C( 114), -INT8_C( 122), -INT8_C( 122), -INT8_C( 126), -INT8_C( 118) },
{ -INT16_C( 174), -INT16_C( 32), INT16_C( 45), -INT16_C( 53), -INT16_C( 154), INT16_C( 115), -INT16_C( 244), -INT16_C( 244) } },
{ { -INT8_C( 87), INT8_C( 23), INT8_C( 30), INT8_C( 4), -INT8_C( 106), -INT8_C( 125), -INT8_C( 126), INT8_C( 37),
-INT8_C( 120), -INT8_C( 23), -INT8_C( 38), -INT8_C( 69), INT8_C( 41), INT8_C( 27), INT8_C( 68), -INT8_C( 68) },
{ -INT16_C( 64), INT16_C( 34), -INT16_C( 231), -INT16_C( 89), -INT16_C( 143), -INT16_C( 107), INT16_C( 68), INT16_C( 0) } },
{ { -INT8_C( 88), INT8_C( 92), -INT8_C( 123), INT8_C( 42), INT8_C( 12), INT8_C( 104), -INT8_C( 4), INT8_C( 57),
-INT8_C( 56), -INT8_C( 75), -INT8_C( 44), -INT8_C( 76), -INT8_C( 113), -INT8_C( 7), INT8_C( 125), -INT8_C( 99) },
{ INT16_C( 4), -INT16_C( 81), INT16_C( 116), INT16_C( 53), -INT16_C( 131), -INT16_C( 120), -INT16_C( 120), INT16_C( 26) } },
{ { INT8_C( 105), -INT8_C( 20), INT8_C( 92), INT8_C( 20), INT8_C( 7), INT8_C( 79), -INT8_C( 63), INT8_C( 121),
INT8_C( 83), INT8_C( 45), INT8_C( 26), -INT8_C( 43), INT8_C( 76), INT8_C( 97), INT8_C( 103), INT8_C( 118) },
{ INT16_C( 85), INT16_C( 112), INT16_C( 86), INT16_C( 58), INT16_C( 128), -INT16_C( 17), INT16_C( 173), INT16_C( 221) } },
{ { INT8_C( 17), INT8_C( 88), -INT8_C( 18), -INT8_C( 38), INT8_C( 59), INT8_C( 24), INT8_C( 48), -INT8_C( 49),
INT8_C( 112), -INT8_C( 127), INT8_C( 27), -INT8_C( 41), INT8_C( 54), -INT8_C( 45), -INT8_C( 127), -INT8_C( 47) },
{ INT16_C( 105), -INT16_C( 56), INT16_C( 83), -INT16_C( 1), -INT16_C( 15), -INT16_C( 14), INT16_C( 9), -INT16_C( 174) } },
{ { INT8_C( 4), INT8_C( 113), -INT8_C( 55), -INT8_C( 42), -INT8_C( 97), -INT8_C( 27), -INT8_C( 27), INT8_C( 98),
-INT8_C( 92), INT8_C( 35), -INT8_C( 124), -INT8_C( 76), INT8_C( 96), INT8_C( 18), -INT8_C( 120), INT8_C( 119) },
{ INT16_C( 117), -INT16_C( 97), -INT16_C( 124), INT16_C( 71), -INT16_C( 57), -INT16_C( 200), INT16_C( 114), -INT16_C( 1) } },
{ { -INT8_C( 24), INT8_C( 72), -INT8_C( 70), -INT8_C( 95), INT8_C( 102), INT8_C( 21), -INT8_C( 68), -INT8_C( 100),
-INT8_C( 78), -INT8_C( 60), INT8_C( 64), -INT8_C( 92), INT8_C( 34), INT8_C( 29), INT8_C( 120), INT8_C( 112) },
{ INT16_C( 48), -INT16_C( 165), INT16_C( 123), -INT16_C( 168), -INT16_C( 138), -INT16_C( 28), INT16_C( 63), INT16_C( 232) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddw_epi8(a);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_haddw_epi8(a);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddw_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint16_t r[8];
} test_vec[] = {
{ { UINT8_C(162), UINT8_C( 47), UINT8_C(205), UINT8_C( 20), UINT8_C( 7), UINT8_C( 76), UINT8_C(212), UINT8_C( 38),
UINT8_C(160), UINT8_C( 84), UINT8_C(126), UINT8_C( 31), UINT8_C( 14), UINT8_C( 55), UINT8_C(143), UINT8_C( 5) },
{ UINT16_C( 209), UINT16_C( 225), UINT16_C( 83), UINT16_C( 250), UINT16_C( 244), UINT16_C( 157), UINT16_C( 69), UINT16_C( 148) } },
{ { UINT8_C( 86), UINT8_C(181), UINT8_C( 81), UINT8_C( 71), UINT8_C( 53), UINT8_C(104), UINT8_C(137), UINT8_C(233),
UINT8_C(180), UINT8_C( 5), UINT8_C(170), UINT8_C(224), UINT8_C(251), UINT8_C(223), UINT8_C( 73), UINT8_C(192) },
{ UINT16_C( 267), UINT16_C( 152), UINT16_C( 157), UINT16_C( 370), UINT16_C( 185), UINT16_C( 394), UINT16_C( 474), UINT16_C( 265) } },
{ { UINT8_C(106), UINT8_C(172), UINT8_C(209), UINT8_C(148), UINT8_C(230), UINT8_C(140), UINT8_C(120), UINT8_C( 13),
UINT8_C(113), UINT8_C( 71), UINT8_C(113), UINT8_C(224), UINT8_C(254), UINT8_C(214), UINT8_C( 99), UINT8_C(105) },
{ UINT16_C( 278), UINT16_C( 357), UINT16_C( 370), UINT16_C( 133), UINT16_C( 184), UINT16_C( 337), UINT16_C( 468), UINT16_C( 204) } },
{ { UINT8_C(131), UINT8_C( 38), UINT8_C( 27), UINT8_C(148), UINT8_C( 79), UINT8_C( 24), UINT8_C(126), UINT8_C(253),
UINT8_C(158), UINT8_C(204), UINT8_C(193), UINT8_C( 86), UINT8_C(107), UINT8_C( 31), UINT8_C(220), UINT8_C( 10) },
{ UINT16_C( 169), UINT16_C( 175), UINT16_C( 103), UINT16_C( 379), UINT16_C( 362), UINT16_C( 279), UINT16_C( 138), UINT16_C( 230) } },
{ { UINT8_C(133), UINT8_C(114), UINT8_C( 59), UINT8_C( 31), UINT8_C(229), UINT8_C(174), UINT8_C(183), UINT8_C( 97),
UINT8_C( 63), UINT8_C(132), UINT8_C(198), UINT8_C(189), UINT8_C(215), UINT8_C(250), UINT8_C(238), UINT8_C(235) },
{ UINT16_C( 247), UINT16_C( 90), UINT16_C( 403), UINT16_C( 280), UINT16_C( 195), UINT16_C( 387), UINT16_C( 465), UINT16_C( 473) } },
{ { UINT8_C(150), UINT8_C( 35), UINT8_C(128), UINT8_C( 80), UINT8_C( 93), UINT8_C( 45), UINT8_C(130), UINT8_C( 34),
UINT8_C(153), UINT8_C(162), UINT8_C(237), UINT8_C(205), UINT8_C( 24), UINT8_C(231), UINT8_C( 25), UINT8_C(149) },
{ UINT16_C( 185), UINT16_C( 208), UINT16_C( 138), UINT16_C( 164), UINT16_C( 315), UINT16_C( 442), UINT16_C( 255), UINT16_C( 174) } },
{ { UINT8_C( 27), UINT8_C( 9), UINT8_C(117), UINT8_C(125), UINT8_C(172), UINT8_C(184), UINT8_C(123), UINT8_C(104),
UINT8_C( 49), UINT8_C(148), UINT8_C(227), UINT8_C(127), UINT8_C( 66), UINT8_C(168), UINT8_C( 23), UINT8_C(210) },
{ UINT16_C( 36), UINT16_C( 242), UINT16_C( 356), UINT16_C( 227), UINT16_C( 197), UINT16_C( 354), UINT16_C( 234), UINT16_C( 233) } },
{ { UINT8_C(184), UINT8_C( 52), UINT8_C(232), UINT8_C( 66), UINT8_C( 6), UINT8_C(176), UINT8_C(127), UINT8_C(158),
UINT8_C(205), UINT8_C( 13), UINT8_C(150), UINT8_C( 12), UINT8_C(170), UINT8_C( 62), UINT8_C(232), UINT8_C(171) },
{ UINT16_C( 236), UINT16_C( 298), UINT16_C( 182), UINT16_C( 285), UINT16_C( 218), UINT16_C( 162), UINT16_C( 232), UINT16_C( 403) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddw_epu8(a);
simde_test_x86_assert_equal_u16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_haddw_epu8(a);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddd_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int32_t r[4];
} test_vec[] = {
{ { INT8_C( 83), -INT8_C( 9), -INT8_C( 27), INT8_C( 118), -INT8_C( 30), -INT8_C( 75), -INT8_C( 85), INT8_C( 108),
INT8_C( 112), -INT8_C( 2), INT8_C( 50), -INT8_C( 18), -INT8_C( 26), -INT8_C( 22), -INT8_C( 58), INT8_C( 104) },
{ INT32_C( 165), -INT32_C( 82), INT32_C( 142), -INT32_C( 2) } },
{ { INT8_C( 16), -INT8_C( 30), -INT8_C( 69), INT8_C( 51), -INT8_C( 13), -INT8_C( 88), INT8_C( 92), -INT8_C( 70),
INT8_C( 97), -INT8_C( 105), INT8_C( 36), -INT8_C( 36), -INT8_C( 54), INT8_C( 45), INT8_C( 49), -INT8_C( 110) },
{ -INT32_C( 32), -INT32_C( 79), -INT32_C( 8), -INT32_C( 70) } },
{ { INT8_C( 85), -INT8_C( 58), -INT8_C( 11), -INT8_C( 46), INT8_C( 47), -INT8_C( 86), INT8_C( 47), -INT8_C( 77),
INT8_C( 35), INT8_C( 74), INT8_C( 25), -INT8_C( 47), INT8_C( 108), -INT8_C( 57), -INT8_C( 29), -INT8_C( 13) },
{ -INT32_C( 30), -INT32_C( 69), INT32_C( 87), INT32_C( 9) } },
{ { -INT8_C( 57), -INT8_C( 76), INT8_C( 97), -INT8_C( 21), -INT8_C( 52), INT8_C( 29), INT8_C( 1), -INT8_C( 66),
INT8_C( 125), -INT8_C( 56), -INT8_C( 1), INT8_C( 5), INT8_C( 32), -INT8_C( 70), -INT8_C( 36), -INT8_C( 109) },
{ -INT32_C( 57), -INT32_C( 88), INT32_C( 73), -INT32_C( 183) } },
{ { INT8_C( 74), -INT8_C( 3), INT8_C( 12), INT8_C( 88), INT8_C( 61), -INT8_C( 95), -INT8_C( 17), -INT8_C( 123),
INT8_C( 115), INT8_C( 1), INT8_C( 2), -INT8_C( 15), INT8_C( 123), INT8_C( 72), INT8_C( 87), -INT8_C( 68) },
{ INT32_C( 171), -INT32_C( 174), INT32_C( 103), INT32_C( 214) } },
{ { INT8_C( 4), INT8_C( 51), INT8_C( 66), INT8_C( 50), INT8_C( 56), INT8_C( 24), INT8_C( 86), -INT8_C( 14),
INT8_C( 75), INT8_C( 39), -INT8_C( 113), INT8_C( 79), INT8_C( 83), -INT8_C( 16), -INT8_C( 47), -INT8_C( 10) },
{ INT32_C( 171), INT32_C( 152), INT32_C( 80), INT32_C( 10) } },
{ { INT8_C( 90), INT8_C( 37), -INT8_C( 111), -INT8_C( 47), -INT8_C( 79), -INT8_C( 95), -INT8_C( 46), INT8_C( 44),
-INT8_C( 120), -INT8_C( 86), INT8_C( 84), INT8_C( 23), -INT8_C( 68), INT8_C( 115), INT8_C( 8), INT8_C( 11) },
{ -INT32_C( 31), -INT32_C( 176), -INT32_C( 99), INT32_C( 66) } },
{ { -INT8_C( 16), -INT8_C( 27), -INT8_C( 58), -INT8_C( 48), -INT8_C( 33), -INT8_C( 97), INT8_C( 66), -INT8_C( 99),
-INT8_C( 16), INT8_C( 60), INT8_C( 61), -INT8_C( 126), INT8_C( 12), -INT8_C( 44), -INT8_C( 8), INT8_C( 3) },
{ -INT32_C( 149), -INT32_C( 163), -INT32_C( 21), -INT32_C( 37) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddd_epi8(a);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_haddd_epi8(a);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int32_t r[4];
} test_vec[] = {
{ { -INT16_C( 14932), INT16_C( 1774), -INT16_C( 19658), -INT16_C( 4158), -INT16_C( 12919), INT16_C( 2423), INT16_C( 21206), INT16_C( 10463) },
{ -INT32_C( 13158), -INT32_C( 23816), -INT32_C( 10496), INT32_C( 31669) } },
{ { INT16_C( 21683), -INT16_C( 29610), -INT16_C( 17046), INT16_C( 2480), -INT16_C( 28777), INT16_C( 25967), INT16_C( 28914), INT16_C( 569) },
{ -INT32_C( 7927), -INT32_C( 14566), -INT32_C( 2810), INT32_C( 29483) } },
{ { INT16_C( 25961), -INT16_C( 17270), -INT16_C( 8590), INT16_C( 5543), -INT16_C( 3169), -INT16_C( 28461), -INT16_C( 4750), INT16_C( 23236) },
{ INT32_C( 8691), -INT32_C( 3047), -INT32_C( 31630), INT32_C( 18486) } },
{ { INT16_C( 2164), INT16_C( 12120), INT16_C( 30593), INT16_C( 31877), -INT16_C( 22170), -INT16_C( 15986), -INT16_C( 13394), INT16_C( 14973) },
{ INT32_C( 14284), INT32_C( 62470), -INT32_C( 38156), INT32_C( 1579) } },
{ { -INT16_C( 29000), -INT16_C( 16691), INT16_C( 10765), -INT16_C( 6297), -INT16_C( 23567), INT16_C( 29648), INT16_C( 19000), -INT16_C( 5472) },
{ -INT32_C( 45691), INT32_C( 4468), INT32_C( 6081), INT32_C( 13528) } },
{ { -INT16_C( 30629), -INT16_C( 32458), -INT16_C( 10293), INT16_C( 16298), INT16_C( 4485), INT16_C( 24067), -INT16_C( 4633), -INT16_C( 2902) },
{ -INT32_C( 63087), INT32_C( 6005), INT32_C( 28552), -INT32_C( 7535) } },
{ { -INT16_C( 14654), -INT16_C( 11489), -INT16_C( 24656), -INT16_C( 21013), INT16_C( 26024), INT16_C( 31958), INT16_C( 29647), INT16_C( 8281) },
{ -INT32_C( 26143), -INT32_C( 45669), INT32_C( 57982), INT32_C( 37928) } },
{ { INT16_C( 23697), INT16_C( 19030), -INT16_C( 6927), -INT16_C( 26105), INT16_C( 20253), INT16_C( 1077), -INT16_C( 8378), INT16_C( 30890) },
{ INT32_C( 42727), -INT32_C( 33032), INT32_C( 21330), INT32_C( 22512) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i r = simde_mm_haddd_epi16(a);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_haddd_epi16(a);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddd_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint32_t r[4];
} test_vec[] = {
{ { UINT8_C(174), UINT8_C(152), UINT8_C(232), UINT8_C(194), UINT8_C( 3), UINT8_C( 70), UINT8_C( 27), UINT8_C(175),
UINT8_C(235), UINT8_C(193), UINT8_C( 77), UINT8_C(113), UINT8_C(224), UINT8_C(112), UINT8_C(217), UINT8_C( 68) },
{ UINT32_C( 752), UINT32_C( 275), UINT32_C( 618), UINT32_C( 621) } },
{ { UINT8_C( 62), UINT8_C( 12), UINT8_C( 34), UINT8_C( 82), UINT8_C(154), UINT8_C(166), UINT8_C(132), UINT8_C(212),
UINT8_C( 86), UINT8_C(236), UINT8_C(139), UINT8_C(123), UINT8_C(114), UINT8_C(168), UINT8_C( 99), UINT8_C( 14) },
{ UINT32_C( 190), UINT32_C( 664), UINT32_C( 584), UINT32_C( 395) } },
{ { UINT8_C(165), UINT8_C(137), UINT8_C(144), UINT8_C( 84), UINT8_C(173), UINT8_C( 38), UINT8_C(223), UINT8_C( 52),
UINT8_C(227), UINT8_C( 64), UINT8_C(157), UINT8_C( 27), UINT8_C( 18), UINT8_C( 71), UINT8_C( 6), UINT8_C(158) },
{ UINT32_C( 530), UINT32_C( 486), UINT32_C( 475), UINT32_C( 253) } },
{ { UINT8_C(137), UINT8_C( 32), UINT8_C( 0), UINT8_C( 97), UINT8_C(111), UINT8_C( 38), UINT8_C( 10), UINT8_C( 55),
UINT8_C( 87), UINT8_C(111), UINT8_C(111), UINT8_C(138), UINT8_C( 20), UINT8_C( 80), UINT8_C(191), UINT8_C(254) },
{ UINT32_C( 266), UINT32_C( 214), UINT32_C( 447), UINT32_C( 545) } },
{ { UINT8_C(207), UINT8_C( 35), UINT8_C(127), UINT8_C( 81), UINT8_C( 87), UINT8_C( 71), UINT8_C( 32), UINT8_C(134),
UINT8_C(183), UINT8_C(105), UINT8_C( 46), UINT8_C( 66), UINT8_C( 14), UINT8_C( 2), UINT8_C(202), UINT8_C(118) },
{ UINT32_C( 450), UINT32_C( 324), UINT32_C( 400), UINT32_C( 336) } },
{ { UINT8_C(155), UINT8_C( 33), UINT8_C( 90), UINT8_C( 62), UINT8_C( 24), UINT8_C(107), UINT8_C(127), UINT8_C( 9),
UINT8_C( 73), UINT8_C( 96), UINT8_C( 72), UINT8_C(251), UINT8_C(212), UINT8_C(224), UINT8_C(165), UINT8_C(143) },
{ UINT32_C( 340), UINT32_C( 267), UINT32_C( 492), UINT32_C( 744) } },
{ { UINT8_C( 83), UINT8_C(237), UINT8_C( 30), UINT8_C(129), UINT8_C(168), UINT8_C(178), UINT8_C(196), UINT8_C(235),
UINT8_C(144), UINT8_C(196), UINT8_C(104), UINT8_C(174), UINT8_C(124), UINT8_C(169), UINT8_C( 12), UINT8_C( 19) },
{ UINT32_C( 479), UINT32_C( 777), UINT32_C( 618), UINT32_C( 324) } },
{ { UINT8_C(156), UINT8_C(151), UINT8_C(151), UINT8_C(178), UINT8_C( 60), UINT8_C(125), UINT8_C(205), UINT8_C(147),
UINT8_C( 83), UINT8_C( 72), UINT8_C(125), UINT8_C(148), UINT8_C( 89), UINT8_C( 95), UINT8_C(252), UINT8_C( 10) },
{ UINT32_C( 636), UINT32_C( 537), UINT32_C( 428), UINT32_C( 446) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddd_epu8(a);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_haddd_epu8(a);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddd_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint32_t r[4];
} test_vec[] = {
{ { UINT16_C(28506), UINT16_C(43987), UINT16_C(28233), UINT16_C(44213), UINT16_C(55958), UINT16_C( 9908), UINT16_C(16898), UINT16_C(48820) },
{ UINT32_C( 72493), UINT32_C( 72446), UINT32_C( 65866), UINT32_C( 65718) } },
{ { UINT16_C( 2227), UINT16_C(34079), UINT16_C(25987), UINT16_C( 7642), UINT16_C(44446), UINT16_C( 7800), UINT16_C(54604), UINT16_C(47022) },
{ UINT32_C( 36306), UINT32_C( 33629), UINT32_C( 52246), UINT32_C( 101626) } },
{ { UINT16_C(12811), UINT16_C(39175), UINT16_C(33761), UINT16_C( 4313), UINT16_C(13040), UINT16_C(29560), UINT16_C(55115), UINT16_C(49065) },
{ UINT32_C( 51986), UINT32_C( 38074), UINT32_C( 42600), UINT32_C( 104180) } },
{ { UINT16_C(65032), UINT16_C(32602), UINT16_C(10903), UINT16_C(61328), UINT16_C( 6738), UINT16_C(24736), UINT16_C(19028), UINT16_C(56994) },
{ UINT32_C( 97634), UINT32_C( 72231), UINT32_C( 31474), UINT32_C( 76022) } },
{ { UINT16_C(48527), UINT16_C( 4387), UINT16_C(64025), UINT16_C(24858), UINT16_C(21959), UINT16_C(23837), UINT16_C(28669), UINT16_C(24277) },
{ UINT32_C( 52914), UINT32_C( 88883), UINT32_C( 45796), UINT32_C( 52946) } },
{ { UINT16_C( 196), UINT16_C(26544), UINT16_C(54301), UINT16_C(20693), UINT16_C( 5270), UINT16_C( 9309), UINT16_C(50970), UINT16_C(51136) },
{ UINT32_C( 26740), UINT32_C( 74994), UINT32_C( 14579), UINT32_C( 102106) } },
{ { UINT16_C(38925), UINT16_C(56461), UINT16_C(55961), UINT16_C(58719), UINT16_C(51522), UINT16_C(44044), UINT16_C( 5057), UINT16_C(58143) },
{ UINT32_C( 95386), UINT32_C( 114680), UINT32_C( 95566), UINT32_C( 63200) } },
{ { UINT16_C(38671), UINT16_C( 1929), UINT16_C(27840), UINT16_C(35475), UINT16_C( 9618), UINT16_C(12311), UINT16_C(21318), UINT16_C(47856) },
{ UINT32_C( 40600), UINT32_C( 63315), UINT32_C( 21929), UINT32_C( 69174) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i r = simde_mm_haddd_epu16(a);
simde_test_x86_assert_equal_u32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_haddd_epu16(a);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int64_t r[2];
} test_vec[] = {
{ { -INT8_C( 82), INT8_C( 76), -INT8_C( 81), -INT8_C( 62), INT8_C( 8), INT8_C( 43), -INT8_C( 113), -INT8_C( 26),
-INT8_C( 118), INT8_C( 24), -INT8_C( 84), INT8_C( 40), INT8_C( 62), -INT8_C( 54), INT8_C( 111), -INT8_C( 107) },
{ -INT64_C( 237), -INT64_C( 126) } },
{ { INT8_C( 16), INT8_C( 73), INT8_C( 77), INT8_C( 37), INT8_C( 38), -INT8_C( 7), -INT8_C( 79), -INT8_C( 29),
INT8_C( 111), -INT8_C( 44), INT8_C( 54), INT8_C( 77), INT8_MAX, -INT8_C( 9), INT8_C( 26), -INT8_C( 2) },
{ INT64_C( 126), INT64_C( 340) } },
{ { -INT8_C( 102), INT8_C( 96), -INT8_C( 16), -INT8_C( 118), INT8_C( 14), -INT8_C( 10), -INT8_C( 108), -INT8_C( 86),
-INT8_C( 58), -INT8_C( 55), INT8_C( 100), -INT8_C( 103), INT8_C( 29), -INT8_C( 100), -INT8_C( 83), -INT8_C( 67) },
{ -INT64_C( 330), -INT64_C( 337) } },
{ { -INT8_C( 16), -INT8_C( 95), INT8_C( 100), -INT8_C( 118), -INT8_C( 9), -INT8_C( 125), INT8_C( 23), -INT8_C( 92),
INT8_C( 85), -INT8_C( 87), INT8_C( 34), INT8_C( 67), INT8_C( 109), -INT8_C( 70), INT8_C( 38), -INT8_C( 36) },
{ -INT64_C( 332), INT64_C( 140) } },
{ { -INT8_C( 8), INT8_C( 92), -INT8_C( 73), -INT8_C( 2), INT8_C( 84), INT8_C( 66), INT8_C( 85), INT8_C( 122),
INT8_C( 31), INT8_C( 101), -INT8_C( 98), -INT8_C( 58), INT8_C( 5), -INT8_C( 111), -INT8_C( 63), -INT8_C( 93) },
{ INT64_C( 366), -INT64_C( 286) } },
{ { -INT8_C( 42), INT8_C( 36), INT8_C( 54), -INT8_C( 2), -INT8_C( 36), INT8_C( 19), -INT8_C( 83), INT8_C( 20),
INT8_C( 107), INT8_C( 45), INT8_C( 68), -INT8_C( 38), -INT8_C( 71), -INT8_C( 92), -INT8_C( 4), -INT8_C( 100) },
{ -INT64_C( 34), -INT64_C( 85) } },
{ { -INT8_C( 16), -INT8_C( 55), INT8_C( 110), -INT8_C( 28), -INT8_C( 126), INT8_C( 23), -INT8_C( 70), -INT8_C( 99),
-INT8_C( 67), INT8_C( 115), -INT8_C( 63), INT8_C( 120), -INT8_C( 97), -INT8_C( 78), -INT8_C( 108), -INT8_C( 113) },
{ -INT64_C( 261), -INT64_C( 291) } },
{ { -INT8_C( 21), INT8_C( 92), INT8_C( 43), INT8_C( 73), INT8_C( 124), -INT8_C( 81), INT8_C( 91), INT8_C( 125),
-INT8_C( 38), -INT8_C( 25), INT8_C( 2), -INT8_C( 38), INT8_C( 11), -INT8_C( 67), -INT8_C( 123), -INT8_C( 122) },
{ INT64_C( 446), -INT64_C( 400) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epi8(a);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_haddq_epi8(a);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int64_t r[2];
} test_vec[] = {
{ { INT16_C( 11948), INT16_C( 1404), INT16_C( 32064), INT16_C( 23979), INT16_C( 31687), INT16_C( 30517), INT16_C( 1683), -INT16_C( 14068) },
{ INT64_C( 69395), INT64_C( 49819) } },
{ { -INT16_C( 12201), INT16_C( 12972), INT16_C( 25217), INT16_C( 9481), INT16_C( 24777), INT16_C( 2757), INT16_C( 3594), -INT16_C( 7769) },
{ INT64_C( 35469), INT64_C( 23359) } },
{ { INT16_C( 4945), INT16_C( 10569), INT16_C( 32052), INT16_C( 16), INT16_C( 1638), -INT16_C( 29855), -INT16_C( 27256), -INT16_C( 26606) },
{ INT64_C( 47582), -INT64_C( 82079) } },
{ { INT16_C( 2113), -INT16_C( 32225), INT16_C( 12688), INT16_C( 21919), INT16_C( 7777), INT16_C( 13302), -INT16_C( 24993), -INT16_C( 2229) },
{ INT64_C( 4495), -INT64_C( 6143) } },
{ { INT16_C( 10), INT16_C( 5949), INT16_C( 7689), -INT16_C( 12335), -INT16_C( 25663), INT16_C( 31919), INT16_C( 26662), INT16_C( 18063) },
{ INT64_C( 1313), INT64_C( 50981) } },
{ { -INT16_C( 29231), INT16_C( 494), INT16_C( 9812), INT16_C( 21765), -INT16_C( 21558), INT16_C( 7675), INT16_C( 30130), INT16_C( 3674) },
{ INT64_C( 2840), INT64_C( 19921) } },
{ { INT16_C( 32509), -INT16_C( 26176), INT16_C( 26981), INT16_C( 4823), -INT16_C( 15871), INT16_C( 4486), -INT16_C( 31210), INT16_C( 6505) },
{ INT64_C( 38137), -INT64_C( 36090) } },
{ { -INT16_C( 6607), INT16_C( 30591), INT16_C( 18546), INT16_C( 27939), -INT16_C( 28885), -INT16_C( 28610), -INT16_C( 25430), INT16_C( 28602) },
{ INT64_C( 70469), -INT64_C( 54323) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epi16(a);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_haddq_epi16(a);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int64_t r[2];
} test_vec[] = {
{ { INT32_C( 1966740562), INT32_C( 285762801), INT32_C( 323879757), INT32_C( 1519056640) },
{ INT64_C( 2252503363), INT64_C( 1842936397) } },
{ { -INT32_C( 1405314170), -INT32_C( 438198379), INT32_C( 1411731628), INT32_C( 1649744623) },
{ -INT64_C( 1843512549), INT64_C( 3061476251) } },
{ { INT32_C( 1947421490), INT32_C( 323819860), INT32_C( 1265690574), INT32_C( 1356383371) },
{ INT64_C( 2271241350), INT64_C( 2622073945) } },
{ { INT32_C( 1754019323), INT32_C( 69743715), INT32_C( 807041143), INT32_C( 772929322) },
{ INT64_C( 1823763038), INT64_C( 1579970465) } },
{ { INT32_C( 1588832965), INT32_C( 1653575734), INT32_C( 2119366059), INT32_C( 1161688160) },
{ INT64_C( 3242408699), INT64_C( 3281054219) } },
{ { INT32_C( 1926642613), INT32_C( 350097028), -INT32_C( 293302351), INT32_C( 500710403) },
{ INT64_C( 2276739641), INT64_C( 207408052) } },
{ { -INT32_C( 75318990), INT32_C( 1152700481), INT32_C( 2002630157), INT32_C( 2141228839) },
{ INT64_C( 1077381491), INT64_C( 4143858996) } },
{ { -INT32_C( 1820052001), INT32_C( 1542272417), INT32_C( 1422596997), INT32_C( 1972498465) },
{ -INT64_C( 277779584), INT64_C( 3395095462) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epi32(a);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_haddq_epi32(a);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epu8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint8_t a[16];
const uint64_t r[2];
} test_vec[] = {
{ { UINT8_C(162), UINT8_C( 0), UINT8_C(233), UINT8_C( 19), UINT8_C( 27), UINT8_C(225), UINT8_C(165), UINT8_C( 2),
UINT8_C( 28), UINT8_C(176), UINT8_C(249), UINT8_C(253), UINT8_C(135), UINT8_C(158), UINT8_C(232), UINT8_C( 71) },
{ UINT64_C( 833), UINT64_C( 1302) } },
{ { UINT8_C(159), UINT8_C(171), UINT8_C(253), UINT8_C(147), UINT8_C( 98), UINT8_C(178), UINT8_C( 59), UINT8_C( 34),
UINT8_C( 25), UINT8_C(166), UINT8_C( 86), UINT8_C( 43), UINT8_C( 45), UINT8_C( 27), UINT8_C( 36), UINT8_C(127) },
{ UINT64_C( 1099), UINT64_C( 555) } },
{ { UINT8_C( 60), UINT8_C( 8), UINT8_C( 78), UINT8_C(109), UINT8_C(108), UINT8_C(203), UINT8_C( 75), UINT8_C(227),
UINT8_MAX, UINT8_C(109), UINT8_C(143), UINT8_C(215), UINT8_C( 40), UINT8_C( 40), UINT8_MAX, UINT8_C(229) },
{ UINT64_C( 868), UINT64_C( 1286) } },
{ { UINT8_C( 29), UINT8_C( 38), UINT8_C(169), UINT8_C( 58), UINT8_C(110), UINT8_C(140), UINT8_C(178), UINT8_C(176),
UINT8_C(149), UINT8_C(183), UINT8_C(143), UINT8_C( 58), UINT8_C(206), UINT8_C(197), UINT8_C(120), UINT8_C(131) },
{ UINT64_C( 898), UINT64_C( 1187) } },
{ { UINT8_C( 41), UINT8_C( 88), UINT8_C( 26), UINT8_C(210), UINT8_C(221), UINT8_C(150), UINT8_C(141), UINT8_C( 49),
UINT8_C(223), UINT8_C(117), UINT8_C(133), UINT8_C(206), UINT8_C(179), UINT8_C( 53), UINT8_C(204), UINT8_C(161) },
{ UINT64_C( 926), UINT64_C( 1276) } },
{ { UINT8_C(131), UINT8_C( 46), UINT8_C(240), UINT8_C( 79), UINT8_C(110), UINT8_C(203), UINT8_C( 57), UINT8_C( 79),
UINT8_C( 34), UINT8_C(215), UINT8_C(221), UINT8_C( 75), UINT8_C(173), UINT8_C(247), UINT8_C(119), UINT8_C(201) },
{ UINT64_C( 945), UINT64_C( 1285) } },
{ { UINT8_C(144), UINT8_C(120), UINT8_C(182), UINT8_C( 10), UINT8_C( 21), UINT8_C( 75), UINT8_C( 82), UINT8_C( 50),
UINT8_C(227), UINT8_C( 78), UINT8_C( 69), UINT8_C(170), UINT8_C(208), UINT8_C(206), UINT8_C( 55), UINT8_C(195) },
{ UINT64_C( 684), UINT64_C( 1208) } },
{ { UINT8_C(246), UINT8_C( 73), UINT8_C( 58), UINT8_C(156), UINT8_C( 9), UINT8_C(120), UINT8_C(183), UINT8_C( 69),
UINT8_C(232), UINT8_C(140), UINT8_C(168), UINT8_C( 36), UINT8_C(113), UINT8_C(185), UINT8_C( 8), UINT8_C(152) },
{ UINT64_C( 914), UINT64_C( 1034) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epu8(a);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u8x16();
simde__m128i r = simde_mm_haddq_epu8(a);
simde_test_x86_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epu16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint16_t a[8];
const uint64_t r[2];
} test_vec[] = {
{ { UINT16_C(61850), UINT16_C(56712), UINT16_C(62141), UINT16_C(12420), UINT16_C(33332), UINT16_C(13109), UINT16_C(63782), UINT16_C(37416) },
{ UINT64_C( 193123), UINT64_C( 147639) } },
{ { UINT16_C( 416), UINT16_C(59375), UINT16_C(39656), UINT16_C(56086), UINT16_C(24846), UINT16_C(36441), UINT16_C( 4547), UINT16_C(14867) },
{ UINT64_C( 155533), UINT64_C( 80701) } },
{ { UINT16_C(19054), UINT16_C( 5114), UINT16_C(37245), UINT16_C(28938), UINT16_C(39417), UINT16_C(12479), UINT16_C(49246), UINT16_C(22407) },
{ UINT64_C( 90351), UINT64_C( 123549) } },
{ { UINT16_C(56745), UINT16_C(63863), UINT16_C(14770), UINT16_C(22845), UINT16_C(56252), UINT16_C(20822), UINT16_C( 2379), UINT16_C(62849) },
{ UINT64_C( 158223), UINT64_C( 142302) } },
{ { UINT16_C( 2870), UINT16_C(29555), UINT16_C(13052), UINT16_C(16076), UINT16_C( 6491), UINT16_C(27466), UINT16_C(11039), UINT16_C(23356) },
{ UINT64_C( 61553), UINT64_C( 68352) } },
{ { UINT16_C(25913), UINT16_C(39482), UINT16_C(23824), UINT16_C( 1812), UINT16_C(33820), UINT16_C(13576), UINT16_C(43184), UINT16_C( 4664) },
{ UINT64_C( 91031), UINT64_C( 95244) } },
{ { UINT16_C(48407), UINT16_C(50779), UINT16_C(56547), UINT16_C(57010), UINT16_C(35970), UINT16_C(43581), UINT16_C(16658), UINT16_C(58160) },
{ UINT64_C( 212743), UINT64_C( 154369) } },
{ { UINT16_C( 8822), UINT16_C(37281), UINT16_C( 4010), UINT16_C(11395), UINT16_C(58195), UINT16_C( 727), UINT16_C(63131), UINT16_C(55329) },
{ UINT64_C( 61508), UINT64_C( 177382) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epu16(a);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u16x8();
simde__m128i r = simde_mm_haddq_epu16(a);
simde_test_x86_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_haddq_epu32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const uint32_t a[4];
const uint64_t r[2];
} test_vec[] = {
{ { UINT32_C(3558467387), UINT32_C(2611255513), UINT32_C(3053615509), UINT32_C( 977865439) },
{ UINT64_C( 6169722900), UINT64_C( 4031480948) } },
{ { UINT32_C(2819791755), UINT32_C( 309483047), UINT32_C(2133622924), UINT32_C(2435120307) },
{ UINT64_C( 3129274802), UINT64_C( 4568743231) } },
{ { UINT32_C(1696010698), UINT32_C(3146411399), UINT32_C(1459644861), UINT32_C(2809171501) },
{ UINT64_C( 4842422097), UINT64_C( 4268816362) } },
{ { UINT32_C(2784385182), UINT32_C(4291377968), UINT32_C(1970136301), UINT32_C(2200617377) },
{ UINT64_C( 7075763150), UINT64_C( 4170753678) } },
{ { UINT32_C(1102889963), UINT32_C(2269930389), UINT32_C(1419764513), UINT32_C(1905186468) },
{ UINT64_C( 3372820352), UINT64_C( 3324950981) } },
{ { UINT32_C(1370940120), UINT32_C(1014023532), UINT32_C(2902759070), UINT32_C(4162407692) },
{ UINT64_C( 2384963652), UINT64_C( 7065166762) } },
{ { UINT32_C( 795903687), UINT32_C(1204978346), UINT32_C(2001170410), UINT32_C(3783911917) },
{ UINT64_C( 2000882033), UINT64_C( 5785082327) } },
{ { UINT32_C(1958264928), UINT32_C( 290454660), UINT32_C(3965132488), UINT32_C( 920365469) },
{ UINT64_C( 2248719588), UINT64_C( 4885497957) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i r = simde_mm_haddq_epu32(a);
simde_test_x86_assert_equal_u64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_u32x4();
simde__m128i r = simde_mm_haddq_epu32(a);
simde_test_x86_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_hsubw_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int16_t r[8];
} test_vec[] = {
{ { -INT8_C( 122), -INT8_C( 31), -INT8_C( 101), -INT8_C( 7), INT8_C( 110), -INT8_C( 45), INT8_C( 4), INT8_C( 67),
INT8_C( 63), -INT8_C( 107), INT8_C( 96), -INT8_C( 122), -INT8_C( 80), -INT8_C( 49), INT8_C( 75), INT8_C( 63) },
{ -INT16_C( 91), -INT16_C( 94), INT16_C( 155), -INT16_C( 63), INT16_C( 170), INT16_C( 218), -INT16_C( 31), INT16_C( 12) } },
{ { INT8_C( 95), INT8_C( 122), INT8_C( 102), -INT8_C( 42), INT8_C( 31), -INT8_C( 24), INT8_C( 79), -INT8_C( 59),
-INT8_C( 109), INT8_C( 5), -INT8_C( 48), -INT8_C( 3), -INT8_C( 4), -INT8_C( 36), INT8_C( 86), -INT8_C( 123) },
{ -INT16_C( 27), INT16_C( 144), INT16_C( 55), INT16_C( 138), -INT16_C( 114), -INT16_C( 45), INT16_C( 32), INT16_C( 209) } },
{ { INT8_C( 79), INT8_C( 93), -INT8_C( 91), INT8_C( 101), -INT8_C( 117), INT8_C( 93), -INT8_C( 53), -INT8_C( 62),
INT8_C( 73), -INT8_C( 34), INT8_C( 82), INT8_C( 74), -INT8_C( 108), -INT8_C( 111), -INT8_C( 70), -INT8_C( 45) },
{ -INT16_C( 14), -INT16_C( 192), -INT16_C( 210), INT16_C( 9), INT16_C( 107), INT16_C( 8), INT16_C( 3), -INT16_C( 25) } },
{ { -INT8_C( 4), -INT8_C( 103), INT8_C( 39), INT8_C( 62), -INT8_C( 26), -INT8_C( 110), INT8_C( 86), -INT8_C( 94),
INT8_C( 38), -INT8_C( 46), -INT8_C( 43), -INT8_C( 89), -INT8_C( 48), -INT8_C( 18), INT8_C( 116), INT8_C( 47) },
{ INT16_C( 99), -INT16_C( 23), INT16_C( 84), INT16_C( 180), INT16_C( 84), INT16_C( 46), -INT16_C( 30), INT16_C( 69) } },
{ { INT8_C( 74), INT8_MIN, -INT8_C( 9), INT8_C( 60), -INT8_C( 90), INT8_C( 40), INT8_C( 13), INT8_C( 14),
INT8_C( 47), -INT8_C( 47), -INT8_C( 122), -INT8_C( 117), INT8_C( 66), INT8_C( 54), -INT8_C( 64), -INT8_C( 28) },
{ INT16_C( 202), -INT16_C( 69), -INT16_C( 130), -INT16_C( 1), INT16_C( 94), -INT16_C( 5), INT16_C( 12), -INT16_C( 36) } },
{ { INT8_C( 96), -INT8_C( 92), INT8_C( 98), INT8_C( 118), INT8_MIN, INT8_C( 1), INT8_C( 77), -INT8_C( 18),
-INT8_C( 86), INT8_C( 13), -INT8_C( 48), -INT8_C( 79), -INT8_C( 63), -INT8_C( 24), INT8_C( 27), INT8_C( 123) },
{ INT16_C( 188), -INT16_C( 20), -INT16_C( 129), INT16_C( 95), -INT16_C( 99), INT16_C( 31), -INT16_C( 39), -INT16_C( 96) } },
{ { -INT8_C( 95), -INT8_C( 43), -INT8_C( 9), INT8_C( 69), INT8_C( 106), INT8_C( 61), -INT8_C( 76), INT8_C( 109),
INT8_C( 26), -INT8_C( 9), INT8_C( 98), INT8_C( 17), INT8_C( 98), -INT8_C( 58), INT8_C( 68), -INT8_C( 69) },
{ -INT16_C( 52), -INT16_C( 78), INT16_C( 45), -INT16_C( 185), INT16_C( 35), INT16_C( 81), INT16_C( 156), INT16_C( 137) } },
{ { -INT8_C( 78), INT8_C( 35), -INT8_C( 127), INT8_C( 68), -INT8_C( 105), INT8_C( 61), INT8_C( 29), -INT8_C( 14),
INT8_C( 70), INT8_C( 63), INT8_C( 40), -INT8_C( 28), INT8_C( 121), -INT8_C( 47), INT8_C( 53), -INT8_C( 80) },
{ -INT16_C( 113), -INT16_C( 195), -INT16_C( 166), INT16_C( 43), INT16_C( 7), INT16_C( 68), INT16_C( 168), INT16_C( 133) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i r = simde_mm_hsubw_epi8(a);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_hsubw_epi8(a);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_hsubd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int32_t r[4];
} test_vec[] = {
{ { -INT16_C( 7815), INT16_C( 18958), -INT16_C( 23684), INT16_C( 10406), -INT16_C( 10702), -INT16_C( 23729), INT16_C( 19099), -INT16_C( 24275) },
{ -INT32_C( 26773), -INT32_C( 34090), INT32_C( 13027), INT32_C( 43374) } },
{ { -INT16_C( 24805), INT16_C( 29163), INT16_C( 20432), -INT16_C( 2388), -INT16_C( 4317), INT16_C( 2117), -INT16_C( 20067), INT16_C( 6057) },
{ -INT32_C( 53968), INT32_C( 22820), -INT32_C( 6434), -INT32_C( 26124) } },
{ { INT16_C( 12029), INT16_C( 4516), INT16_C( 25223), -INT16_C( 31027), -INT16_C( 1890), INT16_C( 2998), -INT16_C( 14187), -INT16_C( 9115) },
{ INT32_C( 7513), INT32_C( 56250), -INT32_C( 4888), -INT32_C( 5072) } },
{ { -INT16_C( 24637), -INT16_C( 15096), INT16_C( 16085), INT16_C( 17124), -INT16_C( 23192), -INT16_C( 6769), -INT16_C( 28200), -INT16_C( 1953) },
{ -INT32_C( 9541), -INT32_C( 1039), -INT32_C( 16423), -INT32_C( 26247) } },
{ { INT16_C( 17234), INT16_C( 25634), -INT16_C( 31951), -INT16_C( 12017), -INT16_C( 6777), INT16_C( 4093), INT16_C( 19449), -INT16_C( 19245) },
{ -INT32_C( 8400), -INT32_C( 19934), -INT32_C( 10870), INT32_C( 38694) } },
{ { -INT16_C( 21551), INT16_C( 1856), INT16_C( 4686), INT16_C( 7596), -INT16_C( 5826), INT16_C( 17006), INT16_C( 30927), -INT16_C( 25793) },
{ -INT32_C( 23407), -INT32_C( 2910), -INT32_C( 22832), INT32_C( 56720) } },
{ { -INT16_C( 22365), INT16_C( 2542), INT16_C( 3362), INT16_C( 20310), INT16_C( 8980), INT16_C( 30862), -INT16_C( 10129), INT16_C( 29535) },
{ -INT32_C( 24907), -INT32_C( 16948), -INT32_C( 21882), -INT32_C( 39664) } },
{ { INT16_C( 19309), INT16_C( 507), -INT16_C( 11038), -INT16_C( 11797), INT16_C( 17613), -INT16_C( 6070), INT16_C( 28205), INT16_C( 18225) },
{ INT32_C( 18802), INT32_C( 759), INT32_C( 23683), INT32_C( 9980) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i r = simde_mm_hsubd_epi16(a);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_hsubd_epi16(a);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_hsubq_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int64_t r[2];
} test_vec[] = {
{ { -INT32_C( 931994090), INT32_C( 1250494467), INT32_C( 231685230), INT32_C( 1609660830) },
{ -INT64_C( 2182488557), -INT64_C( 1377975600) } },
{ { INT32_C( 2040596673), -INT32_C( 1534358726), -INT32_C( 1601487556), INT32_C( 1159560088) },
{ INT64_C( 3574955399), -INT64_C( 2761047644) } },
{ { INT32_C( 1796572371), INT32_C( 143687036), -INT32_C( 1742030660), -INT32_C( 1032768209) },
{ INT64_C( 1652885335), -INT64_C( 709262451) } },
{ { INT32_C( 949643762), -INT32_C( 546095106), INT32_C( 815357364), -INT32_C( 554981192) },
{ INT64_C( 1495738868), INT64_C( 1370338556) } },
{ { -INT32_C( 1203893757), -INT32_C( 766282956), -INT32_C( 553247449), -INT32_C( 490269239) },
{ -INT64_C( 437610801), -INT64_C( 62978210) } },
{ { INT32_C( 105838379), -INT32_C( 913573675), INT32_C( 1625041500), INT32_C( 1468267575) },
{ INT64_C( 1019412054), INT64_C( 156773925) } },
{ { INT32_C( 2035744974), -INT32_C( 273026348), -INT32_C( 1395984937), INT32_C( 148643605) },
{ INT64_C( 2308771322), -INT64_C( 1544628542) } },
{ { -INT32_C( 1440335726), -INT32_C( 1396981913), -INT32_C( 88265123), -INT32_C( 70418246) },
{ -INT64_C( 43353813), -INT64_C( 17846877) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i r = simde_mm_hsubq_epi32(a);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_hsubq_epi32(a);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_macc_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t c[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 4261), INT16_C( 29895), INT16_C( 515), -INT16_C( 22100), -INT16_C( 14349), -INT16_C( 14880), INT16_C( 23995), INT16_C( 31638) },
{ -INT16_C( 18865), -INT16_C( 4472), -INT16_C( 25763), -INT16_C( 12565), -INT16_C( 3618), -INT16_C( 15198), INT16_C( 15084), INT16_C( 4530) },
{ INT16_C( 24531), INT16_C( 29430), -INT16_C( 21398), INT16_C( 17940), INT16_C( 7332), -INT16_C( 3409), -INT16_C( 10398), -INT16_C( 31266) },
{ -INT16_C( 4376), INT16_C( 32430), INT16_C( 14465), INT16_C( 28408), INT16_C( 17502), -INT16_C( 21905), -INT16_C( 25146), INT16_C( 27178) } },
{ { -INT16_C( 1653), -INT16_C( 26403), -INT16_C( 27297), INT16_C( 30979), -INT16_C( 1528), -INT16_C( 30476), INT16_C( 13426), -INT16_C( 8168) },
{ -INT16_C( 10659), INT16_C( 14924), -INT16_C( 2127), INT16_C( 4055), INT16_C( 31505), -INT16_C( 609), -INT16_C( 27470), INT16_C( 27805) },
{ -INT16_C( 30866), INT16_C( 29070), -INT16_C( 19436), -INT16_C( 3093), -INT16_C( 12029), INT16_C( 3100), INT16_C( 30455), -INT16_C( 19991) },
{ INT16_C( 24813), -INT16_C( 6870), -INT16_C( 23613), -INT16_C( 15760), INT16_C( 17291), INT16_C( 16296), -INT16_C( 10693), INT16_C( 16545) } },
{ { -INT16_C( 8670), -INT16_C( 27087), -INT16_C( 4993), INT16_C( 19678), INT16_C( 27747), -INT16_C( 21480), -INT16_C( 25515), INT16_C( 31161) },
{ -INT16_C( 5601), INT16_C( 16641), INT16_C( 37), -INT16_C( 31604), -INT16_C( 266), INT16_C( 6528), INT16_C( 1569), -INT16_C( 13301) },
{ -INT16_C( 438), INT16_C( 19469), -INT16_C( 28292), INT16_C( 17681), INT16_C( 30657), -INT16_C( 13950), -INT16_C( 2064), -INT16_C( 3044) },
{ -INT16_C( 1944), INT16_C( 21310), -INT16_C( 16425), -INT16_C( 14727), -INT16_C( 10013), INT16_C( 11650), INT16_C( 7397), -INT16_C( 25841) } },
{ { -INT16_C( 21817), -INT16_C( 12128), -INT16_C( 32455), INT16_C( 30412), INT16_C( 2313), INT16_C( 30346), -INT16_C( 4456), INT16_C( 31080) },
{ -INT16_C( 16388), INT16_C( 9544), -INT16_C( 4015), INT16_C( 16728), INT16_C( 9556), INT16_C( 6725), -INT16_C( 20946), INT16_C( 9644) },
{ INT16_C( 19853), -INT16_C( 6702), INT16_C( 16633), INT16_C( 3988), INT16_C( 31590), -INT16_C( 4703), INT16_C( 13829), INT16_C( 230) },
{ -INT16_C( 7567), -INT16_C( 19758), -INT16_C( 27646), -INT16_C( 20044), -INT16_C( 16550), -INT16_C( 6957), INT16_C( 25941), -INT16_C( 25914) } },
{ { -INT16_C( 22688), -INT16_C( 5814), INT16_C( 4518), -INT16_C( 30052), -INT16_C( 701), INT16_C( 26825), -INT16_C( 14412), INT16_C( 21331) },
{ INT16_C( 23962), INT16_C( 19198), INT16_C( 17421), -INT16_C( 26163), -INT16_C( 9166), INT16_C( 17452), -INT16_C( 7152), -INT16_C( 22417) },
{ INT16_C( 16543), INT16_C( 24699), -INT16_C( 1502), INT16_C( 26307), -INT16_C( 30537), INT16_C( 31351), INT16_C( 19757), -INT16_C( 14089) },
{ -INT16_C( 12193), INT16_C( 15335), -INT16_C( 2160), -INT16_C( 24145), -INT16_C( 27699), -INT16_C( 7933), INT16_C( 6253), INT16_C( 25076) } },
{ { INT16_C( 25109), -INT16_C( 14962), -INT16_C( 27364), INT16_C( 23133), -INT16_C( 19816), INT16_C( 17557), INT16_C( 608), -INT16_C( 17430) },
{ INT16_C( 4833), INT16_C( 20804), -INT16_C( 19090), INT16_C( 7863), INT16_C( 19672), INT16_C( 6837), INT16_C( 17727), -INT16_C( 13694) },
{ -INT16_C( 7641), INT16_C( 8169), INT16_C( 15566), -INT16_C( 25810), -INT16_C( 30786), -INT16_C( 19133), -INT16_C( 26722), INT16_C( 32574) },
{ -INT16_C( 28516), -INT16_C( 30815), INT16_C( 6870), INT16_C( 6569), INT16_C( 22526), INT16_C( 21660), INT16_C( 3390), -INT16_C( 28654) } },
{ { -INT16_C( 23731), -INT16_C( 31221), INT16_C( 18994), -INT16_C( 1698), -INT16_C( 11315), INT16_C( 3820), -INT16_C( 18030), -INT16_C( 23845) },
{ INT16_C( 26616), INT16_C( 8311), INT16_C( 16589), -INT16_C( 23770), -INT16_C( 7476), INT16_C( 24478), -INT16_C( 21391), INT16_C( 15701) },
{ INT16_C( 32268), -INT16_C( 15047), -INT16_C( 16619), INT16_C( 16802), -INT16_C( 23105), INT16_C( 8069), -INT16_C( 20273), -INT16_C( 26390) },
{ -INT16_C( 21596), INT16_C( 29782), -INT16_C( 22241), INT16_C( 8086), INT16_C( 26395), -INT16_C( 5843), -INT16_C( 19903), -INT16_C( 9567) } },
{ { INT16_C( 30895), -INT16_C( 28768), -INT16_C( 22082), -INT16_C( 17361), INT16_C( 19691), INT16_C( 2318), INT16_C( 18562), INT16_C( 15382) },
{ INT16_C( 10309), -INT16_C( 10441), INT16_C( 7871), INT16_C( 15466), INT16_C( 18645), INT16_C( 5606), INT16_C( 13214), -INT16_C( 3177) },
{ -INT16_C( 24971), INT16_C( 13772), -INT16_C( 32692), INT16_C( 11312), INT16_C( 19523), INT16_C( 32251), INT16_C( 29561), -INT16_C( 14743) },
{ INT16_C( 32160), INT16_C( 28972), INT16_C( 26894), INT16_C( 7078), INT16_C( 25546), -INT16_C( 14705), INT16_C( 6581), INT16_C( 6499) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi16(test_vec[i].c);
simde__m128i r = simde_mm_macc_epi16(a, b, c);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_macc_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_macc_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 2073286111), INT32_C( 882733017), -INT32_C( 1200011720), -INT32_C( 37074522) },
{ -INT32_C( 614244495), INT32_C( 1007733789), -INT32_C( 2117244165), INT32_C( 557200893) },
{ -INT32_C( 1824584248), INT32_C( 1864742923), -INT32_C( 794482929), -INT32_C( 60032368) },
{ -INT32_C( 1335696039), -INT32_C( 1280553056), INT32_C( 1501048823), -INT32_C( 1650843234) } },
{ { INT32_C( 1204635340), INT32_C( 884577753), -INT32_C( 554947013), -INT32_C( 1771726922) },
{ -INT32_C( 837133983), INT32_C( 921240572), INT32_C( 617705859), INT32_C( 962743811) },
{ INT32_C( 1114822829), INT32_C( 1544741673), INT32_C( 1556160813), INT32_C( 1843372109) },
{ INT32_C( 764385273), -INT32_C( 1744506939), -INT32_C( 1171270562), -INT32_C( 1091183761) } },
{ { -INT32_C( 77294571), -INT32_C( 791586987), INT32_C( 2103946940), -INT32_C( 57192792) },
{ -INT32_C( 1816420547), -INT32_C( 83640395), -INT32_C( 1028470026), -INT32_C( 292923030) },
{ -INT32_C( 477870069), -INT32_C( 2017083971), -INT32_C( 1546754591), -INT32_C( 1913454297) },
{ INT32_C( 2093718540), -INT32_C( 1192237098), -INT32_C( 334977399), INT32_C( 1434581687) } },
{ { INT32_C( 68035235), INT32_C( 1534341156), -INT32_C( 634867263), INT32_C( 1632618676) },
{ INT32_C( 1323629676), -INT32_C( 1582482467), INT32_C( 1584275227), INT32_C( 861696039) },
{ INT32_C( 1540679944), -INT32_C( 1035124962), INT32_C( 1787584436), INT32_C( 219674580) },
{ INT32_C( 2131753420), -INT32_C( 1459152334), -INT32_C( 1723105777), -INT32_C( 994161856) } },
{ { INT32_C( 82524511), INT32_C( 1735515229), INT32_C( 1991205777), INT32_C( 935043408) },
{ INT32_C( 1635155348), INT32_C( 2037838669), INT32_C( 994335735), INT32_C( 1003023985) },
{ -INT32_C( 872315379), INT32_C( 570074596), -INT32_C( 1292256916), -INT32_C( 503734708) },
{ -INT32_C( 271838215), -INT32_C( 616287011), INT32_C( 1813730643), INT32_C( 1648636572) } },
{ { -INT32_C( 564501138), -INT32_C( 925346730), INT32_C( 364522931), INT32_C( 860599348) },
{ INT32_C( 1871604637), INT32_C( 388931610), -INT32_C( 608917037), INT32_C( 2046586816) },
{ -INT32_C( 1695929921), -INT32_C( 161912092), -INT32_C( 1084989936), INT32_C( 1032409285) },
{ -INT32_C( 1245489099), INT32_C( 1920711584), -INT32_C( 758172775), -INT32_C( 2136800315) } },
{ { -INT32_C( 1225101256), -INT32_C( 1862871896), -INT32_C( 1186415377), INT32_C( 1202592343) },
{ INT32_C( 1552765614), INT32_C( 1306672797), INT32_C( 58488117), -INT32_C( 1586901557) },
{ INT32_C( 1722686982), -INT32_C( 700757706), INT32_C( 337476071), -INT32_C( 1812551241) },
{ -INT32_C( 340765674), -INT32_C( 915643330), -INT32_C( 11939230), INT32_C( 1523333044) } },
{ { -INT32_C( 307599516), INT32_C( 324851497), -INT32_C( 1483081141), -INT32_C( 1496174353) },
{ INT32_C( 1242627118), INT32_C( 803407979), -INT32_C( 1264883228), -INT32_C( 1531239544) },
{ INT32_C( 380366857), -INT32_C( 1850917583), INT32_C( 1947367033), -INT32_C( 1783725096) },
{ -INT32_C( 414125055), -INT32_C( 527469740), INT32_C( 675750981), -INT32_C( 862048304) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_macc_epi32(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_macc_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { INT16_C( 29565), INT16_C( 13902), INT16_C( 11781), INT16_C( 25700), INT16_C( 28267), INT16_C( 20370), -INT16_C( 22899), INT16_C( 8272) },
{ INT16_C( 30523), -INT16_C( 28273), INT16_C( 32411), INT16_C( 23874), INT16_C( 29131), -INT16_C( 3043), INT16_C( 27337), INT16_C( 29852) },
{ -INT32_C( 716668272), INT32_C( 1664524932), INT32_C( 1926272528), INT32_C( 1305961358) },
{ INT32_C( 185744223), INT32_C( 2046358923), -INT32_C( 1545248791), INT32_C( 679971395) } },
{ { -INT16_C( 9369), INT16_C( 28585), INT16_C( 28283), -INT16_C( 2368), INT16_C( 17347), INT16_C( 21628), -INT16_C( 30668), INT16_C( 18466) },
{ INT16_C( 1767), INT16_C( 3364), -INT16_C( 1928), -INT16_C( 11869), INT16_C( 7596), INT16_C( 26674), INT16_C( 3158), INT16_C( 17117) },
{ -INT32_C( 1704277893), -INT32_C( 237071180), -INT32_C( 1153234732), INT32_C( 1487496651) },
{ -INT32_C( 1720832916), -INT32_C( 291600804), -INT32_C( 1021466920), INT32_C( 1390647107) } },
{ { INT16_C( 9930), INT16_C( 17771), -INT16_C( 10328), -INT16_C( 27469), INT16_C( 10885), -INT16_C( 26304), INT16_C( 18605), -INT16_C( 6297) },
{ INT16_C( 26046), INT16_C( 31576), -INT16_C( 26866), INT16_C( 13987), -INT16_C( 6073), -INT16_C( 28165), -INT16_C( 21932), -INT16_C( 29639) },
{ -INT32_C( 408679807), -INT32_C( 1787828003), INT32_C( 1854138083), INT32_C( 612351834) },
{ -INT32_C( 150043027), -INT32_C( 1510355955), INT32_C( 1788033478), INT32_C( 204306974) } },
{ { -INT16_C( 9350), INT16_C( 30973), INT16_C( 8272), -INT16_C( 21224), INT16_C( 2660), INT16_C( 15659), -INT16_C( 360), -INT16_C( 13094) },
{ -INT16_C( 9389), INT16_C( 23127), -INT16_C( 11297), -INT16_C( 17186), INT16_C( 30992), INT16_C( 19842), INT16_C( 6695), -INT16_C( 7892) },
{ -INT32_C( 85896715), INT32_C( 1061410372), INT32_C( 693868402), INT32_C( 9767519) },
{ INT32_C( 1890435), INT32_C( 967961588), INT32_C( 776307122), INT32_C( 7357319) } },
{ { -INT16_C( 15990), INT16_C( 1548), INT16_C( 16246), -INT16_C( 3576), INT16_C( 2643), -INT16_C( 24635), INT16_C( 474), INT16_C( 1655) },
{ -INT16_C( 3975), INT16_C( 27274), INT16_C( 25264), -INT16_C( 11730), -INT16_C( 18757), -INT16_C( 17389), INT16_C( 30065), INT16_C( 4209) },
{ INT32_C( 1397547884), INT32_C( 502715498), -INT32_C( 841629197), INT32_C( 2070289212) },
{ INT32_C( 1461108134), INT32_C( 913154442), -INT32_C( 891203948), INT32_C( 2084540022) } },
{ { -INT16_C( 8372), INT16_C( 11906), INT16_C( 27485), INT16_C( 20449), -INT16_C( 28539), INT16_C( 24284), -INT16_C( 5995), -INT16_C( 7049) },
{ INT16_C( 27202), -INT16_C( 22114), INT16_C( 15234), INT16_C( 9903), -INT16_C( 14535), INT16_C( 15673), INT16_C( 4373), INT16_C( 10244) },
{ -INT32_C( 1336850506), -INT32_C( 1620927981), INT32_C( 2000506137), INT32_C( 1689127829) },
{ -INT32_C( 1564585650), -INT32_C( 1202221491), -INT32_C( 1879646794), INT32_C( 1662911694) } },
{ { INT16_C( 32083), INT16_C( 28811), INT16_C( 7303), -INT16_C( 2501), INT16_C( 17517), INT16_C( 22905), -INT16_C( 30163), -INT16_C( 2730) },
{ INT16_C( 20481), INT16_C( 22141), -INT16_C( 26727), -INT16_C( 22341), INT16_C( 5311), INT16_C( 28607), -INT16_C( 31433), INT16_C( 31006) },
{ INT32_C( 278545897), INT32_C( 1956847170), -INT32_C( 2011275305), -INT32_C( 882495669) },
{ INT32_C( 935637820), INT32_C( 1761659889), -INT32_C( 1918242518), INT32_C( 65617910) } },
{ { INT16_C( 8563), -INT16_C( 30064), INT16_C( 2489), INT16_C( 21748), INT16_C( 3518), -INT16_C( 20504), -INT16_C( 188), INT16_C( 2511) },
{ -INT16_C( 5558), -INT16_C( 3757), -INT16_C( 5512), -INT16_C( 30738), INT16_C( 16830), INT16_C( 12719), -INT16_C( 22471), -INT16_C( 28613) },
{ -INT32_C( 1290607786), -INT32_C( 1978427335), -INT32_C( 1656528544), -INT32_C( 37085053) },
{ -INT32_C( 1338200940), -INT32_C( 1992146703), -INT32_C( 1597320604), -INT32_C( 32860505) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_maccd_epi16(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_maccd_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_macclo_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int64_t c[2];
const int64_t r[2];
} test_vec[] = {
{ { INT32_C( 2067698623), INT32_C( 421800180), -INT32_C( 1095495060), INT32_C( 786275517) },
{ INT32_C( 948551152), INT32_C( 841149922), -INT32_C( 1571473173), INT32_C( 1041666494) },
{ INT64_C( 1247074322076690576), -INT64_C( 8406614527600821977) },
{ INT64_C( 3208392232912154272), -INT64_C( 6685073429656796597) } },
{ { -INT32_C( 2088773494), INT32_C( 858304636), INT32_C( 665369000), -INT32_C( 1279526469) },
{ INT32_C( 734827013), INT32_C( 1450416090), INT32_C( 557588024), -INT32_C( 1851091031) },
{ INT64_C( 8587953065812515947), INT64_C( 4882466335759732191) },
{ INT64_C( 7053065878382922525), INT64_C( 5253468121700588191) } },
{ { INT32_C( 561920358), -INT32_C( 761587244), -INT32_C( 942757145), INT32_C( 652537250) },
{ INT32_C( 134639837), -INT32_C( 449110366), INT32_C( 1278106584), -INT32_C( 667791074) },
{ INT64_C( 7840394437456004346), INT64_C( 3750478494743971195) },
{ INT64_C( 7916051302864105992), INT64_C( 2545534380606428515) } },
{ { INT32_C( 312949798), INT32_C( 1700207295), -INT32_C( 1099772710), INT32_C( 1494454292) },
{ INT32_C( 1331862538), INT32_C( 202767039), INT32_C( 70751806), -INT32_C( 1574398336) },
{ -INT64_C( 2339017557766903409), -INT64_C( 5949986363266398162) },
{ -INT64_C( 1922211445536036085), -INT64_C( 6027797268688412422) } },
{ { INT32_C( 1470343646), -INT32_C( 1703433921), INT32_C( 1797146230), INT32_C( 1480800245) },
{ -INT32_C( 1102340256), INT32_C( 1004397042), INT32_C( 1721939485), -INT32_C( 1102480016) },
{ -INT64_C( 737231642832194), INT64_C( 4495415384873303148) },
{ -INT64_C( 1621556222782445570), INT64_C( 7589992438629194698) } },
{ { INT32_C( 794789345), INT32_C( 1633156761), INT32_C( 1839103981), INT32_C( 1940814439) },
{ INT32_C( 1416445938), INT32_C( 565103423), -INT32_C( 738598552), INT32_C( 1016028627) },
{ INT64_C( 4179656736626033754), -INT64_C( 5429924323381802266) },
{ INT64_C( 5305432875916964364), -INT64_C( 6788283860725837778) } },
{ { INT32_C( 402987457), -INT32_C( 376271026), -INT32_C( 1543692879), INT32_C( 986788301) },
{ INT32_C( 1353810706), -INT32_C( 1394479383), -INT32_C( 402030510), INT32_C( 1765133771) },
{ INT64_C( 4589542346372122741), INT64_C( 2319653070256396177) },
{ INT64_C( 5135111080042437383), INT64_C( 2940264705684134467) } },
{ { -INT32_C( 788468910), -INT32_C( 1610476766), INT32_C( 746981495), INT32_C( 2053534154) },
{ INT32_C( 860140372), INT32_C( 202687090), -INT32_C( 2049296306), -INT32_C( 692738884) },
{ -INT64_C( 42443226956880798), -INT64_C( 3440577092560565345) },
{ -INT64_C( 720637168514715318), -INT64_C( 4971363510914422815) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi64(test_vec[i].c);
simde__m128i r = simde_mm_macclo_epi32(a, b, c);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_macclo_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_macchi_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int64_t c[2];
const int64_t r[2];
} test_vec[] = {
{ { INT32_C( 1526449063), INT32_C( 918716952), INT32_C( 1724081969), INT32_C( 1147638338) },
{ -INT32_C( 1181723254), -INT32_C( 1356792161), -INT32_C( 910495728), INT32_C( 1372387656) },
{ -INT64_C( 6358172095904620619), INT64_C( 6003163645105245314) },
{ -INT64_C( 7604680054556033891), INT64_C( 7578168333728801042) } },
{ { -INT32_C( 236804334), -INT32_C( 1708256397), -INT32_C( 226385902), -INT32_C( 435082153) },
{ -INT32_C( 482266936), INT32_C( 1159763825), INT32_C( 322097545), -INT32_C( 378264750) },
{ -INT64_C( 6441521447753334463), INT64_C( 8653630751799968751) },
{ -INT64_C( 8422695420818772988), INT64_C( 8818206993633975501) } },
{ { INT32_C( 366992934), -INT32_C( 85967691), -INT32_C( 1379378034), -INT32_C( 270658452) },
{ -INT32_C( 280999072), -INT32_C( 1116747988), INT32_C( 17711341), -INT32_C( 303580674) },
{ -INT64_C( 5977451265524821992), INT64_C( 5662433887479092696) },
{ -INT64_C( 5881447019567566284), INT64_C( 5744600562761049344) } },
{ { -INT32_C( 2040664137), -INT32_C( 961301086), -INT32_C( 1192853418), INT32_C( 797467429) },
{ INT32_C( 1572531942), INT32_C( 1185547091), INT32_C( 1952048560), -INT32_C( 324889938) },
{ -INT64_C( 6237606939636247666), INT64_C( 2594782091165952624) },
{ -INT64_C( 7377274645718688492), INT64_C( 2335692947601123222) } },
{ { INT32_C( 1107796440), -INT32_C( 1396476866), INT32_C( 1885615198), -INT32_C( 1291030940) },
{ -INT32_C( 350642387), INT32_C( 1319699113), -INT32_C( 1990350972), -INT32_C( 1235303163) },
{ -INT64_C( 3935636701793332938), -INT64_C( 8441084314015536854) },
{ -INT64_C( 5778565983178552796), -INT64_C( 6846269710302673634) } },
{ { -INT32_C( 1983316773), -INT32_C( 1653886518), INT32_C( 1963908825), -INT32_C( 861680051) },
{ -INT32_C( 1744296633), -INT32_C( 2071348175), -INT32_C( 1582846885), INT32_C( 1477945830) },
{ INT64_C( 9132250782254404322), INT64_C( 5609591985390663865) },
{ -INT64_C( 5888718470738742644), INT64_C( 4336075547221026535) } },
{ { -INT32_C( 657701292), -INT32_C( 985275703), -INT32_C( 1494341829), INT32_C( 130635842) },
{ -INT32_C( 1535997816), -INT32_C( 643471571), INT32_C( 1509907818), INT32_C( 587847029) },
{ INT64_C( 8402849216899243173), INT64_C( 9149610631410482960) },
{ INT64_C( 9036846121376782586), -INT64_C( 9220339550698455238) } },
{ { -INT32_C( 243464682), -INT32_C( 1775452416), INT32_C( 575796277), INT32_C( 893002982) },
{ -INT32_C( 1920790910), INT32_C( 2056747809), -INT32_C( 1854709981), -INT32_C( 1515380716) },
{ -INT64_C( 7107536778999548205), INT64_C( 7743054767455380834) },
{ INT64_C( 7687549428118246867), INT64_C( 6389815269202085722) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi64(test_vec[i].c);
simde__m128i r = simde_mm_macchi_epi32(a, b, c);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_macchi_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccs_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t c[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 9819), -INT16_C( 26952), -INT16_C( 32069), -INT16_C( 11717), INT16_C( 17910), -INT16_C( 26410), -INT16_C( 26593), -INT16_C( 19019) },
{ INT16_C( 17890), -INT16_C( 8183), INT16_C( 28196), -INT16_C( 6656), -INT16_C( 12394), INT16_C( 1268), INT16_C( 17546), -INT16_C( 27421) },
{ -INT16_C( 29946), -INT16_C( 4833), INT16_C( 18967), -INT16_C( 31674), INT16_C( 21608), INT16_C( 22389), INT16_C( 10259), -INT16_C( 29767) },
{ INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MAX } },
{ { -INT16_C( 17481), INT16_C( 21446), INT16_C( 30667), INT16_C( 5612), -INT16_C( 31950), -INT16_C( 14266), INT16_C( 17679), -INT16_C( 24267) },
{ INT16_C( 9690), -INT16_C( 4596), -INT16_C( 27468), INT16_C( 16909), INT16_C( 19959), -INT16_C( 11627), -INT16_C( 9454), INT16_C( 8083) },
{ INT16_C( 23700), -INT16_C( 10946), -INT16_C( 31610), -INT16_C( 3320), -INT16_C( 6658), INT16_C( 11725), INT16_C( 28145), -INT16_C( 28847) },
{ INT16_MIN, INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MIN } },
{ { INT16_C( 12361), INT16_C( 25321), INT16_C( 26423), INT16_C( 21368), -INT16_C( 17973), -INT16_C( 11619), -INT16_C( 17726), -INT16_C( 18133) },
{ -INT16_C( 19809), INT16_C( 11994), -INT16_C( 24579), -INT16_C( 13764), INT16_C( 32035), -INT16_C( 1038), -INT16_C( 15143), -INT16_C( 23009) },
{ INT16_C( 13178), INT16_C( 4381), -INT16_C( 13237), INT16_C( 367), INT16_C( 8203), INT16_C( 8183), -INT16_C( 13109), -INT16_C( 24471) },
{ INT16_MIN, INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MAX } },
{ { INT16_C( 17408), INT16_C( 9472), -INT16_C( 12329), -INT16_C( 8080), -INT16_C( 11320), -INT16_C( 1765), INT16_C( 21358), INT16_C( 12423) },
{ -INT16_C( 18794), -INT16_C( 15600), -INT16_C( 13674), -INT16_C( 27942), INT16_C( 2272), -INT16_C( 32502), INT16_C( 6870), INT16_C( 7734) },
{ -INT16_C( 25888), -INT16_C( 31719), INT16_C( 7612), INT16_C( 32652), INT16_C( 28694), -INT16_C( 3918), INT16_C( 8537), INT16_C( 29554) },
{ INT16_MIN, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MAX } },
{ { INT16_C( 16836), INT16_C( 16426), INT16_C( 27072), INT16_C( 20385), -INT16_C( 1167), -INT16_C( 16322), -INT16_C( 21877), INT16_C( 31096) },
{ INT16_C( 15719), INT16_C( 4494), -INT16_C( 28842), -INT16_C( 4744), -INT16_C( 9419), -INT16_C( 22499), INT16_C( 13889), -INT16_C( 18234) },
{ INT16_C( 23853), INT16_C( 20435), -INT16_C( 20110), -INT16_C( 32595), -INT16_C( 32537), -INT16_C( 23557), -INT16_C( 31087), -INT16_C( 1511) },
{ INT16_MAX, INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MIN, INT16_MIN } },
{ { -INT16_C( 19268), -INT16_C( 27195), INT16_C( 12362), INT16_C( 29212), -INT16_C( 25524), -INT16_C( 5690), -INT16_C( 25649), INT16_C( 18285) },
{ -INT16_C( 28168), -INT16_C( 17805), -INT16_C( 21676), INT16_C( 28132), INT16_C( 8297), -INT16_C( 3159), -INT16_C( 18799), -INT16_C( 5633) },
{ -INT16_C( 30968), -INT16_C( 10456), INT16_C( 1347), INT16_C( 22624), INT16_C( 15491), INT16_C( 31507), INT16_C( 22443), INT16_C( 26701) },
{ INT16_MAX, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MIN } },
{ { INT16_C( 26190), INT16_C( 18290), INT16_C( 24077), INT16_C( 23855), INT16_C( 24864), INT16_C( 30896), INT16_C( 16434), -INT16_C( 29164) },
{ INT16_C( 16242), -INT16_C( 24290), INT16_C( 6375), -INT16_C( 6867), INT16_C( 16899), INT16_C( 9582), INT16_C( 29308), INT16_C( 25424) },
{ INT16_C( 25431), -INT16_C( 16584), -INT16_C( 11450), -INT16_C( 25993), -INT16_C( 12749), -INT16_C( 1415), INT16_C( 11805), INT16_C( 12350) },
{ INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MIN } },
{ { INT16_C( 25379), -INT16_C( 18162), INT16_C( 28894), INT16_C( 25449), INT16_C( 14068), -INT16_C( 20418), -INT16_C( 2582), INT16_C( 32605) },
{ INT16_C( 4154), -INT16_C( 5843), INT16_C( 4262), INT16_C( 27298), -INT16_C( 4917), INT16_C( 16746), -INT16_C( 30471), INT16_C( 6503) },
{ INT16_C( 31554), -INT16_C( 6046), INT16_C( 5585), INT16_C( 6398), -INT16_C( 24194), -INT16_C( 6678), -INT16_C( 6241), INT16_C( 1627) },
{ INT16_MAX, INT16_MAX, INT16_MAX, INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX, INT16_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi16(test_vec[i].c);
simde__m128i r = simde_mm_maccs_epi16(a, b, c);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i16x8();
simde__m128i r = simde_mm_maccs_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccs_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 1883572960), INT32_C( 379133910), INT32_C( 351028496), -INT32_C( 1888070545) },
{ -INT32_C( 159313928), INT32_C( 1305612392), -INT32_C( 1982068281), INT32_C( 1043615808) },
{ INT32_C( 2001050416), -INT32_C( 448460675), INT32_C( 1030250537), -INT32_C( 615277529) },
{ INT32_MAX, INT32_MAX, INT32_MIN, INT32_MIN } },
{ { -INT32_C( 1412192147), INT32_C( 1238329418), INT32_C( 1736178170), INT32_C( 1892628856) },
{ INT32_C( 1782090131), INT32_C( 562942276), -INT32_C( 2109422273), INT32_C( 1172727752) },
{ -INT32_C( 809447992), INT32_C( 1457268000), INT32_C( 1177548349), -INT32_C( 485185044) },
{ INT32_MIN, INT32_MAX, INT32_MIN, INT32_MAX } },
{ { INT32_C( 821643120), INT32_C( 274236627), -INT32_C( 1393885831), INT32_C( 337100539) },
{ INT32_C( 699402034), -INT32_C( 1159704431), -INT32_C( 312440136), -INT32_C( 504649657) },
{ -INT32_C( 1846386960), -INT32_C( 57661231), -INT32_C( 2084532480), -INT32_C( 1831950233) },
{ INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN } },
{ { -INT32_C( 2113151534), -INT32_C( 1094324410), INT32_C( 628505749), -INT32_C( 1338229201) },
{ INT32_C( 1435063611), INT32_C( 723306214), -INT32_C( 835714053), INT32_C( 99823029) },
{ -INT32_C( 1573267503), -INT32_C( 1435365914), -INT32_C( 1227254535), -INT32_C( 1712360372) },
{ INT32_MIN, INT32_MIN, INT32_MIN, INT32_MIN } },
{ { INT32_C( 1126741112), -INT32_C( 421239365), INT32_C( 1470161555), -INT32_C( 1234283124) },
{ INT32_C( 1369603414), -INT32_C( 959467750), INT32_C( 1760697102), -INT32_C( 454274744) },
{ INT32_C( 624297168), INT32_C( 1959792120), -INT32_C( 461720848), -INT32_C( 316200555) },
{ INT32_MAX, INT32_MAX, INT32_MAX, INT32_MAX } },
{ { INT32_C( 1471109258), INT32_C( 1506074506), INT32_C( 52910332), -INT32_C( 652485176) },
{ -INT32_C( 1055143062), INT32_C( 533251653), INT32_C( 1042677305), -INT32_C( 234442633) },
{ INT32_C( 2076635028), -INT32_C( 1388731171), INT32_C( 1323422955), -INT32_C( 1067114121) },
{ INT32_MIN, INT32_MAX, INT32_MAX, INT32_MAX } },
{ { -INT32_C( 549546897), INT32_C( 766810440), INT32_C( 755583895), INT32_C( 217379547) },
{ -INT32_C( 2041460067), INT32_C( 135661500), INT32_C( 310973698), -INT32_C( 525327110) },
{ INT32_C( 1225384966), -INT32_C( 411267668), INT32_C( 2022581041), -INT32_C( 2066220951) },
{ INT32_MAX, INT32_MAX, INT32_MAX, INT32_MIN } },
{ { INT32_C( 1102475981), -INT32_C( 1287450930), INT32_C( 394634601), -INT32_C( 2098794500) },
{ -INT32_C( 958184104), -INT32_C( 1794594025), -INT32_C( 384037584), -INT32_C( 1566979640) },
{ INT32_C( 1902079563), -INT32_C( 156712004), INT32_C( 624888905), -INT32_C( 286423005) },
{ INT32_MIN, INT32_MAX, INT32_MIN, INT32_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_maccs_epi32(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_maccs_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccsd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { INT16_C( 1075), -INT16_C( 11898), INT16_C( 15985), -INT16_C( 17092), INT16_C( 28092), INT16_C( 18624), -INT16_C( 30180), INT16_C( 25839) },
{ INT16_C( 15881), INT16_C( 4772), -INT16_C( 20528), -INT16_C( 10694), -INT16_C( 26055), INT16_C( 26700), -INT16_C( 23961), -INT16_C( 21057) },
{ -INT32_C( 452728833), INT32_C( 647355277), INT32_C( 164188451), -INT32_C( 1547249853) },
{ -INT32_C( 435656758), INT32_C( 319215197), -INT32_C( 567748609), -INT32_C( 824106873) } },
{ { INT16_C( 18174), -INT16_C( 18478), -INT16_C( 26786), INT16_C( 10704), -INT16_C( 2046), -INT16_C( 18938), INT16_C( 7944), -INT16_C( 7388) },
{ -INT16_C( 8400), INT16_C( 13186), -INT16_C( 1731), -INT16_C( 25174), INT16_C( 13471), INT16_C( 15638), -INT16_C( 20400), INT16_C( 19003) },
{ INT32_C( 1220966396), INT32_C( 2133153124), -INT32_C( 1421219324), -INT32_C( 173343245) },
{ INT32_C( 1068304796), INT32_MAX, -INT32_C( 1448780990), -INT32_C( 335400845) } },
{ { INT16_C( 4876), INT16_C( 8844), INT16_C( 16459), INT16_C( 2945), INT16_C( 15993), INT16_C( 19760), -INT16_C( 17396), INT16_C( 16724) },
{ -INT16_C( 1975), INT16_C( 12040), -INT16_C( 28501), -INT16_C( 16831), -INT16_C( 27000), -INT16_C( 20580), -INT16_C( 7438), -INT16_C( 13478) },
{ INT32_C( 447261916), INT32_C( 1445223037), -INT32_C( 1616996614), INT32_C( 1880859711) },
{ INT32_C( 437631816), INT32_C( 976125078), -INT32_C( 2048807614), INT32_C( 2010251159) } },
{ { -INT16_C( 3539), -INT16_C( 11744), -INT16_C( 3589), -INT16_C( 12243), INT16_C( 9430), INT16_C( 10887), INT16_C( 30667), INT16_C( 20026) },
{ -INT16_C( 11801), -INT16_C( 31905), -INT16_C( 4963), INT16_C( 26779), INT16_C( 25959), -INT16_C( 25112), INT16_C( 4016), -INT16_C( 16232) },
{ -INT32_C( 1684566542), -INT32_C( 1678761956), -INT32_C( 2070758090), INT32_C( 1683317575) },
{ -INT32_C( 1642802803), -INT32_C( 1660949749), -INT32_C( 1825964720), INT32_C( 1806476247) } },
{ { -INT16_C( 21641), -INT16_C( 14792), -INT16_C( 24207), INT16_C( 10220), -INT16_C( 11765), -INT16_C( 20841), -INT16_C( 22999), INT16_C( 6098) },
{ -INT16_C( 3874), -INT16_C( 3597), -INT16_C( 15147), INT16_C( 2450), -INT16_C( 30224), INT16_C( 9798), INT16_C( 20014), -INT16_C( 2384) },
{ INT32_C( 1237017298), INT32_C( 2099322562), INT32_C( 959579693), INT32_C( 1607537008) },
{ INT32_C( 1320854532), INT32_MAX, INT32_C( 1315165053), INT32_C( 1147235022) } },
{ { INT16_C( 17467), INT16_C( 15295), -INT16_C( 31249), INT16_C( 284), -INT16_C( 20661), INT16_C( 30250), -INT16_C( 7608), -INT16_C( 4779) },
{ INT16_C( 7489), INT16_C( 30064), INT16_C( 3671), INT16_C( 20802), INT16_C( 10260), -INT16_C( 22463), -INT16_C( 2225), INT16_C( 32413) },
{ -INT32_C( 478105521), INT32_C( 1788153139), -INT32_C( 574138480), INT32_C( 793494621) },
{ -INT32_C( 347295158), INT32_C( 1673438060), -INT32_C( 786120340), INT32_C( 810422421) } },
{ { INT16_C( 1036), -INT16_C( 19744), INT16_C( 6138), -INT16_C( 30123), INT16_C( 24841), INT16_C( 25164), INT16_C( 139), INT16_C( 24127) },
{ INT16_C( 23907), INT16_C( 20672), INT16_C( 358), INT16_C( 11781), -INT16_C( 21752), -INT16_C( 15197), -INT16_C( 24780), -INT16_C( 22886) },
{ INT32_C( 1771192443), INT32_C( 308601201), -INT32_C( 807610028), -INT32_C( 440478225) },
{ INT32_C( 1795960095), INT32_C( 310798605), -INT32_C( 1347951460), -INT32_C( 443922645) } },
{ { INT16_C( 29630), -INT16_C( 5626), INT16_C( 3155), INT16_C( 13428), -INT16_C( 12040), -INT16_C( 28344), INT16_C( 6550), INT16_C( 14411) },
{ -INT16_C( 1578), INT16_C( 14), INT16_C( 5509), -INT16_C( 12170), -INT16_C( 18627), INT16_C( 22392), INT16_C( 7746), -INT16_C( 734) },
{ INT32_C( 433789354), INT32_C( 1693177025), -INT32_C( 1371606613), -INT32_C( 815474101) },
{ INT32_C( 387033214), INT32_C( 1710557920), -INT32_C( 1147337533), -INT32_C( 764737801) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_maccsd_epi16(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_maccsd_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccslo_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int64_t c[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT32_C( 505588124), -INT32_C( 1399563266), INT32_C( 1655251980), -INT32_C( 1921809845) },
{ INT32_C( 1170634605), -INT32_C( 1502543497), -INT32_C( 2129972120), INT32_C( 1391495963) },
{ -INT64_C( 8159015487569231762), INT64_C( 8987683831078602504) },
{ -INT64_C( 8750874441400662782), INT64_C( 5462043262103804904) } },
{ { -INT32_C( 699419056), -INT32_C( 502318018), INT32_C( 1949942134), -INT32_C( 1443572530) },
{ INT32_C( 496082748), INT32_C( 1578220351), -INT32_C( 1578677894), -INT32_C( 1258340702) },
{ INT64_C( 57471327644090011), -INT64_C( 4865475103685557986) },
{ -INT64_C( 289498399659955877), -INT64_C( 7943805645210543782) } },
{ { INT32_C( 1233639958), INT32_C( 75507094), -INT32_C( 1526443606), INT32_C( 474539392) },
{ -INT32_C( 950241642), -INT32_C( 391087329), INT32_C( 1456889000), INT32_C( 1938410747) },
{ INT64_C( 7573719157811665220), -INT64_C( 7160926586083571488) },
{ INT64_C( 6401463098484934184), INT64_MIN } },
{ { -INT32_C( 118470775), -INT32_C( 2084319543), INT32_C( 374716764), -INT32_C( 1238709498) },
{ -INT32_C( 1018084083), INT32_C( 1944696731), INT32_C( 2145654116), INT32_C( 470486408) },
{ -INT64_C( 5256034315837204293), INT64_C( 7882427535233122689) },
{ -INT64_C( 5135421105509029968), INT64_C( 8686440102243923313) } },
{ { -INT32_C( 499792197), INT32_C( 200421081), INT32_C( 615915901), -INT32_C( 2070552765) },
{ -INT32_C( 807693707), INT32_C( 1838688118), INT32_C( 995908449), -INT32_C( 2143348243) },
{ INT64_C( 1891318278482297748), -INT64_C( 4880947430363376523) },
{ INT64_C( 2294997290806902027), -INT64_C( 4267551580684028974) } },
{ { INT32_C( 1195531775), -INT32_C( 1905689846), INT32_C( 1895100482), -INT32_C( 675039400) },
{ -INT32_C( 341432863), -INT32_C( 2032680525), -INT32_C( 389524078), -INT32_C( 1390459636) },
{ INT64_C( 38972361394823329), INT64_C( 6555416003921373293) },
{ -INT64_C( 369221475350898496), INT64_C( 5817228735952967697) } },
{ { -INT32_C( 1522445335), INT32_C( 969092319), -INT32_C( 686306019), INT32_C( 1026632362) },
{ INT32_C( 1436222627), -INT32_C( 1392329579), INT32_C( 670329386), -INT32_C( 219665912) },
{ INT64_C( 1804037175386289910), INT64_C( 6161128594745287517) },
{ -INT64_C( 382533263111305135), INT64_C( 5701077502420913183) } },
{ { -INT32_C( 1130549172), INT32_C( 2077882651), INT32_C( 2037227201), -INT32_C( 2053615908) },
{ -INT32_C( 1914210738), INT32_C( 280203678), -INT32_C( 706002788), -INT32_C( 569074364) },
{ INT64_C( 6059826960292236517), -INT64_C( 282992977157640839) },
{ INT64_C( 8223936325171645453), -INT64_C( 1721281060853077227) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi64(test_vec[i].c);
simde__m128i r = simde_mm_maccslo_epi32(a, b, c);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_maccslo_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maccshi_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int64_t c[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT32_C( 1979598278), INT32_C( 97049025), -INT32_C( 1249932512), -INT32_C( 1091207985) },
{ INT32_C( 1358168758), INT32_C( 533132435), INT32_C( 335003547), INT32_C( 1079883364) },
{ -INT64_C( 2354895035724027390), -INT64_C( 2365235082378056397) },
{ -INT64_C( 2303155052711401515), -INT64_C( 3543612432043517937) } },
{ { INT32_C( 1314519047), -INT32_C( 991231468), INT32_C( 706345839), INT32_C( 947997352) },
{ -INT32_C( 1603440658), -INT32_C( 2007638411), INT32_C( 1051004443), INT32_C( 666881354) },
{ INT64_C( 3067133650308224544), -INT64_C( 3780774117716555203) },
{ INT64_C( 5057168019656941892), -INT64_C( 3148572360026380595) } },
{ { -INT32_C( 1999752890), -INT32_C( 404951914), -INT32_C( 1220111072), -INT32_C( 2135322678) },
{ -INT32_C( 1187134136), INT32_C( 1002145416), -INT32_C( 155347891), -INT32_C( 478775526) },
{ -INT64_C( 1950187710052165807), -INT64_C( 3377721160132514932) },
{ -INT64_C( 2356008414367692031), -INT64_C( 2355380921793336304) } },
{ { -INT32_C( 154276407), -INT32_C( 562606837), INT32_C( 2068857062), INT32_C( 1733714390) },
{ INT32_C( 479218264), INT32_C( 1737777743), INT32_C( 441317285), INT32_C( 50040117) },
{ -INT64_C( 303534344943995415), INT64_C( 4481191540110374482) },
{ -INT64_C( 1281219984342224306), INT64_C( 4567946811030558112) } },
{ { -INT32_C( 1744768349), INT32_C( 1490361462), -INT32_C( 725409099), -INT32_C( 95151695) },
{ -INT32_C( 2016377359), INT32_C( 2075863692), -INT32_C( 912384041), INT32_C( 1376461888) },
{ -INT64_C( 6937125781946813062), -INT64_C( 6686937538711071998) },
{ -INT64_C( 3843338535024975358), -INT64_C( 6817910220457172158) } },
{ { -INT32_C( 1403828439), INT32_C( 1146392858), INT32_C( 1667933118), -INT32_C( 1964028546) },
{ -INT32_C( 89637339), INT32_C( 625660996), INT32_C( 1648112597), -INT32_C( 459303650) },
{ INT64_C( 4583677685977113048), -INT64_C( 3538556661785532081) },
{ INT64_C( 5300930983320679616), -INT64_C( 2636471181903539181) } },
{ { -INT32_C( 1309723669), -INT32_C( 796056710), INT32_C( 89090677), -INT32_C( 1516186466) },
{ -INT32_C( 1291617465), INT32_C( 1419548856), -INT32_C( 2081252655), INT32_C( 116618737) },
{ -INT64_C( 8535461188367467242), -INT64_C( 3585254504269373652) },
{ INT64_MIN, -INT64_C( 3762070254990787094) } },
{ { INT32_C( 1732329151), INT32_C( 1817938008), -INT32_C( 624992882), INT32_C( 438551990) },
{ INT32_C( 839681004), INT32_C( 961408364), INT32_C( 231406144), INT32_C( 1216519452) },
{ INT64_C( 7917879246931710342), -INT64_C( 901532948814373940) },
{ INT64_MAX, -INT64_C( 368025922266064460) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi64(test_vec[i].c);
simde__m128i r = simde_mm_maccshi_epi32(a, b, c);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_test_x86_random_i32x4();
simde__m128i c = simde_test_x86_random_i64x2();
simde__m128i r = simde_mm_maccshi_epi32(a, b, c);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maddd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { INT16_C( 10359), INT16_C( 17786), -INT16_C( 2101), -INT16_C( 26389), INT16_C( 18210), INT16_C( 6206), -INT16_C( 6276), -INT16_C( 21611) },
{ INT16_C( 31037), -INT16_C( 24421), INT16_C( 30595), -INT16_C( 9610), INT16_C( 29623), INT16_C( 12791), -INT16_C( 23710), INT16_C( 5396) },
{ INT32_C( 1956224066), -INT32_C( 568697186), -INT32_C( 399732266), -INT32_C( 824897986) },
{ INT32_C( 1843384443), -INT32_C( 379378991), INT32_C( 219083510), -INT32_C( 792706982) } },
{ { -INT16_C( 24276), INT16_C( 23616), INT16_C( 3408), INT16_C( 3765), INT16_C( 20804), INT16_C( 30409), INT16_C( 10852), -INT16_C( 8494) },
{ -INT16_C( 9760), INT16_C( 12190), INT16_C( 9744), INT16_C( 4453), -INT16_C( 23289), INT16_C( 21755), INT16_C( 14442), -INT16_C( 28854) },
{ INT32_C( 100717955), -INT32_C( 779777391), INT32_C( 993050210), INT32_C( 1773844772) },
{ INT32_C( 625530755), -INT32_C( 729804294), INT32_C( 1170093649), -INT32_C( 2119312064) } },
{ { INT16_C( 26489), INT16_C( 15603), INT16_C( 22729), INT16_C( 30643), INT16_C( 3292), INT16_C( 9492), INT16_C( 28328), INT16_C( 13790) },
{ -INT16_C( 24985), INT16_C( 26691), -INT16_C( 3091), INT16_C( 28109), INT16_C( 16697), INT16_C( 19092), INT16_C( 22346), -INT16_C( 588) },
{ INT32_C( 1677642804), INT32_C( 1525611634), INT32_C( 584928638), INT32_C( 175683487) },
{ INT32_C( 1432274812), -INT32_C( 1978266914), INT32_C( 821116426), INT32_C( 800592455) } },
{ { -INT16_C( 31998), INT16_C( 18545), INT16_C( 21005), INT16_C( 10357), INT16_C( 25328), INT16_C( 26973), INT16_C( 3453), -INT16_C( 7256) },
{ -INT16_C( 28103), INT16_C( 28201), INT16_C( 6323), INT16_C( 253), -INT16_C( 4076), INT16_C( 5568), INT16_C( 7160), INT16_C( 21504) },
{ INT32_C( 1878133884), INT32_C( 1264889496), INT32_C( 1643358640), INT32_C( 1686037093) },
{ -INT32_C( 994606073), INT32_C( 1400324432), INT32_C( 1690307376), INT32_C( 1554727549) } },
{ { INT16_C( 16561), INT16_C( 9179), -INT16_C( 18893), -INT16_C( 19768), INT16_C( 32455), -INT16_C( 15324), -INT16_C( 23974), INT16_C( 23647) },
{ -INT16_C( 15875), -INT16_C( 23249), INT16_C( 4151), INT16_C( 7556), -INT16_C( 24672), -INT16_C( 1601), -INT16_C( 8533), -INT16_C( 14818) },
{ INT32_C( 1283153860), -INT32_C( 1221075557), -INT32_C( 110002497), INT32_C( 1786467694) },
{ INT32_C( 806845414), -INT32_C( 1448867408), -INT32_C( 886198533), INT32_C( 1640636590) } },
{ { INT16_C( 11180), -INT16_C( 20082), INT16_C( 32658), -INT16_C( 5956), -INT16_C( 13335), -INT16_C( 1241), INT16_C( 2551), INT16_C( 20849) },
{ INT16_C( 30361), -INT16_C( 20621), -INT16_C( 26990), INT16_C( 22834), INT16_C( 30755), INT16_C( 31246), INT16_C( 15324), -INT16_C( 15043) },
{ INT32_C( 1568199089), -INT32_C( 218889392), INT32_C( 764720562), INT32_C( 1331522800) },
{ -INT32_C( 1973221305), -INT32_C( 1236328116), INT32_C( 315826351), INT32_C( 1056982817) } },
{ { INT16_C( 3417), INT16_C( 5418), -INT16_C( 5951), -INT16_C( 8543), -INT16_C( 3045), INT16_C( 3941), INT16_C( 23627), -INT16_C( 18547) },
{ INT16_C( 15157), INT16_C( 28502), -INT16_C( 23526), -INT16_C( 31468), -INT16_C( 6620), INT16_C( 22895), INT16_C( 3647), INT16_C( 1739) },
{ INT32_C( 1158196523), -INT32_C( 1888691249), -INT32_C( 2099414063), -INT32_C( 2041265821) },
{ INT32_C( 1364411828), -INT32_C( 1479856899), -INT32_C( 1989026968), -INT32_C( 1987351385) } },
{ { -INT16_C( 3488), -INT16_C( 20338), INT16_C( 27543), -INT16_C( 6395), -INT16_C( 6809), INT16_C( 17694), -INT16_C( 2164), -INT16_C( 16476) },
{ -INT16_C( 9160), INT16_C( 2421), INT16_C( 30565), -INT16_C( 19333), -INT16_C( 27542), -INT16_C( 25890), INT16_C( 29133), INT16_C( 31608) },
{ -INT32_C( 393577127), INT32_C( 1621974896), -INT32_C( 1173669214), -INT32_C( 1026674562) },
{ -INT32_C( 410865345), -INT32_C( 1707506070), -INT32_C( 1444233396), -INT32_C( 1610491782) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_maddd_epi16(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_maddd_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_maddsd_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int32_t c[4];
const int32_t r[4];
} test_vec[] = {
{ { INT16_C( 9639), INT16_C( 10201), -INT16_C( 15061), -INT16_C( 27210), -INT16_C( 14319), INT16_C( 7888), INT16_C( 29745), -INT16_C( 8477) },
{ INT16_C( 25673), -INT16_C( 8272), -INT16_C( 30388), INT16_C( 15093), INT16_C( 28413), INT16_C( 32668), -INT16_C( 16195), INT16_C( 22323) },
{ INT32_C( 1755057569), INT32_C( 2030488776), -INT32_C( 685990164), -INT32_C( 142879946) },
{ INT32_C( 1918136944), INT32_C( 2077481914), -INT32_C( 835150727), -INT32_C( 813832292) } },
{ { INT16_C( 12375), INT16_C( 23658), -INT16_C( 4140), -INT16_C( 17467), INT16_C( 2209), INT16_C( 24123), -INT16_C( 20494), -INT16_C( 14662) },
{ INT16_C( 7758), -INT16_C( 27610), -INT16_C( 27419), -INT16_C( 21935), -INT16_C( 25053), -INT16_C( 29400), -INT16_C( 27259), INT16_C( 3370) },
{ INT32_C( 689924268), INT32_C( 755407792), INT32_C( 491753654), INT32_C( 1447691973) },
{ INT32_C( 132732138), INT32_C( 1252061097), -INT32_C( 272804623), INT32_C( 1956926979) } },
{ { -INT16_C( 8235), INT16_C( 29664), INT16_C( 9769), INT16_C( 28289), INT16_C( 20703), INT16_C( 1885), -INT16_C( 15674), INT16_C( 27351) },
{ -INT16_C( 27537), INT16_C( 3126), -INT16_C( 27257), -INT16_C( 10594), -INT16_C( 28829), -INT16_C( 31424), -INT16_C( 13091), INT16_C( 20941) },
{ -INT32_C( 869214113), INT32_C( 243042621), INT32_C( 253967688), INT32_C( 1416258464) },
{ -INT32_C( 549717254), -INT32_C( 322924678), -INT32_C( 402113339), INT32_MAX } },
{ { INT16_C( 15817), -INT16_C( 12775), -INT16_C( 7423), -INT16_C( 137), -INT16_C( 29487), INT16_C( 24181), INT16_C( 2531), -INT16_C( 726) },
{ -INT16_C( 28141), INT16_C( 27007), -INT16_C( 14904), -INT16_C( 11988), -INT16_C( 4987), INT16_C( 27619), INT16_C( 32699), INT16_C( 5322) },
{ INT32_C( 925887202), -INT32_C( 277311545), INT32_C( 1884819240), -INT32_C( 1555446402) },
{ INT32_C( 135766580), -INT32_C( 165036797), INT32_MAX, -INT32_C( 1476549005) } },
{ { -INT16_C( 27622), INT16_C( 4150), -INT16_C( 7309), INT16_C( 375), -INT16_C( 6721), -INT16_C( 7165), INT16_C( 7872), -INT16_C( 3359) },
{ INT16_C( 9185), INT16_C( 3808), -INT16_C( 24191), -INT16_C( 3960), -INT16_C( 24433), -INT16_C( 32176), INT16_C( 2391), -INT16_C( 30190) },
{ -INT32_C( 1967429989), -INT32_C( 465048858), INT32_C( 1122873629), INT32_C( 899041367) },
{ INT32_MIN, -INT32_C( 289721839), INT32_C( 1517628862), INT32_C( 1019271529) } },
{ { INT16_C( 28910), INT16_C( 7572), INT16_C( 8151), INT16_C( 18577), -INT16_C( 14290), INT16_C( 24261), -INT16_C( 9195), -INT16_C( 915) },
{ -INT16_C( 28225), -INT16_C( 24712), -INT16_C( 7480), -INT16_C( 15229), -INT16_C( 10296), INT16_C( 19719), INT16_C( 1575), INT16_C( 10193) },
{ INT32_C( 716397107), INT32_C( 1081742191), -INT32_C( 903934418), INT32_C( 1061308257) },
{ -INT32_C( 286706907), INT32_C( 737863578), -INT32_C( 278401919), INT32_C( 1037499537) } },
{ { -INT16_C( 25426), INT16_C( 5843), -INT16_C( 11070), -INT16_C( 6381), -INT16_C( 8217), -INT16_C( 12869), INT16_C( 24537), INT16_C( 3706) },
{ INT16_C( 26837), -INT16_C( 347), -INT16_C( 31500), INT16_C( 8235), -INT16_C( 1097), -INT16_C( 28729), INT16_C( 20963), -INT16_C( 25479) },
{ -INT32_C( 1187639409), -INT32_C( 1763719301), -INT32_C( 1989127517), INT32_C( 863656980) },
{ -INT32_C( 1872024492), -INT32_C( 1467561836), -INT32_C( 1610399967), INT32_C( 1283600937) } },
{ { INT16_C( 9215), INT16_C( 25043), INT16_C( 31500), INT16_C( 12427), INT16_C( 5872), INT16_C( 29987), INT16_C( 578), INT16_C( 23546) },
{ INT16_C( 29578), INT16_C( 19976), -INT16_C( 15460), INT16_C( 6350), -INT16_C( 18652), INT16_C( 19085), INT16_C( 1153), -INT16_C( 8521) },
{ INT32_C( 446894551), -INT32_C( 1199243425), INT32_C( 1134356226), -INT32_C( 995270105) },
{ INT32_C( 1219714789), -INT32_C( 1607321975), INT32_C( 1597133577), -INT32_C( 1195239137) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128i r = simde_mm_maddsd_epi16(a, b, c);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_test_x86_random_i16x8();
simde__m128i c = simde_test_x86_random_i32x4();
simde__m128i r = simde_mm_maddsd_epi16(a, b, c);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_sha_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 55), INT8_C( 79), -INT8_C( 79), -INT8_C( 98), -INT8_C( 52), -INT8_C( 48), -INT8_C( 54), -INT8_C( 73),
-INT8_C( 111), -INT8_C( 106), INT8_C( 124), -INT8_C( 40), -INT8_C( 56), INT8_C( 95), INT8_C( 26), INT8_C( 87) },
{ -INT8_C( 5), -INT8_C( 4), INT8_C( 6), -INT8_C( 3), -INT8_C( 6), INT8_C( 0), -INT8_C( 5), -INT8_C( 7),
INT8_C( 5), -INT8_C( 6), -INT8_C( 3), -INT8_C( 3), INT8_C( 1), INT8_C( 2), INT8_C( 2), INT8_C( 7) },
{ -INT8_C( 2), INT8_C( 4), INT8_C( 64), -INT8_C( 13), -INT8_C( 1), -INT8_C( 48), -INT8_C( 2), -INT8_C( 1),
INT8_C( 32), -INT8_C( 2), INT8_C( 15), -INT8_C( 5), -INT8_C( 112), INT8_C( 124), INT8_C( 104), INT8_MIN } },
{ { INT8_C( 113), INT8_C( 43), -INT8_C( 103), INT8_C( 113), -INT8_C( 76), -INT8_C( 9), -INT8_C( 69), -INT8_C( 71),
INT8_C( 18), INT8_C( 120), -INT8_C( 92), -INT8_C( 5), -INT8_C( 112), INT8_C( 117), -INT8_C( 117), -INT8_C( 27) },
{ INT8_C( 2), -INT8_C( 4), -INT8_C( 5), -INT8_C( 2), INT8_C( 1), -INT8_C( 6), -INT8_C( 7), INT8_C( 6),
INT8_C( 7), -INT8_C( 4), -INT8_C( 6), -INT8_C( 3), INT8_C( 1), INT8_C( 1), INT8_C( 2), -INT8_C( 3) },
{ -INT8_C( 60), INT8_C( 2), -INT8_C( 4), INT8_C( 28), INT8_C( 104), -INT8_C( 1), -INT8_C( 1), INT8_C( 64),
INT8_C( 0), INT8_C( 7), -INT8_C( 2), -INT8_C( 1), INT8_C( 32), -INT8_C( 22), INT8_C( 44), -INT8_C( 4) } },
{ { -INT8_C( 83), -INT8_C( 113), INT8_C( 40), -INT8_C( 113), -INT8_C( 5), INT8_C( 63), -INT8_C( 121), INT8_C( 103),
-INT8_C( 47), -INT8_C( 29), INT8_C( 109), INT8_C( 123), -INT8_C( 127), INT8_C( 79), -INT8_C( 13), -INT8_C( 47) },
{ INT8_C( 6), INT8_C( 7), -INT8_C( 6), INT8_C( 0), INT8_C( 7), INT8_C( 2), INT8_C( 0), -INT8_C( 5),
-INT8_C( 3), INT8_C( 0), -INT8_C( 6), -INT8_C( 4), -INT8_C( 6), -INT8_C( 7), INT8_C( 3), -INT8_C( 1) },
{ INT8_C( 64), INT8_MIN, INT8_C( 0), -INT8_C( 113), INT8_MIN, -INT8_C( 4), -INT8_C( 121), INT8_C( 3),
-INT8_C( 6), -INT8_C( 29), INT8_C( 1), INT8_C( 7), -INT8_C( 2), INT8_C( 0), -INT8_C( 104), -INT8_C( 24) } },
{ { -INT8_C( 93), INT8_C( 4), -INT8_C( 58), -INT8_C( 65), INT8_C( 74), -INT8_C( 79), INT8_C( 23), INT8_C( 9),
-INT8_C( 13), INT8_C( 98), INT8_C( 63), INT8_C( 31), INT8_C( 68), -INT8_C( 12), INT8_C( 56), INT8_C( 100) },
{ INT8_C( 0), INT8_C( 7), INT8_C( 3), INT8_C( 5), INT8_C( 1), INT8_C( 3), INT8_C( 1), INT8_C( 4),
-INT8_C( 7), -INT8_C( 2), -INT8_C( 4), INT8_C( 6), INT8_C( 1), INT8_C( 5), -INT8_C( 7), -INT8_C( 1) },
{ -INT8_C( 93), INT8_C( 0), INT8_C( 48), -INT8_C( 32), -INT8_C( 108), -INT8_C( 120), INT8_C( 46), -INT8_C( 112),
-INT8_C( 1), INT8_C( 24), INT8_C( 3), -INT8_C( 64), -INT8_C( 120), INT8_MIN, INT8_C( 0), INT8_C( 50) } },
{ { INT8_C( 123), INT8_C( 17), -INT8_C( 37), -INT8_C( 54), INT8_C( 73), INT8_C( 83), INT8_C( 83), -INT8_C( 25),
-INT8_C( 93), INT8_C( 122), -INT8_C( 126), -INT8_C( 80), -INT8_C( 127), INT8_C( 108), INT8_C( 68), -INT8_C( 29) },
{ -INT8_C( 1), INT8_C( 4), INT8_C( 2), INT8_C( 1), INT8_C( 7), -INT8_C( 2), INT8_C( 2), INT8_C( 3),
-INT8_C( 4), INT8_C( 3), -INT8_C( 7), INT8_C( 0), INT8_C( 2), -INT8_C( 2), -INT8_C( 4), -INT8_C( 3) },
{ INT8_C( 61), INT8_C( 16), INT8_C( 108), -INT8_C( 108), INT8_MIN, INT8_C( 20), INT8_C( 76), INT8_C( 56),
-INT8_C( 6), -INT8_C( 48), -INT8_C( 1), -INT8_C( 80), INT8_C( 4), INT8_C( 27), INT8_C( 4), -INT8_C( 4) } },
{ { INT8_C( 94), INT8_C( 63), -INT8_C( 49), INT8_C( 121), -INT8_C( 97), INT8_C( 47), INT8_C( 35), INT8_C( 72),
INT8_C( 7), -INT8_C( 75), -INT8_C( 98), -INT8_C( 9), -INT8_C( 33), -INT8_C( 64), -INT8_C( 3), -INT8_C( 103) },
{ INT8_C( 0), -INT8_C( 4), -INT8_C( 5), INT8_C( 3), -INT8_C( 7), INT8_C( 5), -INT8_C( 4), INT8_C( 1),
-INT8_C( 1), -INT8_C( 2), -INT8_C( 6), -INT8_C( 4), INT8_C( 0), -INT8_C( 6), -INT8_C( 4), -INT8_C( 7) },
{ INT8_C( 94), INT8_C( 3), -INT8_C( 2), -INT8_C( 56), -INT8_C( 1), -INT8_C( 32), INT8_C( 2), -INT8_C( 112),
INT8_C( 3), -INT8_C( 19), -INT8_C( 2), -INT8_C( 1), -INT8_C( 33), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 116), INT8_C( 21), INT8_C( 10), -INT8_C( 110), -INT8_C( 11), INT8_C( 77), INT8_C( 112), INT8_C( 118),
INT8_C( 71), -INT8_C( 102), -INT8_C( 4), -INT8_C( 71), INT8_C( 7), -INT8_C( 9), INT8_C( 77), -INT8_C( 51) },
{ -INT8_C( 6), -INT8_C( 1), INT8_C( 3), INT8_C( 5), INT8_C( 4), -INT8_C( 6), INT8_C( 5), INT8_C( 7),
INT8_C( 7), INT8_C( 7), INT8_C( 3), INT8_C( 0), INT8_C( 3), -INT8_C( 2), INT8_C( 6), -INT8_C( 4) },
{ INT8_C( 1), INT8_C( 10), INT8_C( 80), INT8_C( 64), INT8_C( 80), INT8_C( 1), INT8_C( 0), INT8_C( 0),
INT8_MIN, INT8_C( 0), -INT8_C( 32), -INT8_C( 71), INT8_C( 56), -INT8_C( 3), INT8_C( 64), -INT8_C( 4) } },
{ { -INT8_C( 28), INT8_C( 27), -INT8_C( 12), -INT8_C( 35), -INT8_C( 14), -INT8_C( 77), INT8_C( 32), -INT8_C( 73),
-INT8_C( 116), -INT8_C( 79), INT8_C( 2), -INT8_C( 63), -INT8_C( 95), INT8_C( 25), INT8_C( 27), -INT8_C( 58) },
{ -INT8_C( 2), -INT8_C( 2), -INT8_C( 3), -INT8_C( 5), INT8_C( 4), -INT8_C( 5), INT8_C( 7), -INT8_C( 5),
-INT8_C( 5), -INT8_C( 2), INT8_C( 5), INT8_C( 5), -INT8_C( 5), -INT8_C( 5), INT8_C( 1), -INT8_C( 3) },
{ -INT8_C( 7), INT8_C( 6), -INT8_C( 2), -INT8_C( 2), INT8_C( 32), -INT8_C( 3), INT8_C( 0), -INT8_C( 3),
-INT8_C( 4), -INT8_C( 20), INT8_C( 64), INT8_C( 32), -INT8_C( 3), INT8_C( 0), INT8_C( 54), -INT8_C( 8) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_sha_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = simde_test_x86_random_i8x16();
simde__m128i nmask = simde_mm_cmplt_epi8(b, simde_mm_setzero_si128());
b = simde_mm_and_si128(b, simde_mm_set1_epi8(7));
b = simde_mm_or_si128(simde_mm_and_si128(nmask, simde_mm_sub_epi8(simde_mm_setzero_si128(), b)), simde_mm_andnot_si128(nmask, b));
simde__m128i r = simde_mm_sha_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_sha_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 9769), INT16_C( 9461), INT16_C( 27455), INT16_C( 21533), -INT16_C( 31746), -INT16_C( 10727), INT16_C( 12116), -INT16_C( 12978) },
{ INT16_C( 10), -INT16_C( 7), -INT16_C( 12), -INT16_C( 2), -INT16_C( 2), INT16_C( 11), -INT16_C( 9), -INT16_C( 10) },
{ INT16_C( 23552), INT16_C( 73), INT16_C( 6), INT16_C( 5383), -INT16_C( 7937), -INT16_C( 14336), INT16_C( 23), -INT16_C( 13) } },
{ { -INT16_C( 10124), INT16_C( 11638), INT16_C( 32131), -INT16_C( 27315), -INT16_C( 26684), -INT16_C( 16471), INT16_C( 16328), INT16_C( 10960) },
{ -INT16_C( 16), -INT16_C( 4), INT16_C( 12), -INT16_C( 12), INT16_C( 3), INT16_C( 7), -INT16_C( 10), INT16_C( 6) },
{ -INT16_C( 1), INT16_C( 727), INT16_C( 12288), -INT16_C( 7), -INT16_C( 16864), -INT16_C( 11136), INT16_C( 15), -INT16_C( 19456) } },
{ { -INT16_C( 24604), -INT16_C( 15907), -INT16_C( 4249), -INT16_C( 15974), INT16_C( 29959), INT16_C( 17691), INT16_C( 21670), INT16_C( 9608) },
{ -INT16_C( 8), -INT16_C( 4), INT16_C( 1), -INT16_C( 5), -INT16_C( 6), -INT16_C( 13), -INT16_C( 11), INT16_C( 15) },
{ -INT16_C( 97), -INT16_C( 995), -INT16_C( 8498), -INT16_C( 500), INT16_C( 468), INT16_C( 2), INT16_C( 10), INT16_C( 0) } },
{ { -INT16_C( 18866), -INT16_C( 22380), -INT16_C( 13421), INT16_C( 8939), -INT16_C( 22802), INT16_C( 12501), INT16_C( 29590), INT16_C( 1630) },
{ -INT16_C( 14), -INT16_C( 12), -INT16_C( 13), -INT16_C( 2), -INT16_C( 12), INT16_C( 8), -INT16_C( 10), -INT16_C( 7) },
{ -INT16_C( 2), -INT16_C( 6), -INT16_C( 2), INT16_C( 2234), -INT16_C( 6), -INT16_C( 11008), INT16_C( 28), INT16_C( 12) } },
{ { -INT16_C( 22821), -INT16_C( 22015), INT16_C( 6574), -INT16_C( 473), -INT16_C( 20062), INT16_C( 18497), -INT16_C( 22977), INT16_C( 5178) },
{ -INT16_C( 16), -INT16_C( 5), INT16_C( 4), INT16_C( 5), INT16_C( 1), -INT16_C( 1), -INT16_C( 6), INT16_C( 13) },
{ -INT16_C( 1), -INT16_C( 688), -INT16_C( 25888), -INT16_C( 15136), INT16_C( 25412), INT16_C( 9248), -INT16_C( 360), INT16_C( 16384) } },
{ { -INT16_C( 2382), -INT16_C( 28786), -INT16_C( 8352), -INT16_C( 25032), INT16_C( 7754), INT16_C( 21702), -INT16_C( 2998), -INT16_C( 26620) },
{ INT16_C( 2), INT16_C( 11), -INT16_C( 11), -INT16_C( 8), -INT16_C( 13), -INT16_C( 15), INT16_C( 2), -INT16_C( 12) },
{ -INT16_C( 9528), INT16_C( 28672), -INT16_C( 5), -INT16_C( 98), INT16_C( 0), INT16_C( 0), -INT16_C( 11992), -INT16_C( 7) } },
{ { INT16_C( 12029), INT16_C( 7842), INT16_C( 10067), INT16_C( 18949), INT16_C( 30223), INT16_C( 7883), INT16_C( 26206), -INT16_C( 9564) },
{ -INT16_C( 6), -INT16_C( 3), INT16_C( 6), INT16_C( 2), -INT16_C( 5), -INT16_C( 8), INT16_C( 14), -INT16_C( 8) },
{ INT16_C( 187), INT16_C( 980), -INT16_C( 11072), INT16_C( 10260), INT16_C( 944), INT16_C( 30), INT16_MIN, -INT16_C( 38) } },
{ { -INT16_C( 10271), INT16_C( 8356), -INT16_C( 2004), INT16_C( 18806), INT16_C( 16409), INT16_C( 27834), INT16_C( 548), INT16_C( 8707) },
{ INT16_C( 9), INT16_C( 10), -INT16_C( 7), INT16_C( 10), INT16_C( 10), INT16_C( 11), INT16_C( 1), INT16_C( 0) },
{ -INT16_C( 15872), -INT16_C( 28672), -INT16_C( 16), -INT16_C( 10240), INT16_C( 25600), -INT16_C( 12288), INT16_C( 1096), INT16_C( 8707) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_sha_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_mm_srai_epi16(simde_test_x86_random_i16x8(), 11);
simde__m128i r = simde_mm_sha_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_sha_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 376500546), INT32_C( 246411337), -INT32_C( 550133744), INT32_C( 2017512208) },
{ -INT32_C( 12), -INT32_C( 2), -INT32_C( 21), INT32_C( 27) },
{ -INT32_C( 91920), INT32_C( 61602834), -INT32_C( 263), INT32_MIN } },
{ { -INT32_C( 1923793596), INT32_C( 1033569325), -INT32_C( 1273114460), -INT32_C( 1909695076) },
{ INT32_C( 16), -INT32_C( 9), -INT32_C( 8), -INT32_C( 29) },
{ INT32_C( 1027866624), INT32_C( 2018690), -INT32_C( 4973104), -INT32_C( 4) } },
{ { -INT32_C( 1491295367), INT32_C( 1273280423), INT32_C( 620691848), -INT32_C( 1062065314) },
{ INT32_C( 21), INT32_C( 6), -INT32_C( 24), INT32_C( 29) },
{ INT32_C( 1864368128), -INT32_C( 114431552), INT32_C( 36), -INT32_C( 1073741824) } },
{ { -INT32_C( 1809953555), -INT32_C( 1931541756), INT32_C( 1672535556), -INT32_C( 1759288823) },
{ INT32_C( 23), -INT32_C( 17), -INT32_C( 8), -INT32_C( 21) },
{ INT32_C( 1988100096), -INT32_C( 14737), INT32_C( 6533342), -INT32_C( 839) } },
{ { -INT32_C( 582977575), INT32_C( 2137596026), INT32_C( 149035518), -INT32_C( 224459397) },
{ -INT32_C( 27), -INT32_C( 28), -INT32_C( 2), INT32_C( 4) },
{ -INT32_C( 5), INT32_C( 7), INT32_C( 37258879), INT32_C( 703616944) } },
{ { -INT32_C( 1091574461), INT32_C( 71129093), -INT32_C( 334749839), INT32_C( 1373547300) },
{ -INT32_C( 7), INT32_C( 11), INT32_C( 6), -INT32_C( 2) },
{ -INT32_C( 8527926), -INT32_C( 356505600), INT32_C( 50846784), INT32_C( 343386825) } },
{ { -INT32_C( 1212670798), -INT32_C( 440666764), INT32_C( 953272084), -INT32_C( 1416974221) },
{ -INT32_C( 12), -INT32_C( 31), -INT32_C( 22), -INT32_C( 23) },
{ -INT32_C( 296063), -INT32_C( 1), INT32_C( 227), -INT32_C( 169) } },
{ { INT32_C( 1599953899), INT32_C( 1682184528), INT32_C( 1402803680), -INT32_C( 1543624763) },
{ INT32_C( 14), -INT32_C( 30), -INT32_C( 28), INT32_C( 7) },
{ INT32_C( 1459273728), INT32_C( 1), INT32_C( 5), -INT32_C( 15474048) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_sha_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 26);
simde__m128i r = simde_mm_sha_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_sha_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 8221108173063482573), INT64_C( 4845837656533272023) },
{ INT64_C( 3), -INT64_C( 30) },
{ INT64_C( 8018110910330345880), INT64_C( 4513038002) } },
{ { INT64_C( 961305450510644510), -INT64_C( 8812443758950205245) },
{ -INT64_C( 29), INT64_C( 12) },
{ INT64_C( 1790570934), INT64_C( 4508515589551828992) } },
{ { -INT64_C( 6151448808215369635), -INT64_C( 3278957846999708703) },
{ INT64_C( 56), INT64_C( 5) },
{ INT64_C( 6701356245527298048), INT64_C( 5753813338266631200) } },
{ { -INT64_C( 3451738709977447032), -INT64_C( 123770926729252287) },
{ INT64_C( 60), INT64_C( 3) },
{ INT64_MIN, -INT64_C( 990167413834018296) } },
{ { INT64_C( 2263339044755073193), -INT64_C( 4094091507247271888) },
{ -INT64_C( 31), INT64_C( 3) },
{ INT64_C( 1053949373), INT64_C( 4140756089440928128) } },
{ { INT64_C( 5500381801624903000), -INT64_C( 8739328771901035912) },
{ -INT64_C( 18), -INT64_C( 59) },
{ INT64_C( 20982291418552), -INT64_C( 16) } },
{ { -INT64_C( 3312094770503019871), INT64_C( 8524321440793789949) },
{ INT64_C( 20), -INT64_C( 7) },
{ INT64_C( 3867426396428042240), INT64_C( 66596261256201483) } },
{ { INT64_C( 8596504695728662048), -INT64_C( 642457255756951952) },
{ -INT64_C( 30), -INT64_C( 57) },
{ INT64_C( 8006118885), -INT64_C( 5) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_sha_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = simde_mm_cvtepi32_epi64(simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 25));
simde__m128i r = simde_mm_sha_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_shl_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 40), -INT8_C( 16), INT8_C( 92), -INT8_C( 19), -INT8_C( 16), INT8_C( 53), INT8_C( 44), -INT8_C( 29),
INT8_C( 29), -INT8_C( 62), -INT8_C( 120), INT8_C( 6), INT8_C( 80), -INT8_C( 106), INT8_C( 4), -INT8_C( 23) },
{ -INT8_C( 6), -INT8_C( 3), -INT8_C( 2), -INT8_C( 6), -INT8_C( 3), INT8_C( 2), INT8_C( 0), INT8_C( 0),
-INT8_C( 2), INT8_C( 7), -INT8_C( 7), INT8_C( 5), INT8_C( 2), -INT8_C( 6), -INT8_C( 5), INT8_C( 6) },
{ INT8_C( 3), INT8_C( 30), INT8_C( 23), INT8_C( 3), INT8_C( 30), -INT8_C( 44), INT8_C( 44), -INT8_C( 29),
INT8_C( 7), INT8_C( 0), INT8_C( 1), -INT8_C( 64), INT8_C( 64), INT8_C( 2), INT8_C( 0), INT8_C( 64) } },
{ { INT8_C( 83), INT8_C( 87), -INT8_C( 90), -INT8_C( 102), INT8_C( 74), INT8_C( 6), INT8_C( 30), -INT8_C( 33),
-INT8_C( 80), INT8_C( 110), INT8_C( 82), INT8_C( 66), -INT8_C( 54), -INT8_C( 106), -INT8_C( 73), -INT8_C( 78) },
{ -INT8_C( 5), INT8_C( 4), -INT8_C( 3), INT8_C( 0), INT8_C( 0), INT8_C( 2), -INT8_C( 3), INT8_C( 1),
INT8_C( 6), -INT8_C( 7), -INT8_C( 5), -INT8_C( 7), -INT8_C( 4), -INT8_C( 7), INT8_C( 7), INT8_C( 5) },
{ INT8_C( 2), INT8_C( 112), INT8_C( 20), -INT8_C( 102), INT8_C( 74), INT8_C( 24), INT8_C( 3), -INT8_C( 66),
INT8_C( 0), INT8_C( 0), INT8_C( 2), INT8_C( 0), INT8_C( 12), INT8_C( 1), INT8_MIN, INT8_C( 64) } },
{ { INT8_C( 96), INT8_C( 69), -INT8_C( 105), -INT8_C( 111), INT8_C( 3), -INT8_C( 8), -INT8_C( 20), -INT8_C( 121),
-INT8_C( 127), -INT8_C( 93), -INT8_C( 67), -INT8_C( 36), INT8_C( 110), INT8_C( 90), INT8_C( 97), -INT8_C( 40) },
{ INT8_C( 2), INT8_C( 2), -INT8_C( 6), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 6), INT8_C( 2),
INT8_C( 4), -INT8_C( 5), INT8_C( 7), -INT8_C( 2), INT8_C( 3), INT8_C( 0), -INT8_C( 2), INT8_C( 5) },
{ INT8_MIN, INT8_C( 20), INT8_C( 2), -INT8_C( 111), INT8_C( 3), -INT8_C( 8), INT8_C( 0), INT8_C( 28),
INT8_C( 16), INT8_C( 5), INT8_MIN, INT8_C( 55), INT8_C( 112), INT8_C( 90), INT8_C( 24), INT8_C( 0) } },
{ { INT8_C( 40), INT8_C( 68), -INT8_C( 105), -INT8_C( 100), -INT8_C( 60), INT8_C( 19), INT8_C( 126), INT8_C( 35),
-INT8_C( 75), -INT8_C( 20), INT8_C( 49), -INT8_C( 102), -INT8_C( 29), -INT8_C( 23), -INT8_C( 24), -INT8_C( 92) },
{ INT8_C( 7), INT8_C( 4), INT8_C( 5), -INT8_C( 7), INT8_C( 4), -INT8_C( 3), INT8_C( 1), INT8_C( 3),
INT8_C( 2), INT8_C( 1), INT8_C( 7), -INT8_C( 6), INT8_C( 0), -INT8_C( 7), INT8_C( 0), -INT8_C( 7) },
{ INT8_C( 0), INT8_C( 64), -INT8_C( 32), INT8_C( 1), INT8_C( 64), INT8_C( 2), -INT8_C( 4), INT8_C( 24),
-INT8_C( 44), -INT8_C( 40), INT8_MIN, INT8_C( 2), -INT8_C( 29), INT8_C( 1), -INT8_C( 24), INT8_C( 1) } },
{ { -INT8_C( 45), -INT8_C( 37), INT8_C( 14), -INT8_C( 127), INT8_C( 53), INT8_C( 96), -INT8_C( 68), -INT8_C( 5),
INT8_C( 119), -INT8_C( 50), INT8_C( 22), INT8_C( 70), -INT8_C( 47), INT8_C( 76), INT8_C( 54), INT8_C( 94) },
{ INT8_C( 1), INT8_C( 2), INT8_C( 6), INT8_C( 4), INT8_C( 3), -INT8_C( 4), INT8_C( 5), -INT8_C( 4),
INT8_C( 1), -INT8_C( 4), -INT8_C( 3), INT8_C( 3), INT8_C( 3), INT8_C( 6), INT8_C( 7), -INT8_C( 3) },
{ -INT8_C( 90), INT8_C( 108), INT8_MIN, INT8_C( 16), -INT8_C( 88), INT8_C( 6), INT8_MIN, INT8_C( 15),
-INT8_C( 18), INT8_C( 12), INT8_C( 2), INT8_C( 48), -INT8_C( 120), INT8_C( 0), INT8_C( 0), INT8_C( 11) } },
{ { -INT8_C( 120), -INT8_C( 109), INT8_C( 100), INT8_C( 9), -INT8_C( 3), -INT8_C( 26), -INT8_C( 113), INT8_C( 86),
-INT8_C( 19), -INT8_C( 45), -INT8_C( 44), -INT8_C( 90), -INT8_C( 30), -INT8_C( 119), INT8_C( 49), INT8_C( 78) },
{ -INT8_C( 3), -INT8_C( 5), INT8_C( 3), -INT8_C( 1), -INT8_C( 6), INT8_C( 1), INT8_C( 0), INT8_C( 4),
INT8_C( 0), INT8_C( 5), INT8_C( 5), INT8_C( 0), INT8_C( 3), -INT8_C( 5), -INT8_C( 1), INT8_C( 0) },
{ INT8_C( 17), INT8_C( 4), INT8_C( 32), INT8_C( 4), INT8_C( 3), -INT8_C( 52), -INT8_C( 113), INT8_C( 96),
-INT8_C( 19), INT8_C( 96), INT8_MIN, -INT8_C( 90), INT8_C( 16), INT8_C( 4), INT8_C( 24), INT8_C( 78) } },
{ { INT8_C( 111), -INT8_C( 14), INT8_C( 1), -INT8_C( 4), -INT8_C( 60), -INT8_C( 82), -INT8_C( 35), INT8_C( 126),
INT8_C( 63), -INT8_C( 126), -INT8_C( 45), -INT8_C( 125), -INT8_C( 68), -INT8_C( 86), -INT8_C( 61), -INT8_C( 69) },
{ INT8_C( 2), -INT8_C( 4), -INT8_C( 3), INT8_C( 4), INT8_C( 5), -INT8_C( 4), INT8_C( 3), -INT8_C( 4),
INT8_C( 0), INT8_C( 4), INT8_C( 4), INT8_C( 6), -INT8_C( 1), INT8_C( 2), INT8_C( 4), INT8_C( 0) },
{ -INT8_C( 68), INT8_C( 15), INT8_C( 0), -INT8_C( 64), INT8_MIN, INT8_C( 10), -INT8_C( 24), INT8_C( 7),
INT8_C( 63), INT8_C( 32), INT8_C( 48), -INT8_C( 64), INT8_C( 94), -INT8_C( 88), INT8_C( 48), -INT8_C( 69) } },
{ { -INT8_C( 79), -INT8_C( 126), INT8_C( 77), INT8_C( 34), INT8_C( 52), -INT8_C( 66), -INT8_C( 112), -INT8_C( 71),
-INT8_C( 106), INT8_C( 99), INT8_C( 123), -INT8_C( 92), INT8_C( 7), -INT8_C( 74), -INT8_C( 45), -INT8_C( 17) },
{ INT8_C( 1), -INT8_C( 7), INT8_C( 6), -INT8_C( 6), -INT8_C( 7), -INT8_C( 5), INT8_C( 7), INT8_C( 4),
INT8_C( 0), INT8_C( 1), INT8_C( 7), INT8_C( 6), INT8_C( 4), -INT8_C( 7), -INT8_C( 2), -INT8_C( 1) },
{ INT8_C( 98), INT8_C( 1), INT8_C( 64), INT8_C( 0), INT8_C( 0), INT8_C( 5), INT8_C( 0), -INT8_C( 112),
-INT8_C( 106), -INT8_C( 58), INT8_MIN, INT8_C( 0), INT8_C( 112), INT8_C( 1), INT8_C( 52), INT8_C( 119) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_shl_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = simde_test_x86_random_i8x16();
simde__m128i nmask = simde_mm_cmplt_epi8(b, simde_mm_setzero_si128());
b = simde_mm_and_si128(b, simde_mm_set1_epi8(7));
b = simde_mm_or_si128(simde_mm_and_si128(nmask, simde_mm_sub_epi8(simde_mm_setzero_si128(), b)), simde_mm_andnot_si128(nmask, b));
simde__m128i r = simde_mm_shl_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_shl_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 13450), INT16_C( 17329), INT16_C( 8435), INT16_C( 20622), -INT16_C( 230), -INT16_C( 11467), -INT16_C( 18836), INT16_C( 12360) },
{ INT16_C( 12), INT16_C( 6), INT16_C( 1), INT16_C( 9), -INT16_C( 10), -INT16_C( 8), INT16_C( 3), -INT16_C( 14) },
{ INT16_C( 24576), -INT16_C( 5056), INT16_C( 16870), INT16_C( 7168), INT16_C( 63), INT16_C( 211), -INT16_C( 19616), INT16_C( 0) } },
{ { INT16_C( 21733), INT16_C( 9875), -INT16_C( 9047), -INT16_C( 29759), -INT16_C( 8718), -INT16_C( 10649), -INT16_C( 20078), -INT16_C( 14580) },
{ -INT16_C( 12), -INT16_C( 12), -INT16_C( 2), INT16_C( 14), INT16_C( 5), INT16_C( 7), INT16_C( 14), -INT16_C( 6) },
{ INT16_C( 5), INT16_C( 2), INT16_C( 14122), INT16_C( 16384), -INT16_C( 16832), INT16_C( 13184), INT16_MIN, INT16_C( 796) } },
{ { -INT16_C( 23257), -INT16_C( 27556), -INT16_C( 1793), -INT16_C( 20209), -INT16_C( 31161), INT16_C( 30331), -INT16_C( 20701), -INT16_C( 1018) },
{ -INT16_C( 3), INT16_C( 0), -INT16_C( 8), INT16_C( 5), INT16_C( 5), INT16_C( 7), -INT16_C( 5), -INT16_C( 6) },
{ INT16_C( 5284), -INT16_C( 27556), INT16_C( 248), INT16_C( 8672), -INT16_C( 14112), INT16_C( 15744), INT16_C( 1401), INT16_C( 1008) } },
{ { INT16_C( 18019), INT16_C( 21877), INT16_C( 32412), INT16_C( 3170), -INT16_C( 32704), INT16_C( 31703), -INT16_C( 17980), INT16_C( 5662) },
{ -INT16_C( 8), INT16_C( 3), -INT16_C( 16), -INT16_C( 9), INT16_C( 7), INT16_C( 15), INT16_C( 9), -INT16_C( 5) },
{ INT16_C( 70), -INT16_C( 21592), INT16_C( 0), INT16_C( 6), INT16_C( 8192), INT16_MIN, -INT16_C( 30720), INT16_C( 176) } },
{ { -INT16_C( 16190), INT16_C( 12612), INT16_C( 29994), -INT16_C( 7519), INT16_C( 21766), -INT16_C( 21019), -INT16_C( 10977), INT16_C( 24380) },
{ -INT16_C( 8), -INT16_C( 11), INT16_C( 6), INT16_C( 13), -INT16_C( 2), -INT16_C( 7), -INT16_C( 6), INT16_C( 6) },
{ INT16_C( 192), INT16_C( 6), INT16_C( 19072), INT16_C( 8192), INT16_C( 5441), INT16_C( 347), INT16_C( 852), -INT16_C( 12544) } },
{ { -INT16_C( 26260), -INT16_C( 4045), -INT16_C( 6578), INT16_C( 31924), -INT16_C( 29504), -INT16_C( 11253), INT16_C( 3804), INT16_C( 7496) },
{ INT16_C( 11), -INT16_C( 15), -INT16_C( 4), -INT16_C( 16), -INT16_C( 7), -INT16_C( 1), INT16_C( 15), INT16_C( 4) },
{ INT16_C( 24576), INT16_C( 1), INT16_C( 3684), INT16_C( 0), INT16_C( 281), INT16_C( 27141), INT16_C( 0), -INT16_C( 11136) } },
{ { INT16_C( 23688), INT16_C( 22953), -INT16_C( 10062), INT16_C( 8834), -INT16_C( 20841), -INT16_C( 18509), INT16_C( 27043), -INT16_C( 26326) },
{ INT16_C( 4), INT16_C( 14), -INT16_C( 13), INT16_C( 8), INT16_C( 11), -INT16_C( 8), INT16_C( 9), -INT16_C( 1) },
{ -INT16_C( 14208), INT16_C( 16384), INT16_C( 6), -INT16_C( 32256), -INT16_C( 18432), INT16_C( 183), INT16_C( 17920), INT16_C( 19605) } },
{ { -INT16_C( 29121), INT16_C( 13582), INT16_C( 21502), INT16_C( 7157), INT16_C( 17075), INT16_C( 8004), -INT16_C( 4070), INT16_C( 7115) },
{ -INT16_C( 12), INT16_C( 6), INT16_C( 11), INT16_C( 0), INT16_C( 3), -INT16_C( 1), INT16_C( 9), -INT16_C( 1) },
{ INT16_C( 8), INT16_C( 17280), -INT16_C( 4096), INT16_C( 7157), INT16_C( 5528), INT16_C( 4002), INT16_C( 13312), INT16_C( 3557) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_shl_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_mm_srai_epi16(simde_test_x86_random_i16x8(), 11);
simde__m128i r = simde_mm_shl_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_shl_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 506189050), -INT32_C( 1680558282), INT32_C( 2102138628), -INT32_C( 2040021441) },
{ INT32_C( 31), INT32_C( 14), INT32_C( 24), INT32_C( 6) },
{ INT32_C( 0), INT32_C( 768442368), INT32_C( 67108864), -INT32_C( 1712353344) } },
{ { -INT32_C( 755302501), -INT32_C( 1167208778), INT32_C( 624474598), -INT32_C( 2035572872) },
{ -INT32_C( 8), -INT32_C( 26), INT32_C( 27), INT32_C( 0) },
{ INT32_C( 13826815), INT32_C( 46), INT32_C( 805306368), -INT32_C( 2035572872) } },
{ { -INT32_C( 539656151), INT32_C( 899236431), INT32_C( 1952109052), INT32_C( 2063206001) },
{ -INT32_C( 27), INT32_C( 21), -INT32_C( 11), -INT32_C( 32) },
{ INT32_C( 27), INT32_C( 1239416832), INT32_C( 953178), INT32_C( 0) } },
{ { INT32_C( 442674635), -INT32_C( 347079441), INT32_C( 1046456781), INT32_C( 666458799) },
{ INT32_C( 21), -INT32_C( 4), INT32_C( 30), -INT32_C( 31) },
{ -INT32_C( 1184890880), INT32_C( 246742990), INT32_C( 1073741824), INT32_C( 0) } },
{ { INT32_C( 1000300364), INT32_C( 690482779), INT32_C( 1197967000), INT32_C( 980295904) },
{ -INT32_C( 18), INT32_C( 14), INT32_C( 25), INT32_C( 24) },
{ INT32_C( 3815), -INT32_C( 74006528), INT32_C( 805306368), -INT32_C( 536870912) } },
{ { INT32_C( 1788709647), INT32_C( 294896761), INT32_C( 727317322), INT32_C( 1332070171) },
{ INT32_C( 3), -INT32_C( 10), INT32_C( 17), -INT32_C( 19) },
{ INT32_C( 1424775288), INT32_C( 287985), -INT32_C( 158072832), INT32_C( 2540) } },
{ { INT32_C( 824263864), INT32_C( 1396946184), -INT32_C( 880894800), INT32_C( 1444668259) },
{ INT32_C( 1), INT32_C( 4), INT32_C( 18), INT32_C( 2) },
{ INT32_C( 1648527728), INT32_C( 876302464), INT32_C( 1925185536), INT32_C( 1483705740) } },
{ { INT32_C( 1262166594), -INT32_C( 2019655977), INT32_C( 2102598682), -INT32_C( 690721025) },
{ INT32_C( 29), -INT32_C( 32), INT32_C( 13), INT32_C( 6) },
{ INT32_C( 1073741824), -INT32_C( 0), INT32_C( 1669545984), -INT32_C( 1256472640) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_shl_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 26);
simde__m128i r = simde_mm_shl_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_shl_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { INT64_C( 1391336280736300016), -INT64_C( 6559944687295028704) },
{ INT64_C( 62), INT64_C( 61) },
{ INT64_C( 0), INT64_C( 0) } },
{ { -INT64_C( 541940659597814931), INT64_C( 1007413717779286854) },
{ INT64_C( 59), INT64_C( 20) },
{ INT64_C( 7493989779944505344), -INT64_C( 2952846843981070336) } },
{ { -INT64_C( 4789328101045054279), -INT64_C( 8112091591502159633) },
{ -INT64_C( 23), -INT64_C( 19) },
{ INT64_C( 1628090855200), INT64_C( 19711785282530) } },
{ { INT64_C( 7734700898225788962), -INT64_C( 7131107535778845747) },
{ -INT64_C( 40), -INT64_C( 49) },
{ INT64_C( 7034669), INT64_C( 20100) } },
{ { -INT64_C( 1262209519863925612), -INT64_C( 6179375759096265433) },
{ -INT64_C( 61), -INT64_C( 3) },
{ INT64_C( 7), INT64_C( 1533421039326660772) } },
{ { -INT64_C( 682282357267360903), -INT64_C( 1983599911717310127) },
{ -INT64_C( 49), -INT64_C( 6) },
{ INT64_C( 31556), INT64_C( 257236627531128773) } },
{ { -INT64_C( 2710056978198528354), INT64_C( 6136472046163000034) },
{ -INT64_C( 43), -INT64_C( 47) },
{ INT64_C( 1789054), INT64_C( 43602) } },
{ { -INT64_C( 5052911414569539972), -INT64_C( 7308454166727325587) },
{ -INT64_C( 17), INT64_C( 55) },
{ INT64_C( 102186833642120), INT64_C( 3927138875067072512) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_shl_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = simde_mm_cvtepi32_epi64(simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 25));
simde__m128i r = simde_mm_shl_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_rot_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t r[16];
} test_vec[] = {
{ { INT8_C( 40), -INT8_C( 46), INT8_C( 71), INT8_C( 124), INT8_C( 83), -INT8_C( 38), -INT8_C( 51), INT8_C( 79),
-INT8_C( 23), INT8_C( 46), -INT8_C( 45), INT8_C( 115), INT8_C( 24), INT8_C( 13), INT8_C( 46), -INT8_C( 68) },
{ INT8_C( 6), -INT8_C( 2), INT8_C( 6), INT8_C( 2), INT8_C( 0), -INT8_C( 4), -INT8_C( 2), INT8_C( 1),
INT8_C( 6), INT8_C( 0), INT8_C( 4), INT8_C( 7), -INT8_C( 3), -INT8_C( 3), INT8_C( 0), INT8_C( 6) },
{ INT8_C( 10), -INT8_C( 76), -INT8_C( 47), -INT8_C( 15), INT8_C( 83), -INT8_C( 83), INT8_C( 115), -INT8_C( 98),
INT8_C( 122), INT8_C( 46), INT8_C( 61), -INT8_C( 71), INT8_C( 3), -INT8_C( 95), INT8_C( 46), INT8_C( 47) } },
{ { INT8_C( 116), -INT8_C( 62), -INT8_C( 13), INT8_C( 3), INT8_C( 31), INT8_C( 85), -INT8_C( 63), INT8_C( 69),
-INT8_C( 114), -INT8_C( 92), INT8_C( 63), -INT8_C( 54), INT8_C( 68), -INT8_C( 8), INT8_C( 35), -INT8_C( 66) },
{ -INT8_C( 7), -INT8_C( 5), INT8_C( 1), -INT8_C( 6), -INT8_C( 7), -INT8_C( 6), -INT8_C( 7), -INT8_C( 4),
-INT8_C( 5), -INT8_C( 2), -INT8_C( 3), INT8_C( 3), INT8_C( 7), INT8_C( 6), -INT8_C( 3), -INT8_C( 6) },
{ -INT8_C( 24), INT8_C( 22), -INT8_C( 25), INT8_C( 12), INT8_C( 62), INT8_C( 85), -INT8_C( 125), INT8_C( 84),
INT8_C( 116), INT8_C( 41), -INT8_C( 25), INT8_C( 86), INT8_C( 34), INT8_C( 62), INT8_C( 100), -INT8_C( 6) } },
{ { INT8_C( 84), INT8_C( 59), INT8_C( 70), -INT8_C( 44), INT8_C( 75), -INT8_C( 15), -INT8_C( 111), -INT8_C( 25),
INT8_C( 113), -INT8_C( 92), INT8_C( 76), INT8_C( 125), -INT8_C( 102), -INT8_C( 90), INT8_C( 14), INT8_C( 30) },
{ INT8_C( 7), INT8_C( 5), INT8_C( 6), INT8_C( 0), -INT8_C( 1), INT8_C( 6), -INT8_C( 4), INT8_C( 7),
INT8_C( 5), INT8_C( 2), INT8_C( 0), INT8_C( 0), INT8_C( 1), INT8_C( 0), INT8_C( 1), INT8_C( 0) },
{ INT8_C( 42), INT8_C( 103), -INT8_C( 111), -INT8_C( 44), -INT8_C( 91), INT8_C( 124), INT8_C( 25), -INT8_C( 13),
INT8_C( 46), -INT8_C( 110), INT8_C( 76), INT8_C( 125), INT8_C( 53), -INT8_C( 90), INT8_C( 28), INT8_C( 30) } },
{ { -INT8_C( 18), -INT8_C( 60), -INT8_C( 88), -INT8_C( 71), INT8_C( 126), -INT8_C( 74), INT8_C( 38), INT8_C( 125),
-INT8_C( 73), -INT8_C( 74), INT8_C( 98), INT8_C( 86), -INT8_C( 63), INT8_C( 31), -INT8_C( 40), INT8_C( 37) },
{ INT8_C( 5), -INT8_C( 1), INT8_C( 7), -INT8_C( 1), -INT8_C( 7), -INT8_C( 3), INT8_C( 2), INT8_C( 2),
INT8_C( 5), INT8_C( 0), INT8_C( 1), INT8_C( 6), INT8_C( 0), INT8_C( 2), INT8_C( 0), INT8_C( 4) },
{ -INT8_C( 35), INT8_C( 98), INT8_C( 84), -INT8_C( 36), -INT8_C( 4), -INT8_C( 42), -INT8_C( 104), -INT8_C( 11),
-INT8_C( 10), -INT8_C( 74), -INT8_C( 60), -INT8_C( 107), -INT8_C( 63), INT8_C( 124), -INT8_C( 40), INT8_C( 82) } },
{ { INT8_C( 106), -INT8_C( 27), -INT8_C( 127), INT8_C( 120), INT8_C( 96), -INT8_C( 83), INT8_C( 102), INT8_C( 79),
-INT8_C( 117), INT8_C( 98), -INT8_C( 23), INT8_C( 27), INT8_C( 98), INT8_C( 107), INT8_C( 103), INT8_C( 24) },
{ INT8_C( 2), -INT8_C( 1), INT8_C( 2), INT8_C( 0), INT8_C( 0), -INT8_C( 5), -INT8_C( 7), INT8_C( 5),
INT8_C( 6), -INT8_C( 5), INT8_C( 0), -INT8_C( 5), -INT8_C( 4), INT8_C( 3), -INT8_C( 2), -INT8_C( 2) },
{ -INT8_C( 87), -INT8_C( 14), INT8_C( 6), INT8_C( 120), INT8_C( 96), INT8_C( 109), -INT8_C( 52), -INT8_C( 23),
-INT8_C( 30), INT8_C( 19), -INT8_C( 23), -INT8_C( 40), INT8_C( 38), INT8_C( 91), -INT8_C( 39), INT8_C( 6) } },
{ { -INT8_C( 15), INT8_C( 38), INT8_C( 57), -INT8_C( 38), -INT8_C( 102), -INT8_C( 35), INT8_C( 58), -INT8_C( 92),
INT8_C( 19), INT8_C( 49), INT8_C( 73), -INT8_C( 107), INT8_C( 36), -INT8_C( 109), -INT8_C( 91), INT8_C( 66) },
{ INT8_C( 5), -INT8_C( 6), INT8_C( 1), INT8_C( 7), INT8_C( 5), -INT8_C( 5), INT8_C( 4), -INT8_C( 7),
-INT8_C( 7), INT8_C( 0), -INT8_C( 3), INT8_C( 4), -INT8_C( 6), INT8_C( 3), INT8_C( 6), -INT8_C( 2) },
{ INT8_C( 62), -INT8_C( 104), INT8_C( 114), INT8_C( 109), INT8_C( 83), -INT8_C( 18), -INT8_C( 93), INT8_C( 73),
INT8_C( 38), INT8_C( 49), INT8_C( 41), INT8_C( 89), -INT8_C( 112), -INT8_C( 100), INT8_C( 105), -INT8_C( 112) } },
{ { -INT8_C( 85), INT8_C( 16), INT8_C( 56), -INT8_C( 89), -INT8_C( 44), INT8_C( 79), -INT8_C( 118), -INT8_C( 58),
INT8_C( 119), -INT8_C( 86), -INT8_C( 21), -INT8_C( 116), -INT8_C( 80), -INT8_C( 98), INT8_C( 121), -INT8_C( 22) },
{ -INT8_C( 7), INT8_C( 6), -INT8_C( 3), -INT8_C( 4), INT8_C( 5), INT8_C( 2), -INT8_C( 2), INT8_C( 1),
INT8_C( 1), -INT8_C( 1), -INT8_C( 4), -INT8_C( 5), INT8_C( 6), INT8_C( 3), INT8_C( 3), -INT8_C( 3) },
{ INT8_C( 87), INT8_C( 4), INT8_C( 7), INT8_C( 122), -INT8_C( 102), INT8_C( 61), -INT8_C( 94), -INT8_C( 115),
-INT8_C( 18), INT8_C( 85), -INT8_C( 66), INT8_C( 100), INT8_C( 44), -INT8_C( 12), -INT8_C( 53), INT8_C( 93) } },
{ { -INT8_C( 65), INT8_C( 42), -INT8_C( 26), -INT8_C( 89), -INT8_C( 75), INT8_C( 9), INT8_C( 63), -INT8_C( 5),
-INT8_C( 32), INT8_C( 86), INT8_C( 53), -INT8_C( 56), -INT8_C( 83), -INT8_C( 108), -INT8_C( 54), INT8_C( 87) },
{ INT8_C( 7), -INT8_C( 4), INT8_C( 0), INT8_C( 0), INT8_C( 1), INT8_C( 5), INT8_C( 7), -INT8_C( 3),
-INT8_C( 3), INT8_C( 1), -INT8_C( 2), INT8_C( 6), INT8_C( 3), -INT8_C( 2), -INT8_C( 3), INT8_C( 6) },
{ -INT8_C( 33), -INT8_C( 94), -INT8_C( 26), -INT8_C( 89), INT8_C( 107), INT8_C( 33), -INT8_C( 97), INT8_MAX,
INT8_C( 28), -INT8_C( 84), INT8_C( 77), INT8_C( 50), INT8_C( 109), INT8_C( 37), INT8_C( 89), -INT8_C( 43) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i r = simde_mm_rot_epi8(a, b);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = simde_test_x86_random_i8x16();
simde__m128i nmask = simde_mm_cmplt_epi8(b, simde_mm_setzero_si128());
b = simde_mm_and_si128(b, simde_mm_set1_epi8(7));
b = simde_mm_or_si128(simde_mm_and_si128(nmask, simde_mm_sub_epi8(simde_mm_setzero_si128(), b)), simde_mm_andnot_si128(nmask, b));
simde__m128i r = simde_mm_rot_epi8(a, b);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_rot_epi16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int16_t a[8];
const int16_t b[8];
const int16_t r[8];
} test_vec[] = {
{ { -INT16_C( 939), -INT16_C( 24148), INT16_C( 5606), -INT16_C( 29633), -INT16_C( 17546), INT16_C( 4240), INT16_C( 32196), -INT16_C( 11646) },
{ -INT16_C( 9), -INT16_C( 4), -INT16_C( 10), -INT16_C( 4), -INT16_C( 10), INT16_C( 14), -INT16_C( 9), -INT16_C( 10) },
{ INT16_C( 11006), -INT16_C( 13798), INT16_C( 31109), -INT16_C( 1853), -INT16_C( 8786), INT16_C( 1060), -INT16_C( 7618), -INT16_C( 24396) } },
{ { INT16_C( 3991), INT16_C( 24560), INT16_C( 31503), -INT16_C( 16012), INT16_C( 25440), INT16_C( 11621), INT16_C( 25245), -INT16_C( 23672) },
{ INT16_C( 0), -INT16_C( 11), -INT16_C( 7), -INT16_C( 16), INT16_C( 14), -INT16_C( 16), INT16_C( 15), -INT16_C( 11) },
{ INT16_C( 3991), -INT16_C( 501), INT16_C( 7926), -INT16_C( 16012), INT16_C( 6360), INT16_C( 11621), -INT16_C( 20146), INT16_C( 28948) } },
{ { -INT16_C( 5461), -INT16_C( 22757), INT16_C( 16855), -INT16_C( 7739), -INT16_C( 10553), -INT16_C( 6118), INT16_C( 19167), INT16_C( 4804) },
{ INT16_C( 10), INT16_C( 12), -INT16_C( 8), -INT16_C( 9), -INT16_C( 9), INT16_C( 2), INT16_C( 9), INT16_C( 12) },
{ -INT16_C( 20566), -INT16_C( 17807), -INT16_C( 10431), -INT16_C( 7440), INT16_C( 25579), -INT16_C( 24469), -INT16_C( 16747), INT16_C( 16684) } },
{ { INT16_C( 5817), INT16_C( 17046), INT16_C( 29158), INT16_C( 13849), -INT16_C( 25902), INT16_C( 1817), INT16_C( 15922), INT16_C( 26398) },
{ INT16_C( 7), -INT16_C( 6), -INT16_C( 11), -INT16_C( 8), INT16_C( 3), -INT16_C( 2), INT16_C( 4), INT16_C( 4) },
{ INT16_C( 23691), INT16_C( 22794), INT16_C( 15566), INT16_C( 6454), -INT16_C( 10604), INT16_C( 16838), -INT16_C( 7389), INT16_C( 29158) } },
{ { INT16_C( 6634), -INT16_C( 1848), INT16_C( 4837), INT16_C( 1626), INT16_C( 14762), INT16_C( 21192), INT16_C( 17728), -INT16_C( 5762) },
{ INT16_C( 7), -INT16_C( 8), -INT16_C( 15), -INT16_C( 3), INT16_C( 3), -INT16_C( 5), INT16_C( 3), INT16_C( 7) },
{ -INT16_C( 2804), -INT16_C( 14088), INT16_C( 9674), INT16_C( 16587), -INT16_C( 12975), INT16_C( 17046), INT16_C( 10754), -INT16_C( 16524) } },
{ { INT16_C( 32101), -INT16_C( 28648), INT16_C( 11644), -INT16_C( 26001), INT16_C( 15222), -INT16_C( 27759), INT16_C( 26542), -INT16_C( 7732) },
{ -INT16_C( 4), -INT16_C( 1), INT16_C( 12), INT16_C( 15), INT16_C( 8), -INT16_C( 12), INT16_C( 5), -INT16_C( 3) },
{ INT16_C( 22486), INT16_C( 18444), -INT16_C( 15657), -INT16_C( 13001), INT16_C( 30267), INT16_C( 14617), -INT16_C( 2612), -INT16_C( 25543) } },
{ { -INT16_C( 13997), -INT16_C( 11024), -INT16_C( 13998), INT16_C( 14912), INT16_C( 9823), -INT16_C( 28453), -INT16_C( 21465), -INT16_C( 26640) },
{ -INT16_C( 9), INT16_C( 7), INT16_C( 8), -INT16_C( 9), INT16_C( 2), INT16_C( 1), INT16_C( 12), INT16_C( 15) },
{ -INT16_C( 22044), INT16_C( 30826), INT16_C( 21193), INT16_C( 8221), -INT16_C( 26244), INT16_C( 8631), INT16_C( 31426), INT16_C( 19448) } },
{ { -INT16_C( 31012), -INT16_C( 30025), -INT16_C( 4592), INT16_C( 11701), -INT16_C( 31603), INT16_C( 4621), INT16_C( 7505), INT16_C( 21458) },
{ INT16_C( 8), INT16_C( 10), INT16_C( 5), -INT16_C( 2), INT16_C( 4), -INT16_C( 5), -INT16_C( 6), INT16_C( 6) },
{ -INT16_C( 9082), -INT16_C( 8662), -INT16_C( 15843), INT16_C( 19309), INT16_C( 18648), INT16_C( 26768), INT16_C( 17525), -INT16_C( 2924) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi16(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi16(test_vec[i].b);
simde__m128i r = simde_mm_rot_epi16(a, b);
simde_test_x86_assert_equal_i16x8(r, simde_mm_loadu_epi16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i16x8();
simde__m128i b = simde_mm_srai_epi16(simde_test_x86_random_i16x8(), 11);
simde__m128i r = simde_mm_rot_epi16(a, b);
simde_test_x86_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_rot_epi32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int32_t a[4];
const int32_t b[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 1216512066), INT32_C( 1579107551), INT32_C( 618115230), INT32_C( 73084345) },
{ -INT32_C( 28), INT32_C( 3), INT32_C( 15), -INT32_C( 1) },
{ INT32_C( 2010643435), -INT32_C( 252041478), -INT32_C( 665906581), -INT32_C( 2110941476) } },
{ { INT32_C( 850848595), -INT32_C( 846146257), INT32_C( 1056073605), INT32_C( 507661716) },
{ INT32_C( 7), -INT32_C( 15), INT32_C( 19), INT32_C( 1) },
{ INT32_C( 1534437785), -INT32_C( 1436574943), INT32_C( 1009383315), INT32_C( 1015323432) } },
{ { -INT32_C( 1925709218), INT32_C( 1566296280), -INT32_C( 996389585), INT32_C( 736288410) },
{ -INT32_C( 13), -INT32_C( 25), INT32_C( 0), INT32_C( 27) },
{ INT32_C( 318007744), -INT32_C( 1377539026), -INT32_C( 996389585), -INT32_C( 782297356) } },
{ { INT32_C( 301679161), INT32_C( 980309514), INT32_C( 1040059043), -INT32_C( 496443159) },
{ INT32_C( 0), INT32_C( 27), -INT32_C( 3), -INT32_C( 2) },
{ INT32_C( 301679161), INT32_C( 1372811952), INT32_C( 1740620116), INT32_C( 2023372858) } },
{ { -INT32_C( 955621956), INT32_C( 1442937011), INT32_C( 1821638531), INT32_C( 1380907999) },
{ -INT32_C( 14), INT32_C( 11), INT32_C( 15), -INT32_C( 9) },
{ INT32_C( 1995643945), INT32_C( 197499568), -INT32_C( 4082103), -INT32_C( 274126979) } },
{ { -INT32_C( 1750711836), INT32_C( 1022273465), -INT32_C( 2052554330), INT32_C( 668465021) },
{ INT32_C( 16), -INT32_C( 25), -INT32_C( 4), -INT32_C( 1) },
{ INT32_C( 1105500070), INT32_C( 2001984670), INT32_C( 1750763546), -INT32_C( 1813251138) } },
{ { INT32_C( 244741972), -INT32_C( 1001749474), -INT32_C( 2109082875), -INT32_C( 508944150) },
{ INT32_C( 27), -INT32_C( 28), INT32_C( 16), INT32_C( 19) },
{ -INT32_C( 1602964550), INT32_C( 1151877612), -INT32_C( 217742775), INT32_C( 123145553) } },
{ { -INT32_C( 379726389), INT32_C( 1605216345), -INT32_C( 2048788837), INT32_C( 1650887446) },
{ -INT32_C( 6), INT32_C( 16), -INT32_C( 17), INT32_C( 7) },
{ INT32_C( 799373143), -INT32_C( 1470537811), -INT32_C( 78789904), INT32_C( 860195633) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi32(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi32(test_vec[i].b);
simde__m128i r = simde_mm_rot_epi32(a, b);
simde_test_x86_assert_equal_i32x4(r, simde_mm_loadu_epi32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i32x4();
simde__m128i b = simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 26);
simde__m128i r = simde_mm_rot_epi32(a, b);
simde_test_x86_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_rot_epi64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int64_t a[2];
const int64_t b[2];
const int64_t r[2];
} test_vec[] = {
{ { -INT64_C( 6030121911897921128), -INT64_C( 2079650662157569366) },
{ INT64_C( 30), -INT64_C( 57) },
{ INT64_C( 8953607297789340932), -INT64_C( 7940867724235156111) } },
{ { INT64_C( 1548849507772250048), INT64_C( 7526071637542088656) },
{ -INT64_C( 36), -INT64_C( 31) },
{ -INT64_C( 4821987975361992218), INT64_C( 1994355354299004047) } },
{ { INT64_C( 18004709759095486), -INT64_C( 263461609286003289) },
{ -INT64_C( 34), INT64_C( 34) },
{ INT64_C( 747145293120667084), -INT64_C( 5028173739009770433) } },
{ { INT64_C( 3834259340609951493), -INT64_C( 133001585811471333) },
{ -INT64_C( 53), INT64_C( 50) },
{ -INT64_C( 5749845831088330327), INT64_C( 1184438584225868947) } },
{ { INT64_C( 8670532492798023567), INT64_C( 7598077189004949423) },
{ INT64_C( 63), INT64_C( 62) },
{ -INT64_C( 4888105790455764025), -INT64_C( 2712166721176150549) } },
{ { INT64_C( 3399013202374530133), INT64_C( 4579055370049277488) },
{ -INT64_C( 45), INT64_C( 37) },
{ -INT64_C( 4324138247288948387), INT64_C( 6069099710277374756) } },
{ { -INT64_C( 5923707415603657701), -INT64_C( 4797921855550821486) },
{ INT64_C( 39), INT64_C( 21) },
{ -INT64_C( 3719395125632057651), INT64_C( 8053977569354558795) } },
{ { INT64_C( 9120434576701794664), -INT64_C( 6561721854230699595) },
{ INT64_C( 3), -INT64_C( 5) },
{ -INT64_C( 823499681223849149), -INT64_C( 5969661330978944243) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi64(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi64(test_vec[i].b);
simde__m128i r = simde_mm_rot_epi64(a, b);
simde_test_x86_assert_equal_i64x2(r, simde_mm_loadu_epi64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i64x2();
simde__m128i b = simde_mm_cvtepi32_epi64(simde_mm_srai_epi32(simde_test_x86_random_i32x4(), 25));
simde__m128i r = simde_mm_rot_epi64(a, b);
simde_test_x86_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_perm_epi8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const int8_t a[16];
const int8_t b[16];
const int8_t c[16];
const int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 73), -INT8_C( 12), INT8_C( 114), INT8_C( 74), -INT8_C( 9), -INT8_C( 65), -INT8_C( 82), -INT8_C( 5),
-INT8_C( 11), -INT8_C( 38), INT8_C( 95), INT8_C( 32), INT8_C( 32), -INT8_C( 59), -INT8_C( 104), -INT8_C( 50) },
{ INT8_C( 79), -INT8_C( 48), -INT8_C( 13), -INT8_C( 122), INT8_C( 13), INT8_C( 38), -INT8_C( 124), INT8_C( 90),
INT8_C( 51), INT8_C( 9), INT8_C( 16), INT8_C( 81), -INT8_C( 67), INT8_C( 95), INT8_C( 123), INT8_C( 13) },
{ -INT8_C( 42), INT8_C( 110), INT8_MIN, -INT8_C( 85), INT8_C( 53), -INT8_C( 28), -INT8_C( 91), -INT8_C( 21),
-INT8_C( 84), INT8_C( 26), INT8_C( 109), -INT8_C( 111), -INT8_C( 2), -INT8_C( 103), -INT8_C( 49), INT8_C( 11) },
{ -INT8_C( 1), -INT8_C( 26), INT8_C( 0), -INT8_C( 1), -INT8_C( 39), INT8_C( 0), -INT8_C( 1), -INT8_C( 1),
-INT8_C( 1), INT8_C( 16), INT8_C( 92), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), INT8_C( 32) } },
{ { -INT8_C( 14), -INT8_C( 34), -INT8_C( 25), INT8_C( 83), -INT8_C( 91), INT8_C( 90), -INT8_C( 20), INT8_C( 23),
INT8_C( 36), -INT8_C( 67), INT8_C( 98), INT8_C( 24), INT8_C( 58), INT8_C( 116), -INT8_C( 112), -INT8_C( 48) },
{ -INT8_C( 121), INT8_C( 112), INT8_C( 53), INT8_C( 87), -INT8_C( 46), INT8_C( 42), INT8_C( 119), -INT8_C( 121),
-INT8_C( 95), -INT8_C( 28), INT8_C( 28), INT8_C( 95), INT8_C( 6), INT8_C( 49), -INT8_C( 4), -INT8_C( 91) },
{ -INT8_C( 69), -INT8_C( 73), -INT8_C( 74), -INT8_C( 49), INT8_C( 113), INT8_C( 52), -INT8_C( 93), INT8_C( 36),
INT8_C( 102), -INT8_C( 65), INT8_C( 8), INT8_C( 31), INT8_C( 54), INT8_C( 81), -INT8_C( 112), INT8_C( 20) },
{ -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 15), INT8_C( 45), -INT8_C( 1), INT8_C( 90),
-INT8_C( 56), -INT8_C( 1), INT8_C( 36), -INT8_C( 91), -INT8_C( 120), INT8_C( 14), INT8_C( 0), -INT8_C( 46) } },
{ { -INT8_C( 13), -INT8_C( 125), -INT8_C( 7), INT8_C( 21), INT8_C( 119), -INT8_C( 103), INT8_C( 13), INT8_C( 23),
-INT8_C( 7), -INT8_C( 64), -INT8_C( 44), INT8_C( 81), -INT8_C( 33), -INT8_C( 108), INT8_C( 8), -INT8_C( 27) },
{ -INT8_C( 45), -INT8_C( 27), -INT8_C( 55), -INT8_C( 62), INT8_C( 25), -INT8_C( 69), -INT8_C( 110), -INT8_C( 55),
INT8_C( 32), -INT8_C( 105), INT8_C( 108), INT8_C( 47), INT8_C( 87), -INT8_C( 4), INT8_C( 97), INT8_C( 34) },
{ INT8_C( 65), INT8_C( 46), INT8_C( 52), -INT8_C( 81), -INT8_C( 52), INT8_C( 58), INT8_C( 79), -INT8_C( 29),
-INT8_C( 33), INT8_C( 54), -INT8_C( 3), INT8_C( 48), INT8_C( 50), -INT8_C( 54), -INT8_C( 39), INT8_C( 19) },
{ -INT8_C( 63), -INT8_C( 9), -INT8_C( 26), -INT8_C( 1), -INT8_C( 1), -INT8_C( 109), -INT8_C( 89), -INT8_C( 1),
INT8_C( 0), INT8_C( 109), INT8_C( 0), INT8_C( 44), INT8_C( 54), -INT8_C( 1), -INT8_C( 1), -INT8_C( 62) } },
{ { INT8_C( 98), -INT8_C( 16), -INT8_C( 121), -INT8_C( 12), INT8_C( 69), -INT8_C( 9), -INT8_C( 95), INT8_C( 78),
INT8_C( 123), -INT8_C( 50), -INT8_C( 12), INT8_C( 15), INT8_C( 69), INT8_MAX, -INT8_C( 19), INT8_C( 66) },
{ -INT8_C( 102), -INT8_C( 6), INT8_C( 78), -INT8_C( 21), INT8_C( 120), INT8_C( 20), INT8_C( 37), INT8_C( 50),
INT8_C( 121), -INT8_C( 49), -INT8_C( 1), -INT8_C( 60), -INT8_C( 90), -INT8_C( 36), INT8_C( 89), INT8_C( 119) },
{ -INT8_C( 113), INT8_C( 94), INT8_C( 87), INT8_C( 45), -INT8_C( 100), -INT8_C( 15), -INT8_C( 71), -INT8_C( 6),
-INT8_C( 98), -INT8_C( 21), INT8_C( 10), -INT8_C( 119), -INT8_C( 87), -INT8_C( 30), INT8_C( 26), -INT8_C( 69) },
{ INT8_C( 0), -INT8_C( 102), INT8_C( 76), INT8_MIN, INT8_C( 0), INT8_C( 0), -INT8_C( 1), INT8_C( 0),
INT8_C( 0), -INT8_C( 1), -INT8_C( 12), INT8_C( 0), -INT8_C( 1), INT8_C( 0), -INT8_C( 1), -INT8_C( 1) } },
{ { INT8_C( 38), INT8_C( 110), -INT8_C( 81), -INT8_C( 110), INT8_C( 36), INT8_C( 47), INT8_C( 120), INT8_C( 78),
-INT8_C( 17), INT8_C( 18), INT8_C( 66), -INT8_C( 43), -INT8_C( 28), -INT8_C( 47), INT8_C( 110), INT8_C( 88) },
{ -INT8_C( 125), -INT8_C( 71), -INT8_C( 93), INT8_C( 52), -INT8_C( 58), -INT8_C( 80), -INT8_C( 64), INT8_C( 22),
-INT8_C( 79), INT8_C( 118), INT8_C( 21), INT8_C( 99), INT8_C( 43), INT8_C( 43), -INT8_C( 46), -INT8_C( 41) },
{ INT8_C( 12), INT8_C( 18), -INT8_C( 65), INT8_C( 108), INT8_C( 119), -INT8_C( 108), INT8_C( 46), INT8_C( 125),
INT8_C( 106), -INT8_C( 120), INT8_C( 47), INT8_C( 43), -INT8_C( 109), -INT8_C( 79), INT8_C( 2), INT8_C( 0) },
{ -INT8_C( 28), -INT8_C( 93), -INT8_C( 1), -INT8_C( 40), -INT8_C( 105), INT8_C( 0), -INT8_C( 111), INT8_C( 43),
-INT8_C( 67), INT8_C( 0), -INT8_C( 89), INT8_C( 42), INT8_C( 0), -INT8_C( 1), -INT8_C( 81), INT8_C( 38) } },
{ { INT8_C( 102), -INT8_C( 120), -INT8_C( 46), -INT8_C( 46), INT8_C( 108), INT8_C( 60), -INT8_C( 96), -INT8_C( 22),
-INT8_C( 34), -INT8_C( 8), INT8_C( 125), INT8_C( 102), INT8_C( 114), INT8_C( 100), -INT8_C( 4), -INT8_C( 36) },
{ INT8_C( 117), INT8_C( 110), -INT8_C( 25), INT8_C( 64), INT8_C( 26), INT8_C( 74), INT8_C( 49), INT8_C( 8),
INT8_C( 18), -INT8_C( 73), INT8_C( 44), -INT8_C( 115), INT8_C( 92), -INT8_C( 123), -INT8_C( 4), -INT8_C( 75) },
{ INT8_C( 95), INT8_C( 84), INT8_C( 76), -INT8_C( 49), INT8_C( 54), -INT8_C( 98), INT8_C( 63), -INT8_C( 66),
INT8_C( 75), -INT8_C( 8), -INT8_C( 87), INT8_C( 90), INT8_C( 39), -INT8_C( 108), INT8_MIN, INT8_C( 19) },
{ -INT8_C( 83), INT8_C( 88), INT8_C( 78), -INT8_C( 1), -INT8_C( 50), INT8_C( 0), INT8_C( 74), -INT8_C( 1),
INT8_C( 102), -INT8_C( 1), -INT8_C( 1), INT8_C( 52), INT8_C( 21), INT8_C( 0), INT8_C( 0), INT8_C( 64) } },
{ { -INT8_C( 120), INT8_C( 11), -INT8_C( 115), -INT8_C( 40), -INT8_C( 76), INT8_C( 89), INT8_C( 103), INT8_C( 55),
INT8_C( 14), INT8_C( 41), -INT8_C( 94), -INT8_C( 59), -INT8_C( 25), INT8_C( 84), INT8_C( 68), -INT8_C( 64) },
{ -INT8_C( 106), -INT8_C( 92), INT8_C( 120), -INT8_C( 13), -INT8_C( 53), -INT8_C( 35), -INT8_C( 121), -INT8_C( 38),
INT8_C( 32), -INT8_C( 2), INT8_C( 3), INT8_C( 7), -INT8_C( 15), -INT8_C( 60), INT8_C( 70), -INT8_C( 60) },
{ INT8_C( 110), INT8_C( 112), INT8_C( 27), -INT8_C( 6), -INT8_C( 18), -INT8_C( 54), -INT8_C( 70), INT8_C( 81),
-INT8_C( 121), INT8_C( 102), -INT8_C( 6), -INT8_C( 103), -INT8_C( 37), INT8_C( 38), -INT8_C( 62), INT8_C( 105) },
{ -INT8_C( 35), -INT8_C( 106), INT8_C( 7), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), -INT8_C( 1), INT8_C( 37),
INT8_C( 0), INT8_C( 25), -INT8_C( 1), INT8_C( 0), INT8_C( 0), -INT8_C( 104), -INT8_C( 1), INT8_C( 107) } },
{ { INT8_C( 52), INT8_C( 0), -INT8_C( 64), INT8_C( 5), -INT8_C( 44), INT8_C( 1), INT8_C( 94), -INT8_C( 123),
-INT8_C( 122), -INT8_C( 110), -INT8_C( 14), INT8_C( 52), INT8_C( 121), -INT8_C( 5), INT8_C( 53), INT8_C( 55) },
{ INT8_C( 78), INT8_C( 37), -INT8_C( 9), INT8_C( 111), INT8_C( 112), -INT8_C( 92), INT8_C( 17), -INT8_C( 96),
-INT8_C( 92), -INT8_C( 12), -INT8_C( 102), -INT8_C( 46), -INT8_C( 31), INT8_C( 3), INT8_C( 94), -INT8_C( 9) },
{ INT8_C( 97), -INT8_C( 16), -INT8_C( 117), -INT8_C( 49), -INT8_C( 8), INT8_C( 19), -INT8_C( 82), INT8_C( 9),
-INT8_C( 91), INT8_C( 61), -INT8_C( 34), -INT8_C( 85), INT8_C( 103), INT8_C( 65), INT8_C( 55), -INT8_C( 77) },
{ -INT8_C( 1), -INT8_C( 1), INT8_C( 0), INT8_C( 0), INT8_C( 0), INT8_C( 111), -INT8_C( 1), -INT8_C( 110),
-INT8_C( 1), -INT8_C( 4), INT8_C( 0), -INT8_C( 1), INT8_C( 94), INT8_C( 0), INT8_C( 95), -INT8_C( 1) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_mm_loadu_epi8(test_vec[i].a);
simde__m128i b = simde_mm_loadu_epi8(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi8(test_vec[i].c);
simde__m128i r = simde_mm_perm_epi8(a, b, c);
simde_test_x86_assert_equal_i8x16(r, simde_mm_loadu_epi8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128i a = simde_test_x86_random_i8x16();
simde__m128i b = simde_test_x86_random_i8x16();
simde__m128i c = simde_test_x86_random_i8x16();
simde__m128i r = simde_mm_perm_epi8(a, b, c);
simde_test_x86_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_permute2_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float32 a[4];
const simde_float32 b[4];
const int32_t c[4];
const int d;
const simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( 129.98), SIMDE_FLOAT32_C( 401.59), SIMDE_FLOAT32_C( 867.92), SIMDE_FLOAT32_C( 437.42) },
{ SIMDE_FLOAT32_C( -611.26), SIMDE_FLOAT32_C( 858.39), SIMDE_FLOAT32_C( 567.61), SIMDE_FLOAT32_C( 819.03) },
{ INT32_C( 14), INT32_C( 0), INT32_C( 4), INT32_C( 0) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( 567.61), SIMDE_FLOAT32_C( 129.98), SIMDE_FLOAT32_C( -611.26), SIMDE_FLOAT32_C( 129.98) } },
{ { SIMDE_FLOAT32_C( -835.57), SIMDE_FLOAT32_C( -684.62), SIMDE_FLOAT32_C( 721.85), SIMDE_FLOAT32_C( 146.64) },
{ SIMDE_FLOAT32_C( 275.31), SIMDE_FLOAT32_C( -324.99), SIMDE_FLOAT32_C( 132.97), SIMDE_FLOAT32_C( -255.90) },
{ INT32_C( 1), INT32_C( 4), INT32_C( 9), INT32_C( 0) },
INT8_C( 2),
{ SIMDE_FLOAT32_C( -684.62), SIMDE_FLOAT32_C( 275.31), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( -835.57) } },
{ { SIMDE_FLOAT32_C( -432.91), SIMDE_FLOAT32_C( -489.85), SIMDE_FLOAT32_C( -106.23), SIMDE_FLOAT32_C( 470.63) },
{ SIMDE_FLOAT32_C( -541.61), SIMDE_FLOAT32_C( -363.81), SIMDE_FLOAT32_C( 791.74), SIMDE_FLOAT32_C( -78.71) },
{ INT32_C( 14), INT32_C( 2), INT32_C( 7), INT32_C( 13) },
INT8_C( 2),
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( -106.23), SIMDE_FLOAT32_C( -78.71), SIMDE_FLOAT32_C( 0.00) } },
{ { SIMDE_FLOAT32_C( 432.29), SIMDE_FLOAT32_C( -485.64), SIMDE_FLOAT32_C( -528.31), SIMDE_FLOAT32_C( -203.71) },
{ SIMDE_FLOAT32_C( -190.04), SIMDE_FLOAT32_C( -924.92), SIMDE_FLOAT32_C( -444.56), SIMDE_FLOAT32_C( -295.94) },
{ INT32_C( 4), INT32_C( 2), INT32_C( 3), INT32_C( 4) },
INT8_C( 3),
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ { SIMDE_FLOAT32_C( 506.03), SIMDE_FLOAT32_C( -284.59), SIMDE_FLOAT32_C( 589.16), SIMDE_FLOAT32_C( -679.74) },
{ SIMDE_FLOAT32_C( -505.42), SIMDE_FLOAT32_C( -405.87), SIMDE_FLOAT32_C( -748.59), SIMDE_FLOAT32_C( -58.20) },
{ INT32_C( 7), INT32_C( 5), INT32_C( 13), INT32_C( 5) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( -58.20), SIMDE_FLOAT32_C( -405.87), SIMDE_FLOAT32_C( -405.87), SIMDE_FLOAT32_C( -405.87) } },
{ { SIMDE_FLOAT32_C( -741.02), SIMDE_FLOAT32_C( 126.26), SIMDE_FLOAT32_C( -83.53), SIMDE_FLOAT32_C( 950.68) },
{ SIMDE_FLOAT32_C( 890.50), SIMDE_FLOAT32_C( 173.80), SIMDE_FLOAT32_C( -673.21), SIMDE_FLOAT32_C( 923.95) },
{ INT32_C( 9), INT32_C( 8), INT32_C( 9), INT32_C( 12) },
INT8_C( 3),
{ SIMDE_FLOAT32_C( 126.26), SIMDE_FLOAT32_C( -741.02), SIMDE_FLOAT32_C( 126.26), SIMDE_FLOAT32_C( 890.50) } },
{ { SIMDE_FLOAT32_C( -296.98), SIMDE_FLOAT32_C( 579.52), SIMDE_FLOAT32_C( -101.17), SIMDE_FLOAT32_C( -117.53) },
{ SIMDE_FLOAT32_C( -257.36), SIMDE_FLOAT32_C( 821.77), SIMDE_FLOAT32_C( 327.49), SIMDE_FLOAT32_C( 415.88) },
{ INT32_C( 8), INT32_C( 14), INT32_C( 14), INT32_C( 12) },
INT8_C( 1),
{ SIMDE_FLOAT32_C( -296.98), SIMDE_FLOAT32_C( 327.49), SIMDE_FLOAT32_C( 327.49), SIMDE_FLOAT32_C( -257.36) } },
{ { SIMDE_FLOAT32_C( 920.53), SIMDE_FLOAT32_C( 154.27), SIMDE_FLOAT32_C( -820.43), SIMDE_FLOAT32_C( -34.27) },
{ SIMDE_FLOAT32_C( 894.96), SIMDE_FLOAT32_C( 622.43), SIMDE_FLOAT32_C( -238.99), SIMDE_FLOAT32_C( 783.62) },
{ INT32_C( 1), INT32_C( 10), INT32_C( 12), INT32_C( 0) },
INT8_C( 3),
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( -820.43), SIMDE_FLOAT32_C( 894.96), SIMDE_FLOAT32_C( 0.00) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi32(test_vec[i].c);
simde__m128 r;
SIMDE_CONSTIFY_4_(simde_mm_permute2_ps, r, (HEDLEY_UNREACHABLE(), simde_mm_setzero_ps ()), test_vec[i].d, a, b, c);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128 a = simde_test_x86_random_f32x4(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
simde__m128 b = simde_test_x86_random_f32x4(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
simde__m128i c = simde_mm_and_si128(simde_test_x86_random_i32x4(), simde_mm_set1_epi32(0x0f));
int d = simde_test_codegen_rand() & 0x03;
simde__m128 r;
SIMDE_CONSTIFY_4_(simde_mm_permute2_ps, r, (HEDLEY_UNREACHABLE(), simde_mm_setzero_ps ()), d, a, b, c);
simde_test_x86_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, HEDLEY_STATIC_CAST(int8_t, d), SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm_permute2_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float64 a[2];
const simde_float64 b[2];
const int64_t c[2];
const int d;
const simde_float64 r[2];
} test_vec[] = {
{ { SIMDE_FLOAT64_C( 946.41), SIMDE_FLOAT64_C( -601.79) },
{ SIMDE_FLOAT64_C( 79.87), SIMDE_FLOAT64_C( 578.60) },
{ INT64_C( 4), INT64_C( 10) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 79.87), SIMDE_FLOAT64_C( -601.79) } },
{ { SIMDE_FLOAT64_C( -898.86), SIMDE_FLOAT64_C( 677.72) },
{ SIMDE_FLOAT64_C( -628.04), SIMDE_FLOAT64_C( -776.48) },
{ INT64_C( 10), INT64_C( 12) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 677.72), SIMDE_FLOAT64_C( -628.04) } },
{ { SIMDE_FLOAT64_C( 204.26), SIMDE_FLOAT64_C( 493.15) },
{ SIMDE_FLOAT64_C( -801.08), SIMDE_FLOAT64_C( 980.47) },
{ INT64_C( 14), INT64_C( 2) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 980.47), SIMDE_FLOAT64_C( 493.15) } },
{ { SIMDE_FLOAT64_C( 217.14), SIMDE_FLOAT64_C( 271.58) },
{ SIMDE_FLOAT64_C( 17.12), SIMDE_FLOAT64_C( 251.93) },
{ INT64_C( 2), INT64_C( 14) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 271.58), SIMDE_FLOAT64_C( 251.93) } },
{ { SIMDE_FLOAT64_C( 91.95), SIMDE_FLOAT64_C( 368.27) },
{ SIMDE_FLOAT64_C( 859.31), SIMDE_FLOAT64_C( 440.78) },
{ INT64_C( 6), INT64_C( 4) },
INT8_C( 1),
{ SIMDE_FLOAT64_C( 440.78), SIMDE_FLOAT64_C( 859.31) } },
{ { SIMDE_FLOAT64_C( 876.22), SIMDE_FLOAT64_C( -296.73) },
{ SIMDE_FLOAT64_C( 325.42), SIMDE_FLOAT64_C( -973.69) },
{ INT64_C( 14), INT64_C( 8) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( -973.69), SIMDE_FLOAT64_C( 876.22) } },
{ { SIMDE_FLOAT64_C( -874.63), SIMDE_FLOAT64_C( -143.89) },
{ SIMDE_FLOAT64_C( -952.94), SIMDE_FLOAT64_C( 675.71) },
{ INT64_C( 6), INT64_C( 14) },
INT8_C( 1),
{ SIMDE_FLOAT64_C( 675.71), SIMDE_FLOAT64_C( 675.71) } },
{ { SIMDE_FLOAT64_C( 733.82), SIMDE_FLOAT64_C( 710.62) },
{ SIMDE_FLOAT64_C( 96.16), SIMDE_FLOAT64_C( -263.28) },
{ INT64_C( 4), INT64_C( 6) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 96.16), SIMDE_FLOAT64_C( -263.28) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
simde__m128i c = simde_mm_loadu_epi64(test_vec[i].c);
simde__m128d r;
SIMDE_CONSTIFY_4_(simde_mm_permute2_pd, r, (HEDLEY_UNREACHABLE(), simde_mm_setzero_pd ()), test_vec[i].d, a, b, c);
simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m128d a = simde_test_x86_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m128d b = simde_test_x86_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m128i c = simde_mm_and_si128(simde_test_x86_random_i64x2(), simde_mm_set1_epi64x(0x0e));
int d = simde_test_codegen_rand() & 0x03;
simde__m128d r;
SIMDE_CONSTIFY_4_(simde_mm_permute2_pd, r, (HEDLEY_UNREACHABLE(), simde_mm_setzero_pd ()), d, a, b, c);
simde_test_x86_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, HEDLEY_STATIC_CAST(int8_t, d), SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm256_permute2_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float32 a[8];
const simde_float32 b[8];
const int32_t c[8];
const int d;
const simde_float32 r[8];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( 59.18), SIMDE_FLOAT32_C( -800.35), SIMDE_FLOAT32_C( 138.65), SIMDE_FLOAT32_C( -635.55),
SIMDE_FLOAT32_C( -813.41), SIMDE_FLOAT32_C( -662.83), SIMDE_FLOAT32_C( 685.60), SIMDE_FLOAT32_C( 286.29) },
{ SIMDE_FLOAT32_C( 409.16), SIMDE_FLOAT32_C( 678.46), SIMDE_FLOAT32_C( 717.46), SIMDE_FLOAT32_C( 777.76),
SIMDE_FLOAT32_C( 911.80), SIMDE_FLOAT32_C( 24.75), SIMDE_FLOAT32_C( -239.23), SIMDE_FLOAT32_C( -532.76) },
{ INT32_C( 12), INT32_C( 12), INT32_C( 8), INT32_C( 0), INT32_C( 10), INT32_C( 4), INT32_C( 4), INT32_C( 6) },
INT8_C( 1),
{ SIMDE_FLOAT32_C( 409.16), SIMDE_FLOAT32_C( 409.16), SIMDE_FLOAT32_C( 59.18), SIMDE_FLOAT32_C( 59.18),
SIMDE_FLOAT32_C( 685.60), SIMDE_FLOAT32_C( 911.80), SIMDE_FLOAT32_C( 911.80), SIMDE_FLOAT32_C( -239.23) } },
{ { SIMDE_FLOAT32_C( 648.55), SIMDE_FLOAT32_C( 686.82), SIMDE_FLOAT32_C( 957.82), SIMDE_FLOAT32_C( 927.73),
SIMDE_FLOAT32_C( -152.26), SIMDE_FLOAT32_C( 62.11), SIMDE_FLOAT32_C( -895.87), SIMDE_FLOAT32_C( 97.51) },
{ SIMDE_FLOAT32_C( 234.72), SIMDE_FLOAT32_C( -955.50), SIMDE_FLOAT32_C( 230.99), SIMDE_FLOAT32_C( 982.73),
SIMDE_FLOAT32_C( -683.34), SIMDE_FLOAT32_C( 980.16), SIMDE_FLOAT32_C( -304.30), SIMDE_FLOAT32_C( 324.93) },
{ INT32_C( 12), INT32_C( 14), INT32_C( 10), INT32_C( 14), INT32_C( 10), INT32_C( 6), INT32_C( 6), INT32_C( 12) },
INT8_C( 1),
{ SIMDE_FLOAT32_C( 234.72), SIMDE_FLOAT32_C( 230.99), SIMDE_FLOAT32_C( 957.82), SIMDE_FLOAT32_C( 230.99),
SIMDE_FLOAT32_C( -895.87), SIMDE_FLOAT32_C( -304.30), SIMDE_FLOAT32_C( -304.30), SIMDE_FLOAT32_C( -683.34) } },
{ { SIMDE_FLOAT32_C( -138.65), SIMDE_FLOAT32_C( 743.03), SIMDE_FLOAT32_C( 879.21), SIMDE_FLOAT32_C( 368.69),
SIMDE_FLOAT32_C( 482.53), SIMDE_FLOAT32_C( 564.75), SIMDE_FLOAT32_C( -465.62), SIMDE_FLOAT32_C( 515.00) },
{ SIMDE_FLOAT32_C( 290.26), SIMDE_FLOAT32_C( 656.00), SIMDE_FLOAT32_C( -44.16), SIMDE_FLOAT32_C( -550.10),
SIMDE_FLOAT32_C( 32.07), SIMDE_FLOAT32_C( 356.98), SIMDE_FLOAT32_C( 374.13), SIMDE_FLOAT32_C( 728.87) },
{ INT32_C( 0), INT32_C( 4), INT32_C( 2), INT32_C( 6), INT32_C( 12), INT32_C( 2), INT32_C( 0), INT32_C( 0) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( -138.65), SIMDE_FLOAT32_C( 290.26), SIMDE_FLOAT32_C( 879.21), SIMDE_FLOAT32_C( -44.16),
SIMDE_FLOAT32_C( 32.07), SIMDE_FLOAT32_C( -465.62), SIMDE_FLOAT32_C( 482.53), SIMDE_FLOAT32_C( 482.53) } },
{ { SIMDE_FLOAT32_C( 636.40), SIMDE_FLOAT32_C( 479.96), SIMDE_FLOAT32_C( -979.13), SIMDE_FLOAT32_C( 272.01),
SIMDE_FLOAT32_C( -369.85), SIMDE_FLOAT32_C( 21.03), SIMDE_FLOAT32_C( -946.78), SIMDE_FLOAT32_C( -459.58) },
{ SIMDE_FLOAT32_C( -267.43), SIMDE_FLOAT32_C( -20.97), SIMDE_FLOAT32_C( 418.26), SIMDE_FLOAT32_C( -377.36),
SIMDE_FLOAT32_C( -729.42), SIMDE_FLOAT32_C( -938.23), SIMDE_FLOAT32_C( 927.12), SIMDE_FLOAT32_C( 281.53) },
{ INT32_C( 8), INT32_C( 4), INT32_C( 2), INT32_C( 12), INT32_C( 8), INT32_C( 14), INT32_C( 10), INT32_C( 0) },
INT8_C( 1),
{ SIMDE_FLOAT32_C( 636.40), SIMDE_FLOAT32_C( -267.43), SIMDE_FLOAT32_C( -979.13), SIMDE_FLOAT32_C( -267.43),
SIMDE_FLOAT32_C( -369.85), SIMDE_FLOAT32_C( 927.12), SIMDE_FLOAT32_C( -946.78), SIMDE_FLOAT32_C( -369.85) } },
{ { SIMDE_FLOAT32_C( -514.69), SIMDE_FLOAT32_C( 975.89), SIMDE_FLOAT32_C( 603.32), SIMDE_FLOAT32_C( 719.54),
SIMDE_FLOAT32_C( 487.53), SIMDE_FLOAT32_C( 496.57), SIMDE_FLOAT32_C( 541.12), SIMDE_FLOAT32_C( -839.84) },
{ SIMDE_FLOAT32_C( -858.39), SIMDE_FLOAT32_C( 391.28), SIMDE_FLOAT32_C( -69.55), SIMDE_FLOAT32_C( -161.96),
SIMDE_FLOAT32_C( 370.95), SIMDE_FLOAT32_C( -487.90), SIMDE_FLOAT32_C( 348.80), SIMDE_FLOAT32_C( 619.43) },
{ INT32_C( 10), INT32_C( 2), INT32_C( 4), INT32_C( 0), INT32_C( 14), INT32_C( 4), INT32_C( 6), INT32_C( 0) },
INT8_C( 2),
{ SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 603.32), SIMDE_FLOAT32_C( -858.39), SIMDE_FLOAT32_C( -514.69),
SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 370.95), SIMDE_FLOAT32_C( 348.80), SIMDE_FLOAT32_C( 487.53) } },
{ { SIMDE_FLOAT32_C( -794.06), SIMDE_FLOAT32_C( -753.17), SIMDE_FLOAT32_C( 459.03), SIMDE_FLOAT32_C( -757.07),
SIMDE_FLOAT32_C( -644.58), SIMDE_FLOAT32_C( -551.50), SIMDE_FLOAT32_C( -592.33), SIMDE_FLOAT32_C( -775.75) },
{ SIMDE_FLOAT32_C( 464.46), SIMDE_FLOAT32_C( 356.85), SIMDE_FLOAT32_C( -207.01), SIMDE_FLOAT32_C( -711.84),
SIMDE_FLOAT32_C( 961.24), SIMDE_FLOAT32_C( -241.49), SIMDE_FLOAT32_C( 41.11), SIMDE_FLOAT32_C( -202.49) },
{ INT32_C( 14), INT32_C( 2), INT32_C( 12), INT32_C( 4), INT32_C( 4), INT32_C( 6), INT32_C( 12), INT32_C( 6) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( -207.01), SIMDE_FLOAT32_C( 459.03), SIMDE_FLOAT32_C( 464.46), SIMDE_FLOAT32_C( 464.46),
SIMDE_FLOAT32_C( 961.24), SIMDE_FLOAT32_C( 41.11), SIMDE_FLOAT32_C( 961.24), SIMDE_FLOAT32_C( 41.11) } },
{ { SIMDE_FLOAT32_C( 320.78), SIMDE_FLOAT32_C( 431.87), SIMDE_FLOAT32_C( -274.88), SIMDE_FLOAT32_C( 753.65),
SIMDE_FLOAT32_C( 578.97), SIMDE_FLOAT32_C( 463.67), SIMDE_FLOAT32_C( -550.89), SIMDE_FLOAT32_C( -591.05) },
{ SIMDE_FLOAT32_C( -724.23), SIMDE_FLOAT32_C( -48.98), SIMDE_FLOAT32_C( -445.84), SIMDE_FLOAT32_C( -510.12),
SIMDE_FLOAT32_C( -448.41), SIMDE_FLOAT32_C( 446.58), SIMDE_FLOAT32_C( -538.38), SIMDE_FLOAT32_C( -504.68) },
{ INT32_C( 8), INT32_C( 10), INT32_C( 10), INT32_C( 4), INT32_C( 0), INT32_C( 0), INT32_C( 12), INT32_C( 4) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( 320.78), SIMDE_FLOAT32_C( -274.88), SIMDE_FLOAT32_C( -274.88), SIMDE_FLOAT32_C( -724.23),
SIMDE_FLOAT32_C( 578.97), SIMDE_FLOAT32_C( 578.97), SIMDE_FLOAT32_C( -448.41), SIMDE_FLOAT32_C( -448.41) } },
{ { SIMDE_FLOAT32_C( -71.81), SIMDE_FLOAT32_C( 251.01), SIMDE_FLOAT32_C( -822.02), SIMDE_FLOAT32_C( 158.91),
SIMDE_FLOAT32_C( 585.99), SIMDE_FLOAT32_C( 229.65), SIMDE_FLOAT32_C( 421.67), SIMDE_FLOAT32_C( -216.16) },
{ SIMDE_FLOAT32_C( 959.72), SIMDE_FLOAT32_C( -586.41), SIMDE_FLOAT32_C( -198.10), SIMDE_FLOAT32_C( -695.91),
SIMDE_FLOAT32_C( 44.89), SIMDE_FLOAT32_C( -666.86), SIMDE_FLOAT32_C( 177.89), SIMDE_FLOAT32_C( 791.62) },
{ INT32_C( 0), INT32_C( 12), INT32_C( 6), INT32_C( 2), INT32_C( 0), INT32_C( 12), INT32_C( 6), INT32_C( 12) },
INT8_C( 0),
{ SIMDE_FLOAT32_C( -71.81), SIMDE_FLOAT32_C( 959.72), SIMDE_FLOAT32_C( -198.10), SIMDE_FLOAT32_C( -822.02),
SIMDE_FLOAT32_C( 585.99), SIMDE_FLOAT32_C( 44.89), SIMDE_FLOAT32_C( 177.89), SIMDE_FLOAT32_C( 44.89) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m256 a = simde_mm256_loadu_ps(test_vec[i].a);
simde__m256 b = simde_mm256_loadu_ps(test_vec[i].b);
simde__m256i c = simde_mm256_loadu_epi32(test_vec[i].c);
simde__m256 r;
SIMDE_CONSTIFY_4_(simde_mm256_permute2_ps, r, (HEDLEY_UNREACHABLE(), simde_mm256_setzero_ps ()), test_vec[i].d, a, b, c);
simde_test_x86_assert_equal_f32x8(r, simde_mm256_loadu_ps(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m256 a = simde_test_x86_random_f32x8(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
simde__m256 b = simde_test_x86_random_f32x8(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
simde__m256i c = simde_mm256_and_si256(simde_test_x86_random_i32x8(), simde_mm256_set1_epi32(0x0e));
int d = simde_test_codegen_rand() & 0x03;
simde__m256 r;
SIMDE_CONSTIFY_4_(simde_mm256_permute2_ps, r, (HEDLEY_UNREACHABLE(), simde_mm256_setzero_ps ()), d, a, b, c);
simde_test_x86_write_f32x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f32x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i32x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, HEDLEY_STATIC_CAST(int8_t, d), SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f32x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_mm256_permute2_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
const simde_float64 a[4];
const simde_float64 b[4];
const int64_t c[4];
const int d;
const simde_float64 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT64_C( -861.88), SIMDE_FLOAT64_C( 169.72), SIMDE_FLOAT64_C( -503.45), SIMDE_FLOAT64_C( -428.77) },
{ SIMDE_FLOAT64_C( 479.43), SIMDE_FLOAT64_C( 641.29), SIMDE_FLOAT64_C( -720.10), SIMDE_FLOAT64_C( 728.91) },
{ INT64_C( 11), INT64_C( 15), INT64_C( 5), INT64_C( 3) },
INT8_C( 1),
{ SIMDE_FLOAT64_C( 169.72), SIMDE_FLOAT64_C( 641.29), SIMDE_FLOAT64_C( -720.10), SIMDE_FLOAT64_C( -428.77) } },
{ { SIMDE_FLOAT64_C( 645.52), SIMDE_FLOAT64_C( -415.41), SIMDE_FLOAT64_C( -431.99), SIMDE_FLOAT64_C( 760.01) },
{ SIMDE_FLOAT64_C( 919.67), SIMDE_FLOAT64_C( -555.51), SIMDE_FLOAT64_C( 257.61), SIMDE_FLOAT64_C( -404.79) },
{ INT64_C( 6), INT64_C( 6), INT64_C( 0), INT64_C( 3) },
INT8_C( 3),
{ SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00) } },
{ { SIMDE_FLOAT64_C( -12.31), SIMDE_FLOAT64_C( 278.90), SIMDE_FLOAT64_C( -825.23), SIMDE_FLOAT64_C( -451.80) },
{ SIMDE_FLOAT64_C( -871.35), SIMDE_FLOAT64_C( 507.62), SIMDE_FLOAT64_C( 803.50), SIMDE_FLOAT64_C( 809.62) },
{ INT64_C( 6), INT64_C( 7), INT64_C( 6), INT64_C( 1) },
INT8_C( 2),
{ SIMDE_FLOAT64_C( 507.62), SIMDE_FLOAT64_C( 507.62), SIMDE_FLOAT64_C( 809.62), SIMDE_FLOAT64_C( -825.23) } },
{ { SIMDE_FLOAT64_C( 284.05), SIMDE_FLOAT64_C( -424.20), SIMDE_FLOAT64_C( -550.91), SIMDE_FLOAT64_C( 124.32) },
{ SIMDE_FLOAT64_C( 646.87), SIMDE_FLOAT64_C( 711.77), SIMDE_FLOAT64_C( 452.09), SIMDE_FLOAT64_C( 607.04) },
{ INT64_C( 2), INT64_C( 12), INT64_C( 8), INT64_C( 5) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( -424.20), SIMDE_FLOAT64_C( 646.87), SIMDE_FLOAT64_C( -550.91), SIMDE_FLOAT64_C( 452.09) } },
{ { SIMDE_FLOAT64_C( 575.86), SIMDE_FLOAT64_C( -948.33), SIMDE_FLOAT64_C( -144.40), SIMDE_FLOAT64_C( -665.48) },
{ SIMDE_FLOAT64_C( 780.15), SIMDE_FLOAT64_C( -663.76), SIMDE_FLOAT64_C( 297.14), SIMDE_FLOAT64_C( -826.42) },
{ INT64_C( 11), INT64_C( 11), INT64_C( 8), INT64_C( 14) },
INT8_C( 1),
{ SIMDE_FLOAT64_C( -948.33), SIMDE_FLOAT64_C( -948.33), SIMDE_FLOAT64_C( -144.40), SIMDE_FLOAT64_C( -826.42) } },
{ { SIMDE_FLOAT64_C( -749.92), SIMDE_FLOAT64_C( -255.38), SIMDE_FLOAT64_C( 354.52), SIMDE_FLOAT64_C( 451.14) },
{ SIMDE_FLOAT64_C( 617.73), SIMDE_FLOAT64_C( -381.72), SIMDE_FLOAT64_C( -31.35), SIMDE_FLOAT64_C( -776.43) },
{ INT64_C( 12), INT64_C( 15), INT64_C( 5), INT64_C( 5) },
INT8_C( 3),
{ SIMDE_FLOAT64_C( 617.73), SIMDE_FLOAT64_C( -381.72), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00) } },
{ { SIMDE_FLOAT64_C( 782.01), SIMDE_FLOAT64_C( 926.32), SIMDE_FLOAT64_C( -413.97), SIMDE_FLOAT64_C( 703.31) },
{ SIMDE_FLOAT64_C( -36.46), SIMDE_FLOAT64_C( 228.48), SIMDE_FLOAT64_C( -122.64), SIMDE_FLOAT64_C( -415.16) },
{ INT64_C( 2), INT64_C( 15), INT64_C( 11), INT64_C( 5) },
INT8_C( 0),
{ SIMDE_FLOAT64_C( 926.32), SIMDE_FLOAT64_C( 228.48), SIMDE_FLOAT64_C( 703.31), SIMDE_FLOAT64_C( -122.64) } },
{ { SIMDE_FLOAT64_C( 20.90), SIMDE_FLOAT64_C( -217.15), SIMDE_FLOAT64_C( -187.65), SIMDE_FLOAT64_C( -111.33) },
{ SIMDE_FLOAT64_C( -137.06), SIMDE_FLOAT64_C( 81.39), SIMDE_FLOAT64_C( 609.90), SIMDE_FLOAT64_C( 520.68) },
{ INT64_C( 13), INT64_C( 5), INT64_C( 1), INT64_C( 6) },
INT8_C( 3),
{ SIMDE_FLOAT64_C( -137.06), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00), SIMDE_FLOAT64_C( 0.00) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m256d a = simde_mm256_loadu_pd(test_vec[i].a);
simde__m256d b = simde_mm256_loadu_pd(test_vec[i].b);
simde__m256i c = simde_mm256_loadu_epi64(test_vec[i].c);
simde__m256d r;
SIMDE_CONSTIFY_4_(simde_mm256_permute2_pd, r, (HEDLEY_UNREACHABLE(), simde_mm256_setzero_pd ()), test_vec[i].d, a, b, c);
simde_test_x86_assert_equal_f64x4(r, simde_mm256_loadu_pd(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde__m256d a = simde_test_x86_random_f64x4(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m256d b = simde_test_x86_random_f64x4(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde__m256i c = simde_mm256_and_si256(simde_test_x86_random_i64x4(), simde_mm256_set1_epi64x(0x0f));
int d = simde_test_codegen_rand() & 0x03;
simde__m256d r;
SIMDE_CONSTIFY_4_(simde_mm256_permute2_pd, r, (HEDLEY_UNREACHABLE(), simde_mm256_setzero_pd ()), d, a, b, c);
simde_test_x86_write_f64x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_x86_write_f64x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_i64x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_codegen_write_i8(2, HEDLEY_STATIC_CAST(int8_t, d), SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_x86_write_f64x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(mm_cmov_si128)
SIMDE_TEST_FUNC_LIST_ENTRY(mm256_cmov_si256)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comeq_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comneq_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comge_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comgt_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comle_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comlt_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comtrue_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_comfalse_epu64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_frcz_ps)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_frcz_pd)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_frcz_ss)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_frcz_sd)
SIMDE_TEST_FUNC_LIST_ENTRY(mm256_frcz_ps)
SIMDE_TEST_FUNC_LIST_ENTRY(mm256_frcz_pd)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddw_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddw_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddd_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddd_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddd_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epu8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epu16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_haddq_epu32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_hsubw_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_hsubd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_hsubq_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_macc_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_macc_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_macclo_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_macchi_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccs_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccs_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccsd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccslo_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maccshi_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maddd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_maddsd_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_sha_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_sha_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_sha_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_sha_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_shl_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_shl_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_shl_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_shl_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_rot_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_rot_epi16)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_rot_epi32)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_rot_epi64)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_perm_epi8)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_permute2_ps)
SIMDE_TEST_FUNC_LIST_ENTRY(mm_permute2_pd)
SIMDE_TEST_FUNC_LIST_ENTRY(mm256_permute2_ps)
SIMDE_TEST_FUNC_LIST_ENTRY(mm256_permute2_pd)
SIMDE_TEST_FUNC_LIST_END
#include <test/x86/test-x86-footer.h>