#define SIMDE_TEST_ARM_NEON_INSN mla #include "test-neon.h" #include "../../../simde/arm/neon/mla.h" static int test_simde_vmla_f32 (SIMDE_MUNIT_TEST_ARGS) { struct { simde_float32 a[2]; simde_float32 b[2]; simde_float32 c[2]; simde_float32 r[2]; } test_vec[] = { { { SIMDE_FLOAT32_C(316.661133), SIMDE_FLOAT32_C(532.098022) }, { SIMDE_FLOAT32_C(620.658325), SIMDE_FLOAT32_C(-997.429260) }, { SIMDE_FLOAT32_C(-285.241272), SIMDE_FLOAT32_C(-34.532288) }, { SIMDE_FLOAT32_C(-176720.718750), SIMDE_FLOAT32_C(34975.613281) } }, { { SIMDE_FLOAT32_C(471.026245), SIMDE_FLOAT32_C(750.918213) }, { SIMDE_FLOAT32_C(-25.710571), SIMDE_FLOAT32_C(227.714966) }, { SIMDE_FLOAT32_C(-713.672607), SIMDE_FLOAT32_C(-277.196289) }, { SIMDE_FLOAT32_C(18819.955078), SIMDE_FLOAT32_C(-62370.824219) } }, { { SIMDE_FLOAT32_C(194.214355), SIMDE_FLOAT32_C(-492.961609) }, { SIMDE_FLOAT32_C(-13.566528), SIMDE_FLOAT32_C(253.638428) }, { SIMDE_FLOAT32_C(459.621704), SIMDE_FLOAT32_C(-547.513184) }, { SIMDE_FLOAT32_C(-6041.256348), SIMDE_FLOAT32_C(-139363.359375) } }, { { SIMDE_FLOAT32_C(572.033813), SIMDE_FLOAT32_C(-487.424255) }, { SIMDE_FLOAT32_C(876.644287), SIMDE_FLOAT32_C(-464.728149) }, { SIMDE_FLOAT32_C(-627.000244), SIMDE_FLOAT32_C(-604.188477) }, { SIMDE_FLOAT32_C(-549084.125000), SIMDE_FLOAT32_C(280295.968750) } }, { { SIMDE_FLOAT32_C(-380.228882), SIMDE_FLOAT32_C(-880.954773) }, { SIMDE_FLOAT32_C(-273.911987), SIMDE_FLOAT32_C(-60.760437) }, { SIMDE_FLOAT32_C(460.995361), SIMDE_FLOAT32_C(-993.405762) }, { SIMDE_FLOAT32_C(-126652.382812), SIMDE_FLOAT32_C(59478.816406) } }, { { SIMDE_FLOAT32_C(-200.876343), SIMDE_FLOAT32_C(-222.343384) }, { SIMDE_FLOAT32_C(538.692261), SIMDE_FLOAT32_C(-580.218018) }, { SIMDE_FLOAT32_C(-219.772644), SIMDE_FLOAT32_C(-746.548950) }, { SIMDE_FLOAT32_C(-118590.695312), SIMDE_FLOAT32_C(432938.812500) } }, { { SIMDE_FLOAT32_C(385.249634), SIMDE_FLOAT32_C(-748.746277) }, { SIMDE_FLOAT32_C(-995.630615), SIMDE_FLOAT32_C(-640.460815) }, { SIMDE_FLOAT32_C(478.968628), SIMDE_FLOAT32_C(-709.303223) }, { SIMDE_FLOAT32_C(-476490.593750), SIMDE_FLOAT32_C(453532.156250) } }, { { SIMDE_FLOAT32_C(82.342896), SIMDE_FLOAT32_C(-326.816833) }, { SIMDE_FLOAT32_C(-202.264832), SIMDE_FLOAT32_C(-931.223450) }, { SIMDE_FLOAT32_C(926.821655), SIMDE_FLOAT32_C(-742.643005) }, { SIMDE_FLOAT32_C(-187381.078125), SIMDE_FLOAT32_C(691239.750000) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_float32x2_t a, b, c, r; a = simde_vld1_f32(test_vec[i].a); b = simde_vld1_f32(test_vec[i].b); c = simde_vld1_f32(test_vec[i].c); r = simde_vmla_f32(a, b, c); simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1); } return 0; } static int test_simde_vmla_f64 (SIMDE_MUNIT_TEST_ARGS) { struct { simde_float64 a[1]; simde_float64 b[1]; simde_float64 c[1]; simde_float64 r[1]; } test_vec[] = { { { SIMDE_FLOAT64_C( -737.86) }, { SIMDE_FLOAT64_C( 54.24) }, { SIMDE_FLOAT64_C( 214.25) }, { SIMDE_FLOAT64_C( 10883.06) } }, { { SIMDE_FLOAT64_C( -556.90) }, { SIMDE_FLOAT64_C( -78.19) }, { SIMDE_FLOAT64_C( -607.99) }, { SIMDE_FLOAT64_C( 46981.84) } }, { { SIMDE_FLOAT64_C( 487.07) }, { SIMDE_FLOAT64_C( 470.32) }, { SIMDE_FLOAT64_C( -82.83) }, { SIMDE_FLOAT64_C(-38469.54) } }, { { SIMDE_FLOAT64_C( 174.25) }, { SIMDE_FLOAT64_C( -952.32) }, { SIMDE_FLOAT64_C( 119.45) }, { SIMDE_FLOAT64_C(-113580.37) } }, { { SIMDE_FLOAT64_C( -537.41) }, { SIMDE_FLOAT64_C( 278.36) }, { SIMDE_FLOAT64_C( 723.14) }, { SIMDE_FLOAT64_C(200755.84) } }, { { SIMDE_FLOAT64_C( 217.52) }, { SIMDE_FLOAT64_C( 318.77) }, { SIMDE_FLOAT64_C( -673.30) }, { SIMDE_FLOAT64_C(-214410.32) } }, { { SIMDE_FLOAT64_C( -927.68) }, { SIMDE_FLOAT64_C( -114.09) }, { SIMDE_FLOAT64_C( 770.14) }, { SIMDE_FLOAT64_C(-88792.95) } }, { { SIMDE_FLOAT64_C( -953.39) }, { SIMDE_FLOAT64_C( -237.19) }, { SIMDE_FLOAT64_C( 341.63) }, { SIMDE_FLOAT64_C(-81984.61) } } }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_float64x1_t a = simde_vld1_f64(test_vec[i].a); simde_float64x1_t b = simde_vld1_f64(test_vec[i].b); simde_float64x1_t c = simde_vld1_f64(test_vec[i].c); simde_float64x1_t r = simde_vmla_f64(a, b, c); simde_test_arm_neon_assert_equal_f64x1(r, simde_vld1_f64(test_vec[i].r), 1); } return 0; } static int test_simde_vmla_s8 (SIMDE_MUNIT_TEST_ARGS) { struct { int8_t a[8]; int8_t b[8]; int8_t c[8]; int8_t r[8]; } test_vec[] = { { { -INT8_C( 97), -INT8_C( 50), -INT8_C( 94), -INT8_C( 28), INT8_C( 126), -INT8_C( 17), -INT8_C( 96), INT8_C( 91) }, { -INT8_C( 103), -INT8_C( 58), INT8_C( 111), -INT8_C( 40), INT8_C( 71), INT8_C( 77), INT8_C( 29), -INT8_C( 87) }, { -INT8_C( 124), INT8_C( 119), -INT8_C( 122), INT8_C( 94), -INT8_C( 88), INT8_C( 3), -INT8_C( 29), -INT8_C( 35) }, { -INT8_C( 125), -INT8_C( 40), -INT8_C( 68), INT8_C( 52), INT8_C( 22), -INT8_C( 42), INT8_C( 87), INT8_C( 64) } }, { { INT8_C( 18), INT8_C( 99), INT8_C( 76), INT8_C( 75), INT8_C( 95), -INT8_C( 107), INT8_C( 108), -INT8_C( 2) }, { INT8_C( 100), INT8_C( 14), -INT8_C( 30), -INT8_C( 30), -INT8_C( 3), -INT8_C( 125), INT8_C( 61), -INT8_C( 105) }, { INT8_C( 73), -INT8_C( 84), INT8_C( 111), -INT8_C( 112), -INT8_C( 6), -INT8_C( 116), INT8_C( 58), INT8_C( 126) }, { -INT8_C( 106), -INT8_C( 53), INT8_C( 74), INT8_C( 107), INT8_C( 113), INT8_C( 57), INT8_C( 62), INT8_C( 80) } }, { { INT8_C( 4), -INT8_C( 64), -INT8_C( 36), -INT8_C( 84), -INT8_C( 61), -INT8_C( 65), -INT8_C( 119), -INT8_C( 42) }, { INT8_C( 35), -INT8_C( 43), INT8_C( 33), -INT8_C( 126), INT8_C( 107), -INT8_C( 114), INT8_MIN, -INT8_C( 49) }, { -INT8_C( 100), INT8_C( 99), -INT8_C( 79), -INT8_C( 102), -INT8_C( 26), -INT8_C( 17), INT8_C( 49), INT8_C( 47) }, { INT8_C( 88), INT8_C( 31), -INT8_C( 83), -INT8_C( 32), -INT8_C( 27), INT8_C( 81), INT8_C( 9), -INT8_C( 41) } }, { { -INT8_C( 101), -INT8_C( 96), -INT8_C( 65), -INT8_C( 107), INT8_C( 45), -INT8_C( 7), INT8_C( 19), INT8_C( 49) }, { -INT8_C( 70), -INT8_C( 16), -INT8_C( 35), INT8_C( 125), -INT8_C( 81), INT8_C( 102), INT8_C( 83), -INT8_C( 46) }, { INT8_C( 59), INT8_C( 117), INT8_C( 84), -INT8_C( 90), INT8_C( 3), -INT8_C( 43), INT8_C( 117), -INT8_C( 97) }, { INT8_C( 121), INT8_C( 80), INT8_C( 67), -INT8_C( 93), INT8_C( 58), -INT8_C( 41), INT8_C( 2), -INT8_C( 97) } }, { { INT8_C( 56), INT8_C( 39), INT8_C( 57), INT8_C( 30), INT8_C( 22), INT8_C( 106), INT8_C( 77), -INT8_C( 79) }, { INT8_C( 11), INT8_C( 12), INT8_C( 71), INT8_C( 56), INT8_C( 6), INT8_C( 90), INT8_C( 105), -INT8_C( 64) }, { INT8_C( 74), INT8_C( 70), INT8_C( 61), -INT8_C( 6), -INT8_C( 84), -INT8_C( 111), -INT8_C( 52), -INT8_C( 25) }, { INT8_C( 102), INT8_C( 111), INT8_C( 36), -INT8_C( 50), INT8_C( 30), INT8_C( 100), -INT8_C( 7), -INT8_C( 15) } }, { { INT8_C( 6), INT8_C( 33), -INT8_C( 114), INT8_C( 9), -INT8_C( 10), INT8_C( 3), -INT8_C( 88), INT8_C( 46) }, { INT8_C( 42), -INT8_C( 30), INT8_C( 76), INT8_C( 64), INT8_C( 76), -INT8_C( 103), -INT8_C( 14), INT8_C( 87) }, { -INT8_C( 91), INT8_C( 57), -INT8_C( 113), -INT8_C( 85), -INT8_C( 109), -INT8_C( 8), INT8_C( 107), -INT8_C( 34) }, { INT8_C( 24), INT8_C( 115), INT8_C( 2), -INT8_C( 55), -INT8_C( 102), INT8_C( 59), -INT8_C( 50), -INT8_C( 96) } }, { { INT8_C( 62), -INT8_C( 87), -INT8_C( 40), -INT8_C( 22), INT8_C( 58), -INT8_C( 92), -INT8_C( 46), INT8_C( 64) }, { -INT8_C( 59), INT8_C( 96), INT8_C( 73), -INT8_C( 69), INT8_C( 99), -INT8_C( 15), -INT8_C( 23), -INT8_C( 114) }, { -INT8_C( 45), INT8_C( 53), -INT8_C( 50), INT8_C( 32), -INT8_C( 50), -INT8_C( 64), INT8_C( 119), INT8_C( 116) }, { -INT8_C( 99), -INT8_C( 119), -INT8_C( 106), INT8_C( 74), -INT8_C( 28), INT8_C( 100), INT8_C( 33), -INT8_C( 104) } }, { { -INT8_C( 7), INT8_C( 7), INT8_C( 31), -INT8_C( 115), -INT8_C( 1), -INT8_C( 117), INT8_C( 107), INT8_C( 62) }, { INT8_C( 52), INT8_C( 67), INT8_C( 40), INT8_C( 110), -INT8_C( 25), -INT8_C( 6), -INT8_C( 82), -INT8_C( 83) }, { INT8_C( 90), -INT8_C( 9), INT8_C( 104), -INT8_C( 66), -INT8_C( 24), INT8_C( 82), INT8_C( 76), -INT8_C( 68) }, { INT8_C( 65), -INT8_C( 84), INT8_C( 95), INT8_C( 49), INT8_C( 87), -INT8_C( 97), INT8_C( 19), INT8_C( 74) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int8x8_t a = simde_vld1_s8(test_vec[i].a); simde_int8x8_t b = simde_vld1_s8(test_vec[i].b); simde_int8x8_t c = simde_vld1_s8(test_vec[i].c); simde_int8x8_t r = simde_vmla_s8(a, b, c); simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r)); } return 0; } static int test_simde_vmla_s16 (SIMDE_MUNIT_TEST_ARGS) { struct { int16_t a[4]; int16_t b[4]; int16_t c[4]; int16_t r[4]; } test_vec[] = { { { INT16_C( 23455), -INT16_C( 11689), -INT16_C( 22552), INT16_C( 11017) }, { -INT16_C( 5730), INT16_C( 14488), -INT16_C( 6817), -INT16_C( 24086) }, { -INT16_C( 21930), INT16_C( 24130), INT16_C( 6050), -INT16_C( 26539) }, { -INT16_C( 15693), INT16_C( 14727), INT16_C( 22278), -INT16_C( 8773) } }, { { -INT16_C( 1714), INT16_C( 5586), -INT16_C( 5200), INT16_C( 20237) }, { INT16_C( 25670), INT16_C( 12065), INT16_C( 11020), -INT16_C( 21926) }, { -INT16_C( 3564), INT16_C( 29922), -INT16_C( 12841), INT16_C( 11541) }, { -INT16_C( 1338), -INT16_C( 23308), -INT16_C( 20796), INT16_C( 6767) } }, { { INT16_C( 22647), INT16_C( 6539), -INT16_C( 8081), -INT16_C( 16719) }, { -INT16_C( 31526), -INT16_C( 29997), -INT16_C( 8081), -INT16_C( 18982) }, { -INT16_C( 1212), INT16_C( 20708), INT16_C( 15910), INT16_C( 15355) }, { INT16_C( 24671), -INT16_C( 21129), INT16_C( 4841), INT16_C( 18799) } }, { { -INT16_C( 8911), INT16_C( 2223), -INT16_C( 15190), INT16_C( 8502) }, { -INT16_C( 16100), -INT16_C( 29638), -INT16_C( 4958), INT16_C( 31818) }, { INT16_C( 7536), -INT16_C( 8442), -INT16_C( 7939), INT16_C( 16788) }, { -INT16_C( 31375), -INT16_C( 10229), INT16_C( 24772), -INT16_C( 14850) } }, { { INT16_C( 31196), INT16_C( 658), -INT16_C( 29257), -INT16_C( 6083) }, { -INT16_C( 5014), INT16_C( 5617), INT16_C( 10161), -INT16_C( 13002) }, { INT16_C( 29160), -INT16_C( 30119), -INT16_C( 23715), -INT16_C( 13050) }, { -INT16_C( 31764), -INT16_C( 29349), -INT16_C( 21500), -INT16_C( 2687) } }, { { INT16_C( 3520), -INT16_C( 16980), INT16_C( 16621), -INT16_C( 13825) }, { -INT16_C( 28231), INT16_C( 29132), INT16_C( 2334), -INT16_C( 30631) }, { INT16_C( 19190), -INT16_C( 22627), -INT16_C( 11151), INT16_C( 23156) }, { -INT16_C( 28794), -INT16_C( 25656), INT16_C( 7979), -INT16_C( 9133) } }, { { -INT16_C( 12731), -INT16_C( 23836), -INT16_C( 5263), INT16_C( 12911) }, { INT16_C( 7160), -INT16_C( 6673), -INT16_C( 4517), INT16_C( 5551) }, { INT16_C( 31615), -INT16_C( 25210), -INT16_C( 8316), INT16_C( 31270) }, { -INT16_C( 10675), -INT16_C( 28418), INT16_C( 5981), -INT16_C( 12183) } }, { { -INT16_C( 15574), -INT16_C( 25823), -INT16_C( 26985), -INT16_C( 8971) }, { -INT16_C( 9628), -INT16_C( 10882), -INT16_C( 4667), -INT16_C( 17145) }, { -INT16_C( 2296), INT16_C( 25762), INT16_C( 20965), INT16_C( 25977) }, { INT16_C( 4682), -INT16_C( 4899), -INT16_C( 25392), -INT16_C( 1980) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int16x4_t a = simde_vld1_s16(test_vec[i].a); simde_int16x4_t b = simde_vld1_s16(test_vec[i].b); simde_int16x4_t c = simde_vld1_s16(test_vec[i].c); simde_int16x4_t r = simde_vmla_s16(a, b, c); simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r)); } return 0; } static int test_simde_vmla_s32 (SIMDE_MUNIT_TEST_ARGS) { struct { int32_t a[2]; int32_t b[2]; int32_t c[2]; int32_t r[2]; } test_vec[] = { { { -INT32_C( 1360280946), -INT32_C( 1150468689) }, { INT32_C( 44236099), -INT32_C( 1372656593) }, { INT32_C( 30169474), -INT32_C( 449840714) }, { -INT32_C( 1004492396), -INT32_C( 1675370983) } }, { { -INT32_C( 37762479), -INT32_C( 902980548) }, { INT32_C( 242751582), -INT32_C( 1714821803) }, { INT32_C( 312175587), -INT32_C( 624899752) }, { INT32_C( 1633071019), -INT32_C( 1906037132) } }, { { -INT32_C( 656700382), -INT32_C( 675411066) }, { INT32_C( 315915733), INT32_C( 2027684377) }, { INT32_C( 1887851802), INT32_C( 487149370) }, { INT32_C( 1572211908), INT32_C( 102579248) } }, { { INT32_C( 305112250), -INT32_C( 1863520146) }, { INT32_C( 40487036), -INT32_C( 1462097965) }, { -INT32_C( 1111839068), -INT32_C( 885680208) }, { -INT32_C( 1169138646), -INT32_C( 468400514) } }, { { INT32_C( 641448940), -INT32_C( 985381878) }, { INT32_C( 1456960488), -INT32_C( 521681821) }, { INT32_C( 1608667276), INT32_C( 453491831) }, { INT32_C( 1662492364), INT32_C( 1424900623) } }, { { INT32_C( 467190379), INT32_C( 1172704857) }, { -INT32_C( 731176503), INT32_C( 1318694757) }, { -INT32_C( 2036043741), -INT32_C( 1067021516) }, { -INT32_C( 536194842), INT32_C( 1368884701) } }, { { INT32_C( 1377782235), INT32_C( 1886201605) }, { INT32_C( 1116489449), INT32_C( 495415892) }, { -INT32_C( 101584236), -INT32_C( 985167198) }, { -INT32_C( 929461617), INT32_C( 2098251821) } }, { { INT32_C( 793505019), INT32_C( 1408283255) }, { INT32_C( 10817531), INT32_C( 527504182) }, { -INT32_C( 1386087079), INT32_C( 63629423) }, { INT32_C( 915704382), INT32_C( 972879585) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int32x2_t a = simde_vld1_s32(test_vec[i].a); simde_int32x2_t b = simde_vld1_s32(test_vec[i].b); simde_int32x2_t c = simde_vld1_s32(test_vec[i].c); simde_int32x2_t r = simde_vmla_s32(a, b, c); simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r)); } return 0; } static int test_simde_vmla_u8 (SIMDE_MUNIT_TEST_ARGS) { struct { uint8_t a[16]; uint8_t b[16]; uint8_t c[16]; uint8_t r[16]; } test_vec[] = { { { UINT8_C( 99), UINT8_C( 82), UINT8_C(243), UINT8_C(181), UINT8_C(230), UINT8_C(106), UINT8_C(221), UINT8_C(140) }, { UINT8_C(211), UINT8_C(191), UINT8_C(194), UINT8_C(123), UINT8_C( 58), UINT8_C(224), UINT8_C(253), UINT8_C(107) }, { UINT8_C(179), UINT8_C(200), UINT8_C(167), UINT8_C(104), UINT8_C( 33), UINT8_C(216), UINT8_C(117), UINT8_C(211) }, { UINT8_C(236), UINT8_C(138), UINT8_C(129), UINT8_C(173), UINT8_C( 96), UINT8_C(106), UINT8_C(126), UINT8_C(189) } }, { { UINT8_C( 77), UINT8_C(143), UINT8_C(122), UINT8_C( 34), UINT8_C( 94), UINT8_C( 20), UINT8_C(148), UINT8_C(194) }, { UINT8_C(102), UINT8_C(135), UINT8_C(119), UINT8_C( 76), UINT8_C(241), UINT8_C( 84), UINT8_C(216), UINT8_C(197) }, { UINT8_C( 19), UINT8_C(154), UINT8_C( 64), UINT8_C( 77), UINT8_C(122), UINT8_C( 61), UINT8_C(184), UINT8_C( 45) }, { UINT8_C(223), UINT8_C(197), UINT8_C( 58), UINT8_C(254), UINT8_C( 56), UINT8_C( 24), UINT8_C(212), UINT8_C( 99) } }, { { UINT8_C( 5), UINT8_C( 96), UINT8_C(149), UINT8_C( 38), UINT8_C( 56), UINT8_C( 10), UINT8_C(249), UINT8_C(133) }, { UINT8_C(154), UINT8_C(115), UINT8_C(167), UINT8_C(248), UINT8_C(135), UINT8_C( 59), UINT8_C(186), UINT8_C(237) }, { UINT8_C(194), UINT8_C( 49), UINT8_C( 57), UINT8_C(180), UINT8_C(133), UINT8_C( 17), UINT8_C(121), UINT8_C(153) }, { UINT8_C(185), UINT8_C( 99), UINT8_C(196), UINT8_C(134), UINT8_C( 91), UINT8_C(245), UINT8_C(227), UINT8_C( 42) } }, { { UINT8_C(171), UINT8_C(185), UINT8_C(230), UINT8_C( 38), UINT8_C(246), UINT8_C(159), UINT8_C( 83), UINT8_C(251) }, { UINT8_MAX, UINT8_C(233), UINT8_C( 33), UINT8_C( 55), UINT8_C(243), UINT8_C( 27), UINT8_C(188), UINT8_C(141) }, { UINT8_C(142), UINT8_C( 99), UINT8_C(134), UINT8_C( 22), UINT8_C(159), UINT8_C( 64), UINT8_C( 3), UINT8_C( 97) }, { UINT8_C( 29), UINT8_C(212), UINT8_C( 44), UINT8_C(224), UINT8_C(227), UINT8_C( 95), UINT8_C(135), UINT8_C(104) } }, { { UINT8_C(114), UINT8_C( 61), UINT8_C( 21), UINT8_C(247), UINT8_C( 78), UINT8_C(142), UINT8_C(144), UINT8_C(250) }, { UINT8_C( 71), UINT8_C(119), UINT8_C( 32), UINT8_C( 61), UINT8_C( 22), UINT8_C(115), UINT8_C( 56), UINT8_C( 21) }, { UINT8_C( 92), UINT8_C( 90), UINT8_C( 76), UINT8_C( 80), UINT8_C(117), UINT8_C( 8), UINT8_C(221), UINT8_C( 3) }, { UINT8_C(246), UINT8_C( 19), UINT8_C(149), UINT8_C( 7), UINT8_C( 92), UINT8_C( 38), UINT8_C(232), UINT8_C( 57) } }, { { UINT8_C(107), UINT8_C( 99), UINT8_C( 25), UINT8_C( 10), UINT8_C(164), UINT8_C( 29), UINT8_C(108), UINT8_C( 22) }, { UINT8_C( 90), UINT8_C(129), UINT8_C( 13), UINT8_C(168), UINT8_C( 16), UINT8_C(158), UINT8_C(162), UINT8_C( 87) }, { UINT8_C( 21), UINT8_C(194), UINT8_C(149), UINT8_C( 43), UINT8_C( 54), UINT8_C(205), UINT8_C( 64), UINT8_C(146) }, { UINT8_C(205), UINT8_C( 37), UINT8_C(170), UINT8_C( 66), UINT8_C( 4), UINT8_C(163), UINT8_C(236), UINT8_C(180) } }, { { UINT8_C( 39), UINT8_C(140), UINT8_C(226), UINT8_C(156), UINT8_C(148), UINT8_C(192), UINT8_C(160), UINT8_MAX }, { UINT8_C( 35), UINT8_C(185), UINT8_C( 10), UINT8_C(199), UINT8_C(214), UINT8_C(118), UINT8_C(221), UINT8_C( 48) }, { UINT8_C(247), UINT8_C(235), UINT8_C(217), UINT8_C( 7), UINT8_C(137), UINT8_C(123), UINT8_C( 95), UINT8_C(158) }, { UINT8_C(236), UINT8_C( 95), UINT8_C( 92), UINT8_C( 13), UINT8_C( 26), UINT8_C(114), UINT8_C(163), UINT8_C(159) } }, { { UINT8_C( 62), UINT8_C(244), UINT8_C(201), UINT8_C(116), UINT8_C(193), UINT8_C( 9), UINT8_C( 6), UINT8_C(233) }, { UINT8_C(149), UINT8_C(233), UINT8_C(133), UINT8_C( 41), UINT8_C(169), UINT8_C( 37), UINT8_C( 40), UINT8_C(204) }, { UINT8_C(223), UINT8_C( 50), UINT8_C(148), UINT8_C(181), UINT8_C(168), UINT8_C(113), UINT8_C(230), UINT8_C(160) }, { UINT8_C( 9), UINT8_C(118), UINT8_C(173), UINT8_C(113), UINT8_C(169), UINT8_C( 94), UINT8_C(246), UINT8_C(105) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a); simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b); simde_uint8x8_t c = simde_vld1_u8(test_vec[i].c); simde_uint8x8_t r = simde_vmla_u8(a, b, c); simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r)); } return 0; } static int test_simde_vmla_u16 (SIMDE_MUNIT_TEST_ARGS) { struct { uint16_t a[4]; uint16_t b[4]; uint16_t c[4]; uint16_t r[4]; } test_vec[] = { { { UINT16_C(33884), UINT16_C(33998), UINT16_C(54257), UINT16_C( 4534) }, { UINT16_C( 87), UINT16_C(11697), UINT16_C(54623), UINT16_C(61277) }, { UINT16_C(41847), UINT16_C(64502), UINT16_C(55349), UINT16_C(33687) }, { UINT16_C( 4557), UINT16_C(63460), UINT16_C(10396), UINT16_C(55441) } }, { { UINT16_C(47710), UINT16_C( 1621), UINT16_C(61515), UINT16_C(43253) }, { UINT16_C(50037), UINT16_C(26156), UINT16_C(58262), UINT16_C(61048) }, { UINT16_C(10723), UINT16_C(16923), UINT16_C(30974), UINT16_C(30001) }, { UINT16_C(51229), UINT16_C( 9465), UINT16_C( 3871), UINT16_C( 9709) } }, { { UINT16_C(10011), UINT16_C(20849), UINT16_C( 2303), UINT16_C(24276) }, { UINT16_C(10946), UINT16_C( 3684), UINT16_C(22810), UINT16_C(36790) }, { UINT16_C(57885), UINT16_C(46070), UINT16_C(28357), UINT16_C(43169) }, { UINT16_C(17173), UINT16_C( 4489), UINT16_C(50689), UINT16_C(12362) } }, { { UINT16_C(48279), UINT16_C(38378), UINT16_C( 6965), UINT16_C(20491) }, { UINT16_C(31810), UINT16_C(17057), UINT16_C(30340), UINT16_C(18336) }, { UINT16_C( 1184), UINT16_C(47701), UINT16_C( 2910), UINT16_C(31562) }, { UINT16_C(28119), UINT16_C(44895), UINT16_C(19373), UINT16_C(58443) } }, { { UINT16_C(16621), UINT16_C(45870), UINT16_C(53422), UINT16_C(17755) }, { UINT16_C(18060), UINT16_C(49626), UINT16_C(58721), UINT16_C(42002) }, { UINT16_C(45921), UINT16_C(59110), UINT16_C(34345), UINT16_C(51501) }, { UINT16_C(57337), UINT16_C(47370), UINT16_C(21303), UINT16_C(16005) } }, { { UINT16_C(33418), UINT16_C(59524), UINT16_C(52877), UINT16_C(31331) }, { UINT16_C(37390), UINT16_C(48173), UINT16_C(35170), UINT16_C(60929) }, { UINT16_C(56271), UINT16_C(12464), UINT16_C(49857), UINT16_C( 8916) }, { UINT16_C(38364), UINT16_C(46964), UINT16_C(42351), UINT16_C(46391) } }, { { UINT16_C(47733), UINT16_C(40712), UINT16_C(13632), UINT16_C(52072) }, { UINT16_C(60599), UINT16_C(17587), UINT16_C( 6074), UINT16_C(51391) }, { UINT16_C(60585), UINT16_C( 2948), UINT16_C(34165), UINT16_C(17657) }, { UINT16_C(45892), UINT16_C(48212), UINT16_C(44866), UINT16_C(51503) } }, { { UINT16_C(43361), UINT16_C( 8821), UINT16_C(18795), UINT16_C(57668) }, { UINT16_C(19716), UINT16_C(17536), UINT16_C(59522), UINT16_C(14863) }, { UINT16_C(50133), UINT16_C(36734), UINT16_C(15834), UINT16_C(33624) }, { UINT16_C(51637), UINT16_C(22901), UINT16_C(16927), UINT16_C(33644) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a); simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b); simde_uint16x4_t c = simde_vld1_u16(test_vec[i].c); simde_uint16x4_t r = simde_vmla_u16(a, b, c); simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r)); } return 0; } static int test_simde_vmla_u32 (SIMDE_MUNIT_TEST_ARGS) { struct { uint32_t a[2]; uint32_t b[2]; uint32_t c[2]; uint32_t r[2]; } test_vec[] = { { { UINT32_C(3833350932), UINT32_C(3771528631) }, { UINT32_C(1108988095), UINT32_C(2937766969) }, { UINT32_C( 780880486), UINT32_C(1841350699) }, { UINT32_C(1523690798), UINT32_C(2740482890) } }, { { UINT32_C(1330709669), UINT32_C(2095324776) }, { UINT32_C( 543252585), UINT32_C( 352333142) }, { UINT32_C( 928455165), UINT32_C(1155953373) }, { UINT32_C( 614894954), UINT32_C(1165987238) } }, { { UINT32_C(3883037116), UINT32_C(3730125369) }, { UINT32_C(2653791798), UINT32_C( 756748740) }, { UINT32_C(3360521330), UINT32_C(2799521193) }, { UINT32_C(2726731208), UINT32_C( 935321757) } }, { { UINT32_C(1155347559), UINT32_C(1669907366) }, { UINT32_C(1850407732), UINT32_C(1682743085) }, { UINT32_C( 167934534), UINT32_C(4248313227) }, { UINT32_C( 662482079), UINT32_C(3523430933) } }, { { UINT32_C(1120241049), UINT32_C( 988390099) }, { UINT32_C(2105460439), UINT32_C(3202353034) }, { UINT32_C( 791423746), UINT32_C( 278100426) }, { UINT32_C( 790442055), UINT32_C(2944257975) } }, { { UINT32_C(2115737331), UINT32_C(1299993523) }, { UINT32_C(2878292440), UINT32_C(3152378084) }, { UINT32_C(3375916095), UINT32_C(1837570411) }, { UINT32_C(2874485531), UINT32_C( 326115071) } }, { { UINT32_C( 245150788), UINT32_C( 538914861) }, { UINT32_C(2040412870), UINT32_C(1707481741) }, { UINT32_C(1074878044), UINT32_C( 234616526) }, { UINT32_C(1381914476), UINT32_C(2487946147) } }, { { UINT32_C(3319149402), UINT32_C(2419220044) }, { UINT32_C(1067437842), UINT32_C(3311386367) }, { UINT32_C(2235497976), UINT32_C(1961493784) }, { UINT32_C(3634861770), UINT32_C( 285032756) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a); simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b); simde_uint32x2_t c = simde_vld1_u32(test_vec[i].c); simde_uint32x2_t r = simde_vmla_u32(a, b, c); simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_f32 (SIMDE_MUNIT_TEST_ARGS) { struct { simde_float32 a[4]; simde_float32 b[4]; simde_float32 c[4]; simde_float32 r[4]; } test_vec[] = { { { SIMDE_FLOAT32_C(145.140869), SIMDE_FLOAT32_C(86.372559), SIMDE_FLOAT32_C(588.548218), SIMDE_FLOAT32_C(215.169800) }, { SIMDE_FLOAT32_C(440.652344), SIMDE_FLOAT32_C(-714.658264), SIMDE_FLOAT32_C(-845.502808), SIMDE_FLOAT32_C(657.962158) }, { SIMDE_FLOAT32_C(752.153320), SIMDE_FLOAT32_C(738.940552), SIMDE_FLOAT32_C(-56.434509), SIMDE_FLOAT32_C(-510.827606) }, { SIMDE_FLOAT32_C(331583.281250), SIMDE_FLOAT32_C(-528003.625000), SIMDE_FLOAT32_C(48304.082031), SIMDE_FLOAT32_C(-335890.062500) } }, { { SIMDE_FLOAT32_C(204.974365), SIMDE_FLOAT32_C(-576.728638), SIMDE_FLOAT32_C(89.728027), SIMDE_FLOAT32_C(612.498413) }, { SIMDE_FLOAT32_C(-581.968323), SIMDE_FLOAT32_C(434.484985), SIMDE_FLOAT32_C(-203.843140), SIMDE_FLOAT32_C(812.033081) }, { SIMDE_FLOAT32_C(-54.438843), SIMDE_FLOAT32_C(-360.203674), SIMDE_FLOAT32_C(-623.818970), SIMDE_FLOAT32_C(-160.126221) }, { SIMDE_FLOAT32_C(31886.656250), SIMDE_FLOAT32_C(-157079.828125), SIMDE_FLOAT32_C(127250.945312), SIMDE_FLOAT32_C(-129415.289062) } }, { { SIMDE_FLOAT32_C(-430.798706), SIMDE_FLOAT32_C(612.035400), SIMDE_FLOAT32_C(-285.161377), SIMDE_FLOAT32_C(-857.128662) }, { SIMDE_FLOAT32_C(-202.940674), SIMDE_FLOAT32_C(-256.752319), SIMDE_FLOAT32_C(574.135498), SIMDE_FLOAT32_C(942.200195) }, { SIMDE_FLOAT32_C(829.620117), SIMDE_FLOAT32_C(162.683838), SIMDE_FLOAT32_C(157.370117), SIMDE_FLOAT32_C(270.272583) }, { SIMDE_FLOAT32_C(-168794.468750), SIMDE_FLOAT32_C(-41157.417969), SIMDE_FLOAT32_C(90066.609375), SIMDE_FLOAT32_C(253793.750000) } }, { { SIMDE_FLOAT32_C(448.025513), SIMDE_FLOAT32_C(311.867310), SIMDE_FLOAT32_C(-71.765259), SIMDE_FLOAT32_C(200.178955) }, { SIMDE_FLOAT32_C(50.807861), SIMDE_FLOAT32_C(871.800171), SIMDE_FLOAT32_C(689.351196), SIMDE_FLOAT32_C(-744.217712) }, { SIMDE_FLOAT32_C(-704.928345), SIMDE_FLOAT32_C(-220.920593), SIMDE_FLOAT32_C(868.280640), SIMDE_FLOAT32_C(-286.896667) }, { SIMDE_FLOAT32_C(-35367.875000), SIMDE_FLOAT32_C(-192286.734375), SIMDE_FLOAT32_C(598478.562500), SIMDE_FLOAT32_C(213713.750000) } }, { { SIMDE_FLOAT32_C(-786.435486), SIMDE_FLOAT32_C(-335.562378), SIMDE_FLOAT32_C(-474.863464), SIMDE_FLOAT32_C(159.125610) }, { SIMDE_FLOAT32_C(304.234009), SIMDE_FLOAT32_C(-98.682495), SIMDE_FLOAT32_C(998.999390), SIMDE_FLOAT32_C(873.435303) }, { SIMDE_FLOAT32_C(-486.647034), SIMDE_FLOAT32_C(-286.161804), SIMDE_FLOAT32_C(-983.693298), SIMDE_FLOAT32_C(310.412231) }, { SIMDE_FLOAT32_C(-148841.015625), SIMDE_FLOAT32_C(27903.597656), SIMDE_FLOAT32_C(-983183.875000), SIMDE_FLOAT32_C(271284.125000) } }, { { SIMDE_FLOAT32_C(457.085815), SIMDE_FLOAT32_C(590.442139), SIMDE_FLOAT32_C(252.612549), SIMDE_FLOAT32_C(286.706055) }, { SIMDE_FLOAT32_C(-246.873962), SIMDE_FLOAT32_C(-590.017212), SIMDE_FLOAT32_C(-443.021301), SIMDE_FLOAT32_C(-798.848389) }, { SIMDE_FLOAT32_C(721.850098), SIMDE_FLOAT32_C(485.213501), SIMDE_FLOAT32_C(401.330566), SIMDE_FLOAT32_C(-227.341858) }, { SIMDE_FLOAT32_C(-177748.921875), SIMDE_FLOAT32_C(-285693.875000), SIMDE_FLOAT32_C(-177545.375000), SIMDE_FLOAT32_C(181898.375000) } }, { { SIMDE_FLOAT32_C(357.013794), SIMDE_FLOAT32_C(90.682007), SIMDE_FLOAT32_C(28.440430), SIMDE_FLOAT32_C(652.085327) }, { SIMDE_FLOAT32_C(869.761353), SIMDE_FLOAT32_C(-103.278809), SIMDE_FLOAT32_C(-634.811157), SIMDE_FLOAT32_C(-916.674072) }, { SIMDE_FLOAT32_C(561.158813), SIMDE_FLOAT32_C(-109.674683), SIMDE_FLOAT32_C(242.451660), SIMDE_FLOAT32_C(-134.607117) }, { SIMDE_FLOAT32_C(488431.250000), SIMDE_FLOAT32_C(11417.751953), SIMDE_FLOAT32_C(-153882.578125), SIMDE_FLOAT32_C(124042.937500) } }, { { SIMDE_FLOAT32_C(791.642822), SIMDE_FLOAT32_C(241.451050), SIMDE_FLOAT32_C(-261.171753), SIMDE_FLOAT32_C(-695.004150) }, { SIMDE_FLOAT32_C(955.289307), SIMDE_FLOAT32_C(-244.864990), SIMDE_FLOAT32_C(615.408081), SIMDE_FLOAT32_C(412.375122) }, { SIMDE_FLOAT32_C(-654.422729), SIMDE_FLOAT32_C(-131.979187), SIMDE_FLOAT32_C(-300.918701), SIMDE_FLOAT32_C(98.703369) }, { SIMDE_FLOAT32_C(-624371.437500), SIMDE_FLOAT32_C(32558.533203), SIMDE_FLOAT32_C(-185448.968750), SIMDE_FLOAT32_C(40007.808594) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a); simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b); simde_float32x4_t c = simde_vld1q_f32(test_vec[i].c); simde_float32x4_t r = simde_vmlaq_f32(a, b, c); simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1); } return 0; } static int test_simde_vmlaq_f64 (SIMDE_MUNIT_TEST_ARGS) { struct { simde_float64 a[2]; simde_float64 b[2]; simde_float64 c[2]; simde_float64 r[2]; } test_vec[] = { { { SIMDE_FLOAT64_C(137.836326), SIMDE_FLOAT64_C(180.498224) }, { SIMDE_FLOAT64_C(70.815405), SIMDE_FLOAT64_C(-388.999976) }, { SIMDE_FLOAT64_C(-611.056813), SIMDE_FLOAT64_C(-662.416708) }, { SIMDE_FLOAT64_C(-43134.399584), SIMDE_FLOAT64_C(257860.581526) } }, { { SIMDE_FLOAT64_C(-410.709663), SIMDE_FLOAT64_C(-321.801186) }, { SIMDE_FLOAT64_C(20.311225), SIMDE_FLOAT64_C(-337.649517) }, { SIMDE_FLOAT64_C(-755.163089), SIMDE_FLOAT64_C(32.799101) }, { SIMDE_FLOAT64_C(-15748.996891), SIMDE_FLOAT64_C(-11396.401804) } }, { { SIMDE_FLOAT64_C(-790.783079), SIMDE_FLOAT64_C(351.759081) }, { SIMDE_FLOAT64_C(914.436994), SIMDE_FLOAT64_C(117.928983) }, { SIMDE_FLOAT64_C(-166.522701), SIMDE_FLOAT64_C(878.769813) }, { SIMDE_FLOAT64_C(-153065.301121), SIMDE_FLOAT64_C(103984.189630) } }, { { SIMDE_FLOAT64_C(-131.289381), SIMDE_FLOAT64_C(-355.855969) }, { SIMDE_FLOAT64_C(31.078331), SIMDE_FLOAT64_C(58.849271) }, { SIMDE_FLOAT64_C(-20.792446), SIMDE_FLOAT64_C(-30.490121) }, { SIMDE_FLOAT64_C(-777.483883), SIMDE_FLOAT64_C(-2150.177382) } }, { { SIMDE_FLOAT64_C(869.063754), SIMDE_FLOAT64_C(516.089691) }, { SIMDE_FLOAT64_C(-998.833277), SIMDE_FLOAT64_C(424.541474) }, { SIMDE_FLOAT64_C(263.351169), SIMDE_FLOAT64_C(168.341670) }, { SIMDE_FLOAT64_C(-262174.847521), SIMDE_FLOAT64_C(71984.110331) } }, { { SIMDE_FLOAT64_C(546.778995), SIMDE_FLOAT64_C(-598.812505) }, { SIMDE_FLOAT64_C(-651.160107), SIMDE_FLOAT64_C(-382.405600) }, { SIMDE_FLOAT64_C(12.187520), SIMDE_FLOAT64_C(-262.216919) }, { SIMDE_FLOAT64_C(-7389.247558), SIMDE_FLOAT64_C(99674.405701) } }, { { SIMDE_FLOAT64_C(-44.822308), SIMDE_FLOAT64_C(601.477857) }, { SIMDE_FLOAT64_C(415.981895), SIMDE_FLOAT64_C(975.488918) }, { SIMDE_FLOAT64_C(-736.171662), SIMDE_FLOAT64_C(660.818807) }, { SIMDE_FLOAT64_C(-306278.905223), SIMDE_FLOAT64_C(645222.900518) } }, { { SIMDE_FLOAT64_C(8.288018), SIMDE_FLOAT64_C(-526.954741) }, { SIMDE_FLOAT64_C(12.577887), SIMDE_FLOAT64_C(-77.274989) }, { SIMDE_FLOAT64_C(590.974242), SIMDE_FLOAT64_C(846.055186) }, { SIMDE_FLOAT64_C(7441.495354), SIMDE_FLOAT64_C(-65905.859876) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a); simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b); simde_float64x2_t c = simde_vld1q_f64(test_vec[i].c); simde_float64x2_t r = simde_vmlaq_f64(a, b, c); simde_test_arm_neon_assert_equal_f64x2(r, simde_vld1q_f64(test_vec[i].r), 1); } return 0; } static int test_simde_vmlaq_s8 (SIMDE_MUNIT_TEST_ARGS) { struct { int8_t a[16]; int8_t b[16]; int8_t c[16]; int8_t r[16]; } test_vec[] = { { { -INT8_C( 119), INT8_C( 54), -INT8_C( 42), INT8_C( 7), -INT8_C( 21), -INT8_C( 83), -INT8_C( 69), INT8_C( 123), -INT8_C( 21), -INT8_C( 32), INT8_C( 5), -INT8_C( 52), -INT8_C( 83), -INT8_C( 31), INT8_C( 59), INT8_C( 78) }, { INT8_C( 53), INT8_C( 26), -INT8_C( 101), INT8_C( 21), INT8_C( 9), INT8_C( 41), -INT8_C( 27), -INT8_C( 91), -INT8_C( 79), INT8_C( 55), INT8_C( 62), INT8_C( 89), INT8_C( 47), -INT8_C( 123), INT8_C( 15), -INT8_C( 71) }, { -INT8_C( 69), -INT8_C( 27), -INT8_C( 64), -INT8_C( 89), -INT8_C( 110), INT8_C( 123), INT8_C( 34), INT8_C( 126), INT8_C( 91), INT8_C( 40), INT8_C( 74), INT8_C( 9), INT8_C( 9), -INT8_C( 123), INT8_C( 87), INT8_C( 62) }, { INT8_C( 64), INT8_C( 120), INT8_C( 22), -INT8_C( 70), INT8_C( 13), INT8_C( 96), INT8_C( 37), -INT8_C( 79), -INT8_C( 42), INT8_C( 120), -INT8_C( 15), -INT8_C( 19), INT8_C( 84), -INT8_C( 6), INT8_C( 84), INT8_C( 28) } }, { { -INT8_C( 96), -INT8_C( 13), INT8_C( 83), -INT8_C( 87), INT8_C( 28), INT8_C( 56), INT8_C( 78), -INT8_C( 51), INT8_C( 112), -INT8_C( 116), INT8_C( 39), -INT8_C( 97), INT8_C( 17), INT8_C( 54), INT8_C( 88), -INT8_C( 51) }, { INT8_C( 28), INT8_C( 24), INT8_C( 116), -INT8_C( 82), -INT8_C( 109), -INT8_C( 106), INT8_C( 44), -INT8_C( 17), -INT8_C( 66), INT8_C( 118), -INT8_C( 8), -INT8_C( 57), -INT8_C( 4), INT8_C( 79), INT8_C( 5), -INT8_C( 100) }, { INT8_C( 66), INT8_C( 88), INT8_C( 69), INT8_C( 94), -INT8_C( 111), -INT8_C( 109), INT8_C( 44), INT8_C( 1), INT8_C( 31), INT8_C( 83), -INT8_C( 96), INT8_C( 48), -INT8_C( 119), -INT8_C( 7), -INT8_C( 3), -INT8_C( 91) }, { -INT8_C( 40), INT8_C( 51), -INT8_C( 105), -INT8_C( 115), INT8_C( 95), INT8_C( 90), -INT8_C( 34), -INT8_C( 68), INT8_C( 114), -INT8_C( 50), INT8_C( 39), -INT8_C( 17), -INT8_C( 19), INT8_C( 13), INT8_C( 73), INT8_C( 89) } }, { { INT8_C( 17), INT8_C( 113), INT8_C( 84), -INT8_C( 91), INT8_C( 8), INT8_MIN, -INT8_C( 108), -INT8_C( 58), -INT8_C( 9), -INT8_C( 116), -INT8_C( 114), -INT8_C( 13), -INT8_C( 37), -INT8_C( 109), -INT8_C( 113), INT8_C( 30) }, { -INT8_C( 20), -INT8_C( 44), INT8_C( 124), INT8_C( 125), INT8_C( 103), -INT8_C( 88), INT8_C( 126), -INT8_C( 122), -INT8_C( 5), INT8_C( 30), -INT8_C( 74), -INT8_C( 123), INT8_C( 23), -INT8_C( 76), INT8_C( 42), INT8_C( 41) }, { INT8_C( 37), INT8_C( 126), -INT8_C( 50), INT8_C( 45), -INT8_C( 1), INT8_C( 98), -INT8_C( 12), -INT8_C( 10), -INT8_C( 18), -INT8_C( 126), -INT8_C( 23), -INT8_C( 55), INT8_C( 21), INT8_C( 120), -INT8_C( 25), INT8_C( 1) }, { INT8_C( 45), -INT8_C( 55), INT8_C( 28), -INT8_C( 98), -INT8_C( 95), -INT8_C( 48), -INT8_C( 84), -INT8_C( 118), INT8_C( 81), -INT8_C( 56), INT8_C( 52), INT8_C( 96), -INT8_C( 66), -INT8_C( 13), INT8_C( 117), INT8_C( 71) } }, { { INT8_C( 76), INT8_C( 100), INT8_C( 126), -INT8_C( 77), INT8_C( 12), -INT8_C( 4), INT8_C( 57), INT8_C( 8), INT8_C( 27), -INT8_C( 17), -INT8_C( 115), INT8_C( 50), -INT8_C( 93), -INT8_C( 73), INT8_C( 91), -INT8_C( 55) }, { INT8_C( 54), INT8_C( 41), -INT8_C( 10), INT8_C( 53), -INT8_C( 117), -INT8_C( 22), INT8_C( 43), INT8_C( 121), INT8_C( 108), INT8_C( 20), INT8_C( 67), -INT8_C( 126), -INT8_C( 116), INT8_C( 42), -INT8_C( 125), -INT8_C( 40) }, { -INT8_C( 114), INT8_C( 2), -INT8_C( 117), -INT8_C( 101), -INT8_C( 2), -INT8_C( 60), -INT8_C( 93), INT8_C( 25), -INT8_C( 77), INT8_C( 48), INT8_C( 76), INT8_C( 87), -INT8_C( 25), -INT8_C( 89), INT8_C( 32), INT8_C( 29) }, { INT8_C( 64), -INT8_C( 74), INT8_C( 16), -INT8_C( 54), -INT8_C( 10), INT8_C( 36), -INT8_C( 102), -INT8_C( 39), -INT8_C( 97), -INT8_C( 81), INT8_C( 113), INT8_C( 96), -INT8_C( 9), INT8_C( 29), -INT8_C( 69), INT8_C( 65) } }, { { -INT8_C( 47), INT8_C( 22), INT8_C( 82), INT8_C( 92), INT8_C( 1), INT8_C( 125), -INT8_C( 42), INT8_C( 109), -INT8_C( 111), INT8_C( 25), -INT8_C( 17), INT8_C( 29), INT8_C( 67), INT8_C( 115), -INT8_C( 11), -INT8_C( 46) }, { INT8_C( 117), INT8_MIN, INT8_C( 109), INT8_C( 115), INT8_C( 68), INT8_C( 16), -INT8_C( 115), -INT8_C( 8), INT8_C( 64), -INT8_C( 39), INT8_C( 79), INT8_C( 39), INT8_MIN, INT8_C( 111), INT8_C( 69), INT8_C( 81) }, { -INT8_C( 123), -INT8_C( 105), -INT8_C( 82), -INT8_C( 122), INT8_C( 21), -INT8_C( 124), -INT8_C( 12), -INT8_C( 90), -INT8_C( 99), -INT8_C( 29), -INT8_C( 60), -INT8_C( 32), INT8_C( 86), -INT8_C( 71), -INT8_C( 78), -INT8_C( 53) }, { -INT8_C( 102), -INT8_C( 106), INT8_C( 104), -INT8_C( 114), -INT8_C( 107), -INT8_C( 67), INT8_C( 58), INT8_C( 61), -INT8_C( 47), -INT8_C( 124), INT8_C( 107), INT8_C( 61), INT8_C( 67), -INT8_C( 86), -INT8_C( 17), INT8_C( 13) } }, { { INT8_C( 58), INT8_C( 31), INT8_C( 63), INT8_C( 126), INT8_C( 47), -INT8_C( 52), INT8_C( 118), INT8_C( 111), -INT8_C( 91), -INT8_C( 59), -INT8_C( 105), INT8_C( 37), INT8_C( 52), -INT8_C( 36), INT8_C( 119), -INT8_C( 70) }, { INT8_C( 115), INT8_C( 37), INT8_C( 64), -INT8_C( 120), -INT8_C( 87), INT8_C( 52), INT8_C( 47), INT8_C( 70), INT8_C( 24), -INT8_C( 13), INT8_C( 38), INT8_C( 110), -INT8_C( 84), -INT8_C( 39), INT8_C( 58), -INT8_C( 26) }, { -INT8_C( 8), INT8_C( 121), INT8_C( 101), INT8_C( 40), INT8_C( 69), -INT8_C( 37), -INT8_C( 105), -INT8_C( 22), -INT8_C( 95), INT8_C( 46), INT8_C( 15), -INT8_C( 43), INT8_C( 10), -INT8_C( 122), -INT8_C( 113), INT8_C( 126) }, { -INT8_C( 94), -INT8_C( 100), INT8_MAX, -INT8_C( 66), -INT8_C( 68), INT8_C( 72), INT8_C( 47), INT8_C( 107), -INT8_C( 67), INT8_C( 111), -INT8_C( 47), -INT8_C( 85), -INT8_C( 20), INT8_C( 114), -INT8_C( 35), -INT8_C( 18) } }, { { -INT8_C( 85), -INT8_C( 48), INT8_C( 6), INT8_C( 84), INT8_C( 4), INT8_C( 53), -INT8_C( 102), INT8_C( 28), INT8_C( 40), -INT8_C( 63), -INT8_C( 117), -INT8_C( 43), -INT8_C( 102), -INT8_C( 59), -INT8_C( 69), -INT8_C( 110) }, { INT8_C( 62), INT8_C( 32), -INT8_C( 70), -INT8_C( 125), -INT8_C( 4), INT8_C( 82), INT8_C( 109), -INT8_C( 99), INT8_MIN, INT8_C( 124), INT8_C( 114), -INT8_C( 117), INT8_C( 3), INT8_C( 2), INT8_C( 9), -INT8_C( 82) }, { -INT8_C( 46), INT8_C( 15), INT8_C( 3), -INT8_C( 42), INT8_C( 69), -INT8_C( 99), -INT8_C( 13), INT8_C( 109), INT8_C( 94), INT8_C( 126), INT8_C( 66), -INT8_C( 8), INT8_C( 67), -INT8_C( 2), -INT8_C( 117), -INT8_C( 127) }, { -INT8_C( 121), -INT8_C( 80), INT8_C( 52), -INT8_C( 42), -INT8_C( 16), INT8_MAX, INT8_C( 17), -INT8_C( 11), INT8_C( 40), -INT8_C( 55), -INT8_C( 17), INT8_C( 125), INT8_C( 99), -INT8_C( 63), -INT8_C( 98), INT8_C( 64) } }, { { INT8_C( 30), INT8_C( 69), INT8_C( 4), INT8_C( 26), -INT8_C( 105), INT8_C( 113), -INT8_C( 73), INT8_C( 24), -INT8_C( 19), INT8_C( 42), -INT8_C( 93), -INT8_C( 16), INT8_C( 44), -INT8_C( 84), -INT8_C( 97), -INT8_C( 2) }, { -INT8_C( 69), -INT8_C( 94), -INT8_C( 44), INT8_C( 0), INT8_C( 63), -INT8_C( 57), INT8_C( 110), -INT8_C( 98), INT8_C( 69), -INT8_C( 80), -INT8_C( 106), -INT8_C( 120), -INT8_C( 82), INT8_C( 33), INT8_C( 9), -INT8_C( 51) }, { INT8_C( 103), INT8_C( 13), -INT8_C( 25), -INT8_C( 2), INT8_C( 126), -INT8_C( 97), INT8_C( 22), INT8_C( 108), -INT8_C( 55), -INT8_C( 71), INT8_C( 92), -INT8_C( 11), INT8_C( 101), -INT8_C( 5), -INT8_C( 13), INT8_C( 33) }, { INT8_C( 91), INT8_MAX, INT8_C( 80), INT8_C( 26), -INT8_C( 103), INT8_C( 10), INT8_C( 43), -INT8_C( 64), INT8_C( 26), INT8_C( 90), -INT8_C( 117), INT8_C( 24), -INT8_C( 46), INT8_C( 7), INT8_C( 42), INT8_C( 107) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a); simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b); simde_int8x16_t c = simde_vld1q_s8(test_vec[i].c); simde_int8x16_t r = simde_vmlaq_s8(a, b, c); simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_s16 (SIMDE_MUNIT_TEST_ARGS) { struct { int16_t a[8]; int16_t b[8]; int16_t c[8]; int16_t r[8]; } test_vec[] = { { { INT16_C( 11663), -INT16_C( 12561), -INT16_C( 6544), INT16_C( 27850), INT16_C( 31437), -INT16_C( 27894), INT16_C( 9795), INT16_C( 8816) }, { -INT16_C( 10231), INT16_C( 3711), INT16_C( 27259), -INT16_C( 27438), INT16_C( 30269), INT16_C( 21709), INT16_C( 31469), INT16_C( 31823) }, { INT16_C( 16039), INT16_C( 5962), INT16_C( 5156), -INT16_C( 3709), -INT16_C( 29298), -INT16_C( 11899), -INT16_C( 2637), -INT16_C( 17164) }, { INT16_C( 18798), INT16_C( 26789), INT16_C( 31676), INT16_C( 17984), -INT16_C( 22109), -INT16_C( 373), -INT16_C( 5382), -INT16_C( 24132) } }, { { INT16_C( 29645), INT16_C( 18635), -INT16_C( 25123), INT16_C( 6876), -INT16_C( 22252), INT16_C( 366), -INT16_C( 17117), -INT16_C( 13699) }, { -INT16_C( 14341), INT16_C( 8161), INT16_C( 25819), INT16_C( 27152), -INT16_C( 27150), -INT16_C( 23237), INT16_C( 12170), INT16_C( 22626) }, { INT16_C( 11682), INT16_C( 32672), INT16_C( 32202), -INT16_C( 8551), INT16_C( 1830), INT16_C( 19167), INT16_C( 23748), -INT16_C( 16620) }, { INT16_C( 8099), -INT16_C( 11157), INT16_C( 8619), INT16_C( 24172), -INT16_C( 30464), -INT16_C( 557), -INT16_C( 17717), -INT16_C( 12251) } }, { { -INT16_C( 2525), -INT16_C( 34), -INT16_C( 4262), INT16_C( 19561), -INT16_C( 23420), INT16_C( 4082), INT16_C( 21716), INT16_C( 30311) }, { INT16_C( 1921), INT16_C( 19446), -INT16_C( 28796), -INT16_C( 21718), INT16_C( 2455), INT16_C( 23541), INT16_C( 2406), -INT16_C( 30437) }, { -INT16_C( 1537), INT16_C( 23176), -INT16_C( 3608), INT16_C( 28070), -INT16_C( 26474), INT16_C( 27260), -INT16_C( 7188), INT16_C( 28128) }, { -INT16_C( 5982), -INT16_C( 10610), INT16_C( 17146), INT16_C( 11173), -INT16_C( 5378), INT16_C( 3230), INT16_C( 28892), -INT16_C( 4857) } }, { { -INT16_C( 10518), INT16_C( 28601), -INT16_C( 7322), -INT16_C( 742), INT16_C( 4076), INT16_C( 21080), INT16_C( 29464), INT16_C( 6364) }, { INT16_C( 25709), INT16_C( 21874), INT16_C( 6230), -INT16_C( 4926), INT16_C( 16049), -INT16_C( 25258), INT16_C( 13857), INT16_C( 3083) }, { -INT16_C( 15347), INT16_C( 29563), -INT16_C( 27225), -INT16_C( 27792), -INT16_C( 14172), -INT16_C( 17178), -INT16_C( 15812), -INT16_C( 22060) }, { INT16_C( 25715), -INT16_C( 19585), -INT16_C( 11904), -INT16_C( 2054), -INT16_C( 32432), -INT16_C( 10852), INT16_C( 9428), INT16_C( 21752) } }, { { INT16_C( 17958), INT16_C( 31998), -INT16_C( 16033), INT16_C( 4200), -INT16_C( 16641), INT16_C( 8621), -INT16_C( 18187), INT16_C( 557) }, { -INT16_C( 22404), INT16_C( 9077), -INT16_C( 6851), -INT16_C( 7753), -INT16_C( 25171), -INT16_C( 5731), INT16_C( 29279), -INT16_C( 31342) }, { -INT16_C( 28232), INT16_C( 5890), INT16_C( 27218), INT16_C( 20775), -INT16_C( 10967), INT16_C( 7794), -INT16_C( 24691), INT16_C( 2592) }, { -INT16_C( 25786), INT16_C( 18152), INT16_C( 28905), INT16_C( 23113), -INT16_C( 3916), -INT16_C( 28777), -INT16_C( 18360), INT16_C( 26733) } }, { { -INT16_C( 27321), -INT16_C( 31699), -INT16_C( 7046), INT16_C( 10085), INT16_C( 897), -INT16_C( 8175), -INT16_C( 23691), INT16_C( 11622) }, { INT16_C( 26676), -INT16_C( 31163), INT16_C( 27858), -INT16_C( 1064), INT16_C( 19009), -INT16_C( 12519), INT16_C( 14826), INT16_C( 12761) }, { INT16_C( 1742), INT16_C( 18614), INT16_C( 7147), INT16_C( 27760), -INT16_C( 32482), -INT16_C( 27827), -INT16_C( 19676), INT16_C( 22977) }, { -INT16_C( 22753), INT16_C( 24891), -INT16_C( 4288), INT16_C( 30181), INT16_C( 30751), -INT16_C( 31338), INT16_C( 26205), INT16_C( 13055) } }, { { INT16_C( 1563), -INT16_C( 4641), -INT16_C( 18574), -INT16_C( 19223), INT16_C( 514), -INT16_C( 4989), INT16_C( 23612), INT16_C( 2589) }, { -INT16_C( 11422), INT16_C( 19795), -INT16_C( 15377), INT16_C( 3514), INT16_C( 1860), INT16_C( 26785), INT16_C( 25274), -INT16_C( 10815) }, { -INT16_C( 24216), -INT16_C( 9534), -INT16_C( 21672), INT16_C( 23182), INT16_C( 4526), -INT16_C( 5562), INT16_C( 25709), -INT16_C( 12044) }, { -INT16_C( 30741), INT16_C( 13509), -INT16_C( 18790), -INT16_C( 18923), INT16_C( 30266), -INT16_C( 19831), INT16_C( 3438), -INT16_C( 27119) } }, { { INT16_C( 18231), INT16_C( 9757), -INT16_C( 10486), INT16_C( 20020), -INT16_C( 10786), -INT16_C( 26441), INT16_C( 30775), -INT16_C( 24723) }, { INT16_C( 12313), INT16_C( 29305), INT16_C( 2267), -INT16_C( 30260), INT16_C( 4889), -INT16_C( 30861), INT16_C( 26743), -INT16_C( 20905) }, { INT16_C( 29871), -INT16_C( 17707), INT16_C( 2380), INT16_C( 10760), -INT16_C( 16418), INT16_C( 5571), INT16_C( 12344), INT16_C( 20916) }, { INT16_C( 31822), INT16_C( 20170), INT16_C( 11022), INT16_C( 5268), INT16_C( 3212), INT16_C( 13392), -INT16_C( 24001), -INT16_C( 17511) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a); simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b); simde_int16x8_t c = simde_vld1q_s16(test_vec[i].c); simde_int16x8_t r = simde_vmlaq_s16(a, b, c); simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_s32 (SIMDE_MUNIT_TEST_ARGS) { struct { int32_t a[4]; int32_t b[4]; int32_t c[4]; int32_t r[4]; } test_vec[] = { { { INT32_C( 710046150), -INT32_C( 241640202), -INT32_C( 1703216902), -INT32_C( 1791793692) }, { INT32_C( 934905717), INT32_C( 54536198), -INT32_C( 808807169), INT32_C( 1335743881) }, { INT32_C( 1031401287), -INT32_C( 969993524), -INT32_C( 278812406), -INT32_C( 2088463346) }, { -INT32_C( 1148568007), INT32_C( 144911806), -INT32_C( 94363152), INT32_C( 1693206370) } }, { { INT32_C( 582696476), INT32_C( 1713830758), INT32_C( 406188175), INT32_C( 208130757) }, { -INT32_C( 1907695166), -INT32_C( 44795405), INT32_C( 837596450), INT32_C( 1723101514) }, { INT32_C( 361263023), -INT32_C( 109334934), INT32_C( 1678881182), INT32_C( 1164999043) }, { -INT32_C( 1193365574), -INT32_C( 1463442428), -INT32_C( 523485813), INT32_C( 1722402211) } }, { { INT32_C( 1305721434), INT32_C( 1447700531), INT32_C( 663173085), INT32_C( 1468873640) }, { INT32_C( 359405227), INT32_C( 1661987012), INT32_C( 482812057), -INT32_C( 211667047) }, { INT32_C( 624965106), INT32_C( 997952349), INT32_C( 1784808130), -INT32_C( 373166018) }, { INT32_C( 1349684992), -INT32_C( 123722905), INT32_C( 1497439695), -INT32_C( 1999691082) } }, { { -INT32_C( 889311994), -INT32_C( 1372779243), -INT32_C( 942934994), INT32_C( 515583276) }, { -INT32_C( 1069286558), INT32_C( 1224458118), -INT32_C( 5087807), INT32_C( 1407742797) }, { -INT32_C( 1239488607), INT32_C( 577063924), INT32_C( 1827287104), -INT32_C( 1081432739) }, { INT32_C( 789623720), INT32_C( 1528421069), INT32_C( 1147245678), INT32_C( 117420325) } }, { { INT32_C( 662687136), INT32_C( 1315928716), INT32_C( 625812184), INT32_C( 913913493) }, { INT32_C( 300783389), INT32_C( 573854434), -INT32_C( 544334206), INT32_C( 1671305411) }, { INT32_C( 1921654502), INT32_C( 1891695256), -INT32_C( 1315566052), INT32_C( 1642598212) }, { INT32_C( 2051864494), -INT32_C( 1074699076), INT32_C( 548377872), INT32_C( 1134770017) } }, { { -INT32_C( 2005740122), -INT32_C( 1448368601), -INT32_C( 2021115452), INT32_C( 954934866) }, { -INT32_C( 576031420), -INT32_C( 1957860497), -INT32_C( 1120017543), -INT32_C( 1742854670) }, { INT32_C( 555847930), -INT32_C( 70595529), INT32_C( 1468224005), -INT32_C( 1114673544) }, { -INT32_C( 995911154), -INT32_C( 478138624), -INT32_C( 1836749535), INT32_C( 1468591042) } }, { { INT32_C( 1402616547), INT32_C( 517924773), -INT32_C( 1109713973), INT32_C( 978778432) }, { -INT32_C( 1067747447), INT32_C( 1220289859), -INT32_C( 257933449), -INT32_C( 1867698259) }, { INT32_C( 249775977), -INT32_C( 114507218), INT32_C( 515311581), -INT32_C( 1973940992) }, { INT32_C( 331366676), INT32_C( 1466851247), INT32_C( 704587398), -INT32_C( 1422212544) } }, { { -INT32_C( 951405436), INT32_C( 1359939289), -INT32_C( 230576315), INT32_C( 1216605919) }, { INT32_C( 1666672181), INT32_C( 106791720), -INT32_C( 1960569717), -INT32_C( 1525318623) }, { INT32_C( 174874672), -INT32_C( 1403290778), INT32_C( 178166827), -INT32_C( 1085136502) }, { INT32_C( 1583201908), INT32_C( 1200455881), INT32_C( 1772082846), INT32_C( 1823152553) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a); simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b); simde_int32x4_t c = simde_vld1q_s32(test_vec[i].c); simde_int32x4_t r = simde_vmlaq_s32(a, b, c); simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_u8 (SIMDE_MUNIT_TEST_ARGS) { struct { uint8_t a[16]; uint8_t b[16]; uint8_t c[16]; uint8_t r[16]; } test_vec[] = { { { UINT8_C( 2), UINT8_C( 10), UINT8_C(124), UINT8_C(234), UINT8_C( 83), UINT8_C(137), UINT8_C( 86), UINT8_C( 16), UINT8_C( 13), UINT8_C( 45), UINT8_C(130), UINT8_C(164), UINT8_C(239), UINT8_C( 2), UINT8_C(135), UINT8_C(180) }, { UINT8_C(153), UINT8_C(251), UINT8_C(146), UINT8_C(239), UINT8_C( 13), UINT8_C(152), UINT8_C(238), UINT8_C( 33), UINT8_C(186), UINT8_C(155), UINT8_C(198), UINT8_C(106), UINT8_C(253), UINT8_C(193), UINT8_MAX, UINT8_C( 0) }, { UINT8_C(204), UINT8_C(123), UINT8_C(234), UINT8_C( 31), UINT8_C( 4), UINT8_C( 64), UINT8_C( 47), UINT8_C( 17), UINT8_C(109), UINT8_C(177), UINT8_C(181), UINT8_C( 92), UINT8_C(179), UINT8_C( 60), UINT8_C( 16), UINT8_C( 77) }, { UINT8_C(238), UINT8_C(163), UINT8_C(240), UINT8_C(219), UINT8_C(135), UINT8_C(137), UINT8_C( 8), UINT8_C( 65), UINT8_C( 63), UINT8_C( 88), UINT8_C(128), UINT8_C(188), UINT8_C(214), UINT8_C( 62), UINT8_C(119), UINT8_C(180) } }, { { UINT8_C( 55), UINT8_C(162), UINT8_C( 60), UINT8_C( 68), UINT8_C( 59), UINT8_C( 42), UINT8_C(102), UINT8_C(245), UINT8_C(197), UINT8_C( 44), UINT8_C( 96), UINT8_C(195), UINT8_C(238), UINT8_C( 95), UINT8_C(195), UINT8_C(186) }, { UINT8_C(218), UINT8_C(173), UINT8_C(217), UINT8_C(223), UINT8_C(237), UINT8_C( 8), UINT8_C(240), UINT8_C( 90), UINT8_C(185), UINT8_C(166), UINT8_C(183), UINT8_C(108), UINT8_C(226), UINT8_C(199), UINT8_C(185), UINT8_C( 26) }, { UINT8_C(106), UINT8_C(245), UINT8_C( 94), UINT8_C(165), UINT8_C( 31), UINT8_C(196), UINT8_C(154), UINT8_C(229), UINT8_C(241), UINT8_C(250), UINT8_C(168), UINT8_C(223), UINT8_C( 89), UINT8_C(107), UINT8_C(153), UINT8_C( 52) }, { UINT8_C(123), UINT8_C( 51), UINT8_C(234), UINT8_MAX, UINT8_C(238), UINT8_C( 74), UINT8_C(198), UINT8_C(119), UINT8_C(238), UINT8_C( 72), UINT8_C(120), UINT8_C(215), UINT8_C(128), UINT8_C(140), UINT8_C( 84), UINT8_C( 2) } }, { { UINT8_C( 24), UINT8_C(114), UINT8_C( 19), UINT8_C( 5), UINT8_C(122), UINT8_C( 3), UINT8_C( 95), UINT8_C( 51), UINT8_C(169), UINT8_C( 22), UINT8_C(159), UINT8_C(140), UINT8_C(222), UINT8_C( 89), UINT8_C(166), UINT8_C( 72) }, { UINT8_C( 78), UINT8_C( 4), UINT8_C(237), UINT8_C(110), UINT8_C(201), UINT8_C(135), UINT8_C( 83), UINT8_C(186), UINT8_C(130), UINT8_C(251), UINT8_C(153), UINT8_C(219), UINT8_C(102), UINT8_C( 50), UINT8_C( 15), UINT8_C(126) }, { UINT8_C(164), UINT8_C( 34), UINT8_C(131), UINT8_C( 30), UINT8_C( 38), UINT8_C(226), UINT8_C( 81), UINT8_C(207), UINT8_C(249), UINT8_C(240), UINT8_C( 91), UINT8_C(215), UINT8_C( 73), UINT8_C( 1), UINT8_C( 31), UINT8_C(152) }, { UINT8_C( 16), UINT8_C(250), UINT8_C( 90), UINT8_C(233), UINT8_C( 80), UINT8_C( 49), UINT8_C(162), UINT8_C(153), UINT8_C( 27), UINT8_C(102), UINT8_C( 2), UINT8_C(121), UINT8_C(244), UINT8_C(139), UINT8_C(119), UINT8_C( 24) } }, { { UINT8_C( 6), UINT8_C( 12), UINT8_C( 6), UINT8_C(207), UINT8_C(147), UINT8_C( 89), UINT8_C(137), UINT8_C( 21), UINT8_C( 84), UINT8_C( 34), UINT8_C(241), UINT8_C(186), UINT8_C( 84), UINT8_C( 0), UINT8_C( 56), UINT8_C(248) }, { UINT8_C( 35), UINT8_C(187), UINT8_C( 22), UINT8_C( 73), UINT8_C(157), UINT8_C(103), UINT8_C( 24), UINT8_C(150), UINT8_C( 87), UINT8_C(116), UINT8_C(109), UINT8_C(161), UINT8_C(117), UINT8_C(140), UINT8_C( 57), UINT8_C(123) }, { UINT8_C(152), UINT8_C( 63), UINT8_C( 74), UINT8_C( 44), UINT8_C(152), UINT8_C(211), UINT8_C( 65), UINT8_C(236), UINT8_C(245), UINT8_C( 50), UINT8_C(166), UINT8_C( 73), UINT8_C( 51), UINT8_C(222), UINT8_C( 65), UINT8_C( 86) }, { UINT8_C(206), UINT8_C( 17), UINT8_C( 98), UINT8_C( 91), UINT8_C(203), UINT8_C( 62), UINT8_C(161), UINT8_C( 93), UINT8_C(151), UINT8_C(202), UINT8_C(159), UINT8_C(163), UINT8_C(163), UINT8_C(104), UINT8_C(177), UINT8_C( 74) } }, { { UINT8_C(153), UINT8_C( 87), UINT8_C(159), UINT8_C( 54), UINT8_C(190), UINT8_C(183), UINT8_C(205), UINT8_C( 22), UINT8_C( 43), UINT8_C( 58), UINT8_C(183), UINT8_C(161), UINT8_C(199), UINT8_C(240), UINT8_C( 28), UINT8_C( 95) }, { UINT8_C( 47), UINT8_C(103), UINT8_C(139), UINT8_C(199), UINT8_C( 58), UINT8_C(205), UINT8_C(179), UINT8_C( 48), UINT8_MAX, UINT8_C( 89), UINT8_C(121), UINT8_C( 50), UINT8_C( 55), UINT8_C(187), UINT8_C(136), UINT8_C(208) }, { UINT8_C( 18), UINT8_C( 39), UINT8_C( 6), UINT8_C(209), UINT8_C(223), UINT8_C(211), UINT8_C(231), UINT8_C( 10), UINT8_C( 14), UINT8_C(158), UINT8_C(171), UINT8_C(213), UINT8_C(142), UINT8_C(200), UINT8_C( 52), UINT8_C(189) }, { UINT8_C(231), UINT8_C( 8), UINT8_C(225), UINT8_C(173), UINT8_C( 68), UINT8_C(174), UINT8_C( 82), UINT8_C(246), UINT8_C( 29), UINT8_C( 40), UINT8_C(138), UINT8_C( 59), UINT8_C( 73), UINT8_C( 8), UINT8_C(188), UINT8_C(239) } }, { { UINT8_C( 47), UINT8_C(192), UINT8_C(132), UINT8_C(105), UINT8_C(141), UINT8_C( 55), UINT8_C(153), UINT8_C(140), UINT8_C(144), UINT8_C( 19), UINT8_C(191), UINT8_C(199), UINT8_C(206), UINT8_C( 71), UINT8_C(151), UINT8_C(224) }, { UINT8_C(111), UINT8_C(157), UINT8_C(177), UINT8_C( 78), UINT8_C(113), UINT8_C(152), UINT8_C( 88), UINT8_C(127), UINT8_C( 54), UINT8_C( 4), UINT8_C( 84), UINT8_C(196), UINT8_C(204), UINT8_C(136), UINT8_C(129), UINT8_C(251) }, { UINT8_C( 72), UINT8_C( 5), UINT8_C(100), UINT8_C(213), UINT8_C( 60), UINT8_C(254), UINT8_C( 98), UINT8_C(204), UINT8_C( 17), UINT8_C( 33), UINT8_C(147), UINT8_C(223), UINT8_C(104), UINT8_C( 42), UINT8_C(191), UINT8_C(215) }, { UINT8_C(103), UINT8_C(209), UINT8_C(168), UINT8_C( 79), UINT8_C( 9), UINT8_C( 7), UINT8_C( 73), UINT8_C(192), UINT8_C( 38), UINT8_C(151), UINT8_C(251), UINT8_C(131), UINT8_C(174), UINT8_C(151), UINT8_C(214), UINT8_C(173) } }, { { UINT8_C(200), UINT8_C(113), UINT8_C( 37), UINT8_C( 57), UINT8_C( 9), UINT8_C(126), UINT8_C(184), UINT8_C( 64), UINT8_C(130), UINT8_C( 12), UINT8_C( 4), UINT8_C( 78), UINT8_C(148), UINT8_C(134), UINT8_C( 73), UINT8_C(221) }, { UINT8_C(139), UINT8_C(173), UINT8_C(178), UINT8_C(200), UINT8_C(171), UINT8_C( 20), UINT8_C(148), UINT8_C(188), UINT8_C( 53), UINT8_C( 40), UINT8_C(155), UINT8_C(158), UINT8_C( 82), UINT8_C( 91), UINT8_C(117), UINT8_C( 26) }, { UINT8_C(204), UINT8_C(155), UINT8_C( 83), UINT8_C(213), UINT8_C( 25), UINT8_C( 11), UINT8_C( 21), UINT8_C(155), UINT8_C( 23), UINT8_C( 26), UINT8_C(233), UINT8_C(172), UINT8_C(160), UINT8_C( 50), UINT8_C(137), UINT8_C( 43) }, { UINT8_C(140), UINT8_C( 48), UINT8_C(219), UINT8_C(161), UINT8_C(188), UINT8_C( 90), UINT8_C(220), UINT8_C( 20), UINT8_C( 69), UINT8_C( 28), UINT8_C( 23), UINT8_C(118), UINT8_C(212), UINT8_C( 76), UINT8_C(230), UINT8_C( 59) } }, { { UINT8_C(223), UINT8_C( 59), UINT8_C(243), UINT8_C(139), UINT8_C( 80), UINT8_C(136), UINT8_C( 71), UINT8_C(133), UINT8_C(176), UINT8_C(227), UINT8_C( 35), UINT8_C( 2), UINT8_C( 62), UINT8_C(153), UINT8_C( 29), UINT8_C( 10) }, { UINT8_C( 52), UINT8_C(112), UINT8_C(223), UINT8_C( 77), UINT8_C(124), UINT8_C(245), UINT8_C(232), UINT8_C(147), UINT8_C( 15), UINT8_C(209), UINT8_C( 63), UINT8_C(175), UINT8_C( 3), UINT8_C(200), UINT8_C(218), UINT8_C(226) }, { UINT8_C( 4), UINT8_C(206), UINT8_C(109), UINT8_C( 84), UINT8_C( 86), UINT8_C(181), UINT8_C(217), UINT8_C( 6), UINT8_C(152), UINT8_C(253), UINT8_C( 8), UINT8_C(214), UINT8_C(150), UINT8_C( 37), UINT8_C(224), UINT8_C(202) }, { UINT8_C(175), UINT8_C( 91), UINT8_C(230), UINT8_C(207), UINT8_C(248), UINT8_C(193), UINT8_C(239), UINT8_C(247), UINT8_C(152), UINT8_C(112), UINT8_C( 27), UINT8_C( 76), UINT8_C( 0), UINT8_C(129), UINT8_C(221), UINT8_C( 94) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a); simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b); simde_uint8x16_t c = simde_vld1q_u8(test_vec[i].c); simde_uint8x16_t r = simde_vmlaq_u8(a, b, c); simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_u16 (SIMDE_MUNIT_TEST_ARGS) { struct { uint16_t a[8]; uint16_t b[8]; uint16_t c[8]; uint16_t r[8]; } test_vec[] = { { { UINT16_C( 9265), UINT16_C(42133), UINT16_C(42540), UINT16_C(31120), UINT16_C(27981), UINT16_C(34441), UINT16_C(19055), UINT16_C(23368) }, { UINT16_C(63347), UINT16_C(35030), UINT16_C(52357), UINT16_C(48858), UINT16_C(54042), UINT16_C(36395), UINT16_C(41964), UINT16_C( 7515) }, { UINT16_C(61640), UINT16_C(62658), UINT16_C(21143), UINT16_C(58477), UINT16_C(63168), UINT16_C(12138), UINT16_C(45632), UINT16_C(45962) }, { UINT16_C(17929), UINT16_C(20161), UINT16_C(58015), UINT16_C(58466), UINT16_C(48333), UINT16_C(18775), UINT16_C(23919), UINT16_C(53078) } }, { { UINT16_C(24745), UINT16_C(11835), UINT16_C( 5421), UINT16_C(18412), UINT16_C( 6120), UINT16_C(54741), UINT16_C(12475), UINT16_C(33778) }, { UINT16_C(46112), UINT16_C(46967), UINT16_C(58631), UINT16_C(51099), UINT16_C( 1499), UINT16_C( 7414), UINT16_C(32951), UINT16_C(25039) }, { UINT16_C( 3041), UINT16_C( 3727), UINT16_C(31776), UINT16_C( 2389), UINT16_C(10899), UINT16_C(20190), UINT16_C(53338), UINT16_C(31441) }, { UINT16_C( 4297), UINT16_C(11188), UINT16_C( 6669), UINT16_C( 355), UINT16_C(25257), UINT16_C(59177), UINT16_C( 8465), UINT16_C( 1009) } }, { { UINT16_C(18821), UINT16_C(35890), UINT16_C(52526), UINT16_C( 2387), UINT16_C(18899), UINT16_C(35365), UINT16_C(62921), UINT16_C(43755) }, { UINT16_C(31488), UINT16_C( 8376), UINT16_C( 3575), UINT16_C(35369), UINT16_C( 1847), UINT16_C(37337), UINT16_C(43736), UINT16_C(23820) }, { UINT16_C(16115), UINT16_C( 8681), UINT16_C(15371), UINT16_C(56875), UINT16_C(20613), UINT16_C(20073), UINT16_C(21573), UINT16_C(17913) }, { UINT16_C( 2693), UINT16_C( 2986), UINT16_C(19147), UINT16_C(52278), UINT16_C(14694), UINT16_C(31270), UINT16_C(57857), UINT16_C(26519) } }, { { UINT16_C(45519), UINT16_C(50790), UINT16_C(36799), UINT16_C(63057), UINT16_C(10903), UINT16_C(28552), UINT16_C(38100), UINT16_C(51404) }, { UINT16_C(46546), UINT16_C(56809), UINT16_C( 5361), UINT16_C(30396), UINT16_C( 9573), UINT16_C(43716), UINT16_C(48505), UINT16_C(18928) }, { UINT16_C(22127), UINT16_C(11791), UINT16_C(24805), UINT16_C(31780), UINT16_C(44170), UINT16_C(24555), UINT16_C(46912), UINT16_C( 4647) }, { UINT16_C( 5085), UINT16_C(42253), UINT16_C(43860), UINT16_C(47297), UINT16_C(12041), UINT16_C(60788), UINT16_C(29204), UINT16_C(60508) } }, { { UINT16_C( 4204), UINT16_C(24048), UINT16_C(44069), UINT16_C(35539), UINT16_C(39121), UINT16_C(18996), UINT16_C( 9301), UINT16_C(50323) }, { UINT16_C(41850), UINT16_C(24818), UINT16_C( 5891), UINT16_C(36572), UINT16_C(51395), UINT16_C( 1261), UINT16_C( 5247), UINT16_C(60438) }, { UINT16_C( 1572), UINT16_C(18761), UINT16_C( 7602), UINT16_C(33747), UINT16_C( 2229), UINT16_C( 2766), UINT16_C(24876), UINT16_C(42959) }, { UINT16_C(59796), UINT16_C( 1266), UINT16_C( 827), UINT16_C(56871), UINT16_C(41648), UINT16_C(33514), UINT16_C(51497), UINT16_C( 1117) } }, { { UINT16_C(49412), UINT16_C( 2055), UINT16_C(58328), UINT16_C(40086), UINT16_C(33707), UINT16_C(11168), UINT16_C(46743), UINT16_C(47895) }, { UINT16_C(24765), UINT16_C(28421), UINT16_C(55421), UINT16_C(13043), UINT16_C(49632), UINT16_C( 3389), UINT16_C( 3106), UINT16_C(10164) }, { UINT16_C(48077), UINT16_C(42543), UINT16_C(50590), UINT16_C(19010), UINT16_C(57928), UINT16_C(57205), UINT16_C(35992), UINT16_C(21914) }, { UINT16_C(18269), UINT16_C(42994), UINT16_C(45566), UINT16_C(64828), UINT16_C(51883), UINT16_C(23425), UINT16_C(33479), UINT16_C(24927) } }, { { UINT16_C(40940), UINT16_C(27333), UINT16_C(47224), UINT16_C(22684), UINT16_C(55673), UINT16_C(39781), UINT16_C( 6629), UINT16_C(46018) }, { UINT16_C(61908), UINT16_C(29529), UINT16_C(39862), UINT16_C(65213), UINT16_C(12925), UINT16_C( 5597), UINT16_C(30910), UINT16_C(43627) }, { UINT16_C(12311), UINT16_C(36628), UINT16_C(45544), UINT16_C(25064), UINT16_C(19850), UINT16_C(28924), UINT16_C(48999), UINT16_C(15139) }, { UINT16_C( 6648), UINT16_C( 9401), UINT16_C(43880), UINT16_C(53476), UINT16_C(43483), UINT16_C(53489), UINT16_C(28759), UINT16_C(43363) } }, { { UINT16_C(31920), UINT16_C(26542), UINT16_C(27415), UINT16_C(37989), UINT16_C(17309), UINT16_C(23465), UINT16_C( 5307), UINT16_C(53766) }, { UINT16_C( 6724), UINT16_C(11362), UINT16_C(19147), UINT16_C(22157), UINT16_C(35479), UINT16_C(65222), UINT16_C(59721), UINT16_C(63802) }, { UINT16_C(59493), UINT16_C(31840), UINT16_C(50772), UINT16_C(61712), UINT16_C(47369), UINT16_C(50253), UINT16_C(21454), UINT16_C( 4758) }, { UINT16_C(31108), UINT16_C(33902), UINT16_C(63411), UINT16_C(47669), UINT16_C(16876), UINT16_C(38199), UINT16_C(30841), UINT16_C(60930) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a); simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b); simde_uint16x8_t c = simde_vld1q_u16(test_vec[i].c); simde_uint16x8_t r = simde_vmlaq_u16(a, b, c); simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r)); } return 0; } static int test_simde_vmlaq_u32 (SIMDE_MUNIT_TEST_ARGS) { struct { uint32_t a[4]; uint32_t b[4]; uint32_t c[4]; uint32_t r[4]; } test_vec[] = { { { UINT32_C(1060715319), UINT32_C(2706085937), UINT32_C(4105014023), UINT32_C(3284141172) }, { UINT32_C(4288173704), UINT32_C(3432566778), UINT32_C(4076060134), UINT32_C(1353036057) }, { UINT32_C( 512810732), UINT32_C(2126502774), UINT32_C(3681709158), UINT32_C(4187894385) }, { UINT32_C(2536698007), UINT32_C(3777778541), UINT32_C(3897834667), UINT32_C(1474826877) } }, { { UINT32_C(2214147720), UINT32_C(3947860229), UINT32_C(1742553678), UINT32_C(3753411315) }, { UINT32_C(3623700577), UINT32_C(2320874787), UINT32_C(2590361385), UINT32_C(2190738425) }, { UINT32_C(1040551225), UINT32_C(1831425054), UINT32_C(2312373910), UINT32_C(3932720265) }, { UINT32_C( 69255457), UINT32_C(1963341599), UINT32_C( 555674196), UINT32_C(3930246964) } }, { { UINT32_C(4173424340), UINT32_C(1283594019), UINT32_C(3639076830), UINT32_C( 593132522) }, { UINT32_C( 643915528), UINT32_C(1234406067), UINT32_C( 433219728), UINT32_C(3372432116) }, { UINT32_C(3284256160), UINT32_C(3121628124), UINT32_C( 345175850), UINT32_C(2050485362) }, { UINT32_C(2697327572), UINT32_C(3721011703), UINT32_C(4201643902), UINT32_C(2475666578) } }, { { UINT32_C(4271937611), UINT32_C(2991010850), UINT32_C(2429295004), UINT32_C(4099526484) }, { UINT32_C(1891113620), UINT32_C(2267793501), UINT32_C( 832290239), UINT32_C(4121678506) }, { UINT32_C(2364820330), UINT32_C( 457128831), UINT32_C(2846624597), UINT32_C(1872561626) }, { UINT32_C(3753178515), UINT32_C(4128246085), UINT32_C(1308446471), UINT32_C(1812629016) } }, { { UINT32_C(2111788320), UINT32_C(3691317789), UINT32_C(1913495752), UINT32_C(3714562163) }, { UINT32_C(2204785412), UINT32_C(3969886615), UINT32_C(2392148916), UINT32_C(1895641680) }, { UINT32_C(2783894920), UINT32_C(2944594919), UINT32_C( 102862739), UINT32_C(1290045768) }, { UINT32_C(1353327424), UINT32_C(1170171486), UINT32_C(2974131492), UINT32_C(3016404723) } }, { { UINT32_C(2077183716), UINT32_C(2875682551), UINT32_C( 171572409), UINT32_C(3078240047) }, { UINT32_C(4217137172), UINT32_C(4021018203), UINT32_C(3069561966), UINT32_C( 973265237) }, { UINT32_C( 515232039), UINT32_C(4190707008), UINT32_C(1208156953), UINT32_C(1325366842) }, { UINT32_C( 637500912), UINT32_C( 654464183), UINT32_C( 518667639), UINT32_C(2764196465) } }, { { UINT32_C(1112104166), UINT32_C(2821846074), UINT32_C( 375269057), UINT32_C( 659578880) }, { UINT32_C(1917191730), UINT32_C(1013649187), UINT32_C(1283813138), UINT32_C(3550119149) }, { UINT32_C( 454419680), UINT32_C(2579711704), UINT32_C(1840259693), UINT32_C(3029598338) }, { UINT32_C(1697468582), UINT32_C(1532185538), UINT32_C(1783551339), UINT32_C( 416014426) } }, { { UINT32_C( 690412038), UINT32_C(4234580714), UINT32_C(3997821697), UINT32_C(1354883951) }, { UINT32_C(2691422151), UINT32_C(2319003165), UINT32_C(3556239696), UINT32_C(4035415274) }, { UINT32_C(1343925862), UINT32_C(1095598144), UINT32_C(3660551787), UINT32_C(1093333113) }, { UINT32_C(2063471952), UINT32_C(1568250410), UINT32_C(3209514865), UINT32_C(2639453705) } }, }; for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) { simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a); simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b); simde_uint32x4_t c = simde_vld1q_u32(test_vec[i].c); simde_uint32x4_t r = simde_vmlaq_u32(a, b, c); simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r)); } return 0; } SIMDE_TEST_FUNC_LIST_BEGIN SIMDE_TEST_FUNC_LIST_ENTRY(vmla_f32) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_f64) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_s8) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_s16) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_s32) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_u8) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_u16) SIMDE_TEST_FUNC_LIST_ENTRY(vmla_u32) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_f32) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_f64) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_s8) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_s16) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_s32) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_u8) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_u16) SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_u32) SIMDE_TEST_FUNC_LIST_END #include "test-neon-footer.h"