1 #define SIMDE_TEST_ARM_NEON_INSN aba
2
3 #include "test-neon.h"
4 #include "../../../simde/arm/neon/aba.h"
5
6 /* https://community.intel.com/t5/Intel-C-Compiler/ICC-generates-incorrect-code/td-p/1199261 */
7 #if defined(HEDLEY_INTEL_VERSION)
8 # define TEST_SIMDE_VABD_NO_TEST_32
9 #endif
10
11 static int
test_simde_vaba_s8(SIMDE_MUNIT_TEST_ARGS)12 test_simde_vaba_s8 (SIMDE_MUNIT_TEST_ARGS) {
13 #if 1
14 static const struct {
15 int8_t a[8];
16 int8_t b[8];
17 int8_t c[8];
18 int8_t r[8];
19 } test_vec[] = {
20 { { -INT8_C( 63), -INT8_C( 30), INT8_C( 29), -INT8_C( 57), -INT8_C( 97), -INT8_C( 25), -INT8_C( 66), -INT8_C( 96) },
21 { -INT8_C( 103), INT8_C( 34), INT8_C( 89), INT8_C( 7), -INT8_C( 11), INT8_C( 119), -INT8_C( 68), INT8_C( 2) },
22 { INT8_C( 18), INT8_C( 15), INT8_C( 41), -INT8_C( 14), -INT8_C( 24), INT8_MIN, -INT8_C( 66), -INT8_C( 116) },
23 { INT8_C( 58), -INT8_C( 11), INT8_C( 77), -INT8_C( 36), -INT8_C( 84), -INT8_C( 34), -INT8_C( 64), INT8_C( 22) } },
24 { { INT8_C( 10), -INT8_C( 95), -INT8_C( 46), INT8_C( 88), INT8_C( 46), INT8_C( 34), INT8_C( 80), -INT8_C( 17) },
25 { INT8_C( 4), INT8_C( 109), -INT8_C( 73), -INT8_C( 93), INT8_C( 85), INT8_C( 117), INT8_C( 67), -INT8_C( 18) },
26 { -INT8_C( 104), -INT8_C( 99), -INT8_C( 10), -INT8_C( 115), INT8_C( 20), -INT8_C( 78), -INT8_C( 113), INT8_C( 39) },
27 { INT8_C( 118), INT8_C( 113), INT8_C( 17), INT8_C( 110), INT8_C( 111), -INT8_C( 27), INT8_C( 4), INT8_C( 40) } },
28 { { -INT8_C( 62), -INT8_C( 71), INT8_C( 25), -INT8_C( 86), INT8_C( 57), -INT8_C( 40), INT8_C( 55), INT8_C( 67) },
29 { INT8_C( 121), INT8_C( 9), -INT8_C( 101), -INT8_C( 89), INT8_C( 43), -INT8_C( 20), -INT8_C( 105), INT8_C( 47) },
30 { INT8_C( 89), INT8_C( 78), -INT8_C( 45), -INT8_C( 82), -INT8_C( 61), INT8_C( 22), -INT8_C( 99), INT8_C( 91) },
31 { -INT8_C( 30), -INT8_C( 2), INT8_C( 81), -INT8_C( 79), -INT8_C( 95), INT8_C( 2), INT8_C( 61), INT8_C( 111) } },
32 { { -INT8_C( 77), -INT8_C( 109), -INT8_C( 23), -INT8_C( 56), INT8_C( 69), INT8_C( 120), -INT8_C( 17), INT8_C( 7) },
33 { INT8_C( 49), INT8_C( 8), -INT8_C( 78), INT8_C( 106), -INT8_C( 32), -INT8_C( 23), -INT8_C( 83), INT8_C( 89) },
34 { -INT8_C( 14), INT8_C( 73), INT8_C( 1), INT8_C( 29), INT8_C( 53), -INT8_C( 104), INT8_C( 76), -INT8_C( 114) },
35 { -INT8_C( 14), -INT8_C( 44), INT8_C( 56), INT8_C( 21), -INT8_C( 102), -INT8_C( 55), -INT8_C( 114), -INT8_C( 46) } },
36 { { -INT8_C( 26), INT8_C( 31), INT8_C( 61), -INT8_C( 87), INT8_C( 54), -INT8_C( 38), INT8_C( 5), -INT8_C( 23) },
37 { INT8_C( 109), -INT8_C( 18), -INT8_C( 79), -INT8_C( 78), INT8_C( 102), -INT8_C( 96), -INT8_C( 70), -INT8_C( 104) },
38 { -INT8_C( 87), INT8_C( 108), INT8_C( 2), -INT8_C( 119), INT8_C( 85), -INT8_C( 80), -INT8_C( 29), INT8_C( 71) },
39 { -INT8_C( 86), -INT8_C( 99), -INT8_C( 114), -INT8_C( 46), INT8_C( 71), -INT8_C( 22), INT8_C( 46), -INT8_C( 104) } },
40 { { -INT8_C( 7), -INT8_C( 28), INT8_C( 100), INT8_C( 46), INT8_C( 124), -INT8_C( 80), -INT8_C( 68), INT8_C( 98) },
41 { -INT8_C( 48), -INT8_C( 7), INT8_C( 11), INT8_C( 6), -INT8_C( 45), INT8_C( 16), -INT8_C( 17), INT8_C( 64) },
42 { -INT8_C( 2), -INT8_C( 95), -INT8_C( 13), INT8_C( 101), INT8_C( 65), -INT8_C( 83), -INT8_C( 3), -INT8_C( 22) },
43 { INT8_C( 39), INT8_C( 60), INT8_C( 124), -INT8_C( 115), -INT8_C( 22), INT8_C( 19), -INT8_C( 54), -INT8_C( 72) } },
44 { { INT8_C( 25), -INT8_C( 1), INT8_C( 116), INT8_C( 110), -INT8_C( 81), INT8_C( 87), -INT8_C( 75), -INT8_C( 88) },
45 { INT8_C( 59), INT8_C( 25), -INT8_C( 42), -INT8_C( 73), -INT8_C( 55), -INT8_C( 109), INT8_C( 25), -INT8_C( 103) },
46 { -INT8_C( 116), INT8_C( 36), -INT8_C( 97), INT8_C( 96), INT8_C( 53), -INT8_C( 113), -INT8_C( 96), INT8_C( 51) },
47 { -INT8_C( 56), INT8_C( 10), -INT8_C( 85), INT8_C( 23), INT8_C( 27), INT8_C( 91), INT8_C( 46), INT8_C( 66) } },
48 { { INT8_C( 48), -INT8_C( 109), -INT8_C( 104), INT8_C( 113), INT8_C( 64), -INT8_C( 107), INT8_C( 92), INT8_C( 89) },
49 { -INT8_C( 107), -INT8_C( 48), -INT8_C( 57), INT8_C( 68), INT8_C( 39), INT8_C( 124), -INT8_C( 19), INT8_C( 98) },
50 { -INT8_C( 107), -INT8_C( 61), INT8_C( 25), INT8_C( 95), INT8_C( 86), INT8_C( 50), -INT8_C( 8), -INT8_C( 29) },
51 { INT8_C( 48), -INT8_C( 96), -INT8_C( 22), -INT8_C( 116), INT8_C( 111), -INT8_C( 33), INT8_C( 103), -INT8_C( 40) } }
52 };
53
54 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
55 simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
56 simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
57 simde_int8x8_t c = simde_vld1_s8(test_vec[i].c);
58 simde_int8x8_t r = simde_vaba_s8(a, b, c);
59
60 simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
61 }
62
63 return 0;
64 #else
65 fputc('\n', stdout);
66 for (int i = 0 ; i < 8 ; i++) {
67 simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
68 simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
69 simde_int8x8_t c = simde_test_arm_neon_random_i8x8();
70 simde_int8x8_t r = simde_vaba_s8(a, b, c);
71
72 simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
73 simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
74 simde_test_arm_neon_write_i8x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
75 simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
76 }
77 return 1;
78 #endif
79 }
80
81 static int
test_simde_vaba_s16(SIMDE_MUNIT_TEST_ARGS)82 test_simde_vaba_s16 (SIMDE_MUNIT_TEST_ARGS) {
83 #if 1
84 static const struct {
85 int16_t a[4];
86 int16_t b[4];
87 int16_t c[4];
88 int16_t r[4];
89 } test_vec[] = {
90 { { -INT16_C( 17843), INT16_C( 24491), -INT16_C( 27890), -INT16_C( 20171) },
91 { -INT16_C( 23451), -INT16_C( 7916), INT16_C( 14616), INT16_C( 19459) },
92 { INT16_C( 27799), -INT16_C( 19103), -INT16_C( 26200), INT16_C( 3764) },
93 { -INT16_C( 32129), -INT16_C( 29858), INT16_C( 12926), -INT16_C( 4476) } },
94 { { -INT16_C( 27609), -INT16_C( 31965), -INT16_C( 14129), INT16_C( 7408) },
95 { -INT16_C( 25470), -INT16_C( 28549), -INT16_C( 20433), -INT16_C( 27326) },
96 { INT16_C( 22101), INT16_C( 28022), INT16_C( 31120), INT16_C( 10169) },
97 { INT16_C( 19962), INT16_C( 24606), -INT16_C( 28112), -INT16_C( 20633) } },
98 { { INT16_C( 6886), -INT16_C( 28964), -INT16_C( 28237), -INT16_C( 9571) },
99 { -INT16_C( 16347), -INT16_C( 2978), INT16_C( 20104), INT16_C( 2576) },
100 { -INT16_C( 29718), INT16_C( 6811), -INT16_C( 8901), -INT16_C( 28497) },
101 { INT16_C( 20257), -INT16_C( 19175), INT16_C( 768), INT16_C( 21502) } },
102 { { INT16_C( 9523), -INT16_C( 15363), -INT16_C( 18785), -INT16_C( 31253) },
103 { -INT16_C( 14383), -INT16_C( 31725), -INT16_C( 20392), INT16_C( 32095) },
104 { -INT16_C( 17040), -INT16_C( 1935), -INT16_C( 32501), -INT16_C( 2557) },
105 { INT16_C( 12180), INT16_C( 14427), -INT16_C( 6676), INT16_C( 3399) } },
106 { { -INT16_C( 25076), INT16_C( 18448), -INT16_C( 16517), -INT16_C( 20776) },
107 { -INT16_C( 10524), -INT16_C( 31886), INT16_C( 23948), INT16_C( 23816) },
108 { INT16_C( 7204), INT16_C( 32226), INT16_C( 16844), INT16_C( 15866) },
109 { -INT16_C( 7348), INT16_C( 17024), -INT16_C( 9413), -INT16_C( 12826) } },
110 { { INT16_C( 27902), INT16_C( 2357), INT16_C( 14573), -INT16_C( 1281) },
111 { INT16_C( 4054), INT16_C( 20802), INT16_C( 6862), -INT16_C( 19712) },
112 { INT16_C( 29424), INT16_C( 32054), INT16_C( 16335), -INT16_C( 3110) },
113 { -INT16_C( 12264), INT16_C( 13609), INT16_C( 24046), INT16_C( 15321) } },
114 { { -INT16_C( 17317), INT16_C( 10096), INT16_C( 27645), -INT16_C( 1180) },
115 { -INT16_C( 25897), -INT16_C( 15355), INT16_C( 1234), -INT16_C( 22082) },
116 { INT16_C( 20), -INT16_C( 7430), -INT16_C( 1509), INT16_C( 2965) },
117 { INT16_C( 8600), INT16_C( 18021), INT16_C( 30388), INT16_C( 23867) } },
118 { { -INT16_C( 13204), INT16_C( 15240), INT16_C( 25355), INT16_C( 26159) },
119 { -INT16_C( 24801), INT16_C( 7565), -INT16_C( 3574), -INT16_C( 7912) },
120 { INT16_C( 7564), INT16_C( 24230), INT16_C( 25634), INT16_C( 13831) },
121 { INT16_C( 19161), INT16_C( 31905), -INT16_C( 10973), -INT16_C( 17634) } }
122 };
123
124 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
125 simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
126 simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
127 simde_int16x4_t c = simde_vld1_s16(test_vec[i].c);
128 simde_int16x4_t r = simde_vaba_s16(a, b, c);
129
130 simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
131 }
132
133 return 0;
134 #else
135 fputc('\n', stdout);
136 for (int i = 0 ; i < 8 ; i++) {
137 simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
138 simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
139 simde_int16x4_t c = simde_test_arm_neon_random_i16x4();
140 simde_int16x4_t r = simde_vaba_s16(a, b, c);
141
142 simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
143 simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
144 simde_test_arm_neon_write_i16x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
145 simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
146 }
147 return 1;
148 #endif
149 }
150
151 static int
test_simde_vaba_s32(SIMDE_MUNIT_TEST_ARGS)152 test_simde_vaba_s32 (SIMDE_MUNIT_TEST_ARGS) {
153 #if 1
154 static const struct {
155 int32_t a[2];
156 int32_t b[2];
157 int32_t c[2];
158 int32_t r[2];
159 } test_vec[] = {
160 { { -INT32_C( 850247872), INT32_C( 228627924) },
161 { -INT32_C( 1002407850), -INT32_C( 1479470080) },
162 { INT32_C( 156520649), INT32_C( 1948288923) },
163 { INT32_C( 308680627), -INT32_C( 638580369) } },
164 { { INT32_C( 1567609108), -INT32_C( 1636072610) },
165 { -INT32_C( 1771254078), -INT32_C( 1163654045) },
166 { -INT32_C( 2072058748), -INT32_C( 1037348615) },
167 { INT32_C( 1868413778), -INT32_C( 1509767180) } },
168 { { INT32_C( 1003192480), INT32_C( 464579591) },
169 { INT32_C( 477700029), INT32_C( 1706751138) },
170 { INT32_C( 653993666), -INT32_C( 1210015950) },
171 { INT32_C( 1179486117), -INT32_C( 913620617) } },
172 { { INT32_C( 2101042820), INT32_C( 1312778158) },
173 { -INT32_C( 292942873), -INT32_C( 1274397961) },
174 { -INT32_C( 70220967), INT32_C( 979405687) },
175 { -INT32_C( 1971202570), -INT32_C( 728385490) } },
176 { { -INT32_C( 463446863), INT32_C( 2140881147) },
177 { INT32_C( 1308415646), INT32_C( 614153277) },
178 { INT32_C( 1041442119), -INT32_C( 1192092321) },
179 { -INT32_C( 196473336), -INT32_C( 347840551) } },
180 { { INT32_C( 397722528), -INT32_C( 11463602) },
181 { INT32_C( 1826861424), -INT32_C( 1863614735) },
182 { -INT32_C( 1830950827), INT32_C( 1807185956) },
183 { -INT32_C( 239432517), -INT32_C( 635630207) } },
184 { { -INT32_C( 39204194), -INT32_C( 2018075673) },
185 { -INT32_C( 1398904226), -INT32_C( 273878914) },
186 { -INT32_C( 1822715999), INT32_C( 1663256078) },
187 { INT32_C( 384607579), -INT32_C( 80940681) } },
188 { { INT32_C( 1391788078), INT32_C( 381529208) },
189 { INT32_C( 1561618038), INT32_C( 1625606658) },
190 { -INT32_C( 1307737292), INT32_C( 346143091) },
191 { -INT32_C( 33823888), INT32_C( 1660992775) } }
192 };
193
194 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
195 simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
196 simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
197 simde_int32x2_t c = simde_vld1_s32(test_vec[i].c);
198 simde_int32x2_t r = simde_vaba_s32(a, b, c);
199
200 simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
201 }
202
203 return 0;
204 #else
205 fputc('\n', stdout);
206 for (int i = 0 ; i < 8 ; i++) {
207 simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
208 simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
209 simde_int32x2_t c = simde_test_arm_neon_random_i32x2();
210 simde_int32x2_t r = simde_vaba_s32(a, b, c);
211
212 simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
213 simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
214 simde_test_arm_neon_write_i32x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
215 simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
216 }
217 return 1;
218 #endif
219 }
220
221 static int
test_simde_vaba_u8(SIMDE_MUNIT_TEST_ARGS)222 test_simde_vaba_u8 (SIMDE_MUNIT_TEST_ARGS) {
223 #if 1
224 static const struct {
225 uint8_t a[8];
226 uint8_t b[8];
227 uint8_t c[8];
228 uint8_t r[8];
229 } test_vec[] = {
230 { { UINT8_C( 17), UINT8_C(246), UINT8_C(124), UINT8_C( 27), UINT8_C( 1), UINT8_C( 92), UINT8_C(248), UINT8_C(208) },
231 { UINT8_C(212), UINT8_C(211), UINT8_C(252), UINT8_C( 10), UINT8_C( 66), UINT8_C( 76), UINT8_C( 57), UINT8_C(253) },
232 { UINT8_C( 40), UINT8_C(175), UINT8_C(209), UINT8_C(209), UINT8_C(140), UINT8_C(241), UINT8_C(147), UINT8_C(212) },
233 { UINT8_C(189), UINT8_C( 26), UINT8_C(167), UINT8_C(226), UINT8_C( 75), UINT8_C( 1), UINT8_C( 82), UINT8_C(249) } },
234 { { UINT8_C( 17), UINT8_C(152), UINT8_C(248), UINT8_C( 62), UINT8_C( 2), UINT8_C(241), UINT8_C( 63), UINT8_C( 19) },
235 { UINT8_C(231), UINT8_C(188), UINT8_C( 46), UINT8_C(233), UINT8_C( 24), UINT8_C( 39), UINT8_C(185), UINT8_C(236) },
236 { UINT8_C(250), UINT8_C(181), UINT8_C(247), UINT8_C( 60), UINT8_C( 1), UINT8_C( 48), UINT8_C( 58), UINT8_C( 41) },
237 { UINT8_C( 36), UINT8_C(159), UINT8_C(193), UINT8_C(235), UINT8_C( 25), UINT8_C(250), UINT8_C(190), UINT8_C(214) } },
238 { { UINT8_C(223), UINT8_C( 11), UINT8_C(251), UINT8_C(108), UINT8_C(252), UINT8_C(142), UINT8_C( 64), UINT8_C( 13) },
239 { UINT8_C( 38), UINT8_C( 57), UINT8_C( 75), UINT8_C( 40), UINT8_C( 42), UINT8_C(139), UINT8_C( 60), UINT8_C( 18) },
240 { UINT8_C( 71), UINT8_C(106), UINT8_C(251), UINT8_C( 95), UINT8_C(145), UINT8_C(180), UINT8_C( 76), UINT8_C(140) },
241 { UINT8_C( 0), UINT8_C( 60), UINT8_C(171), UINT8_C(163), UINT8_C( 99), UINT8_C(183), UINT8_C( 80), UINT8_C(135) } },
242 { { UINT8_C(105), UINT8_C( 67), UINT8_C(200), UINT8_C(106), UINT8_C(115), UINT8_C( 2), UINT8_C(148), UINT8_C( 82) },
243 { UINT8_C( 13), UINT8_C(143), UINT8_C(190), UINT8_C( 9), UINT8_C( 29), UINT8_MAX, UINT8_C( 23), UINT8_C( 67) },
244 { UINT8_C( 56), UINT8_C( 98), UINT8_C(107), UINT8_C( 98), UINT8_C(237), UINT8_C(167), UINT8_C(116), UINT8_C( 52) },
245 { UINT8_C(148), UINT8_C(112), UINT8_C( 27), UINT8_C(195), UINT8_C( 67), UINT8_C( 90), UINT8_C(241), UINT8_C( 97) } },
246 { { UINT8_C( 18), UINT8_C(111), UINT8_C(148), UINT8_C(163), UINT8_C( 35), UINT8_C(224), UINT8_C( 47), UINT8_C(140) },
247 { UINT8_C( 35), UINT8_C(248), UINT8_C(247), UINT8_C(150), UINT8_C(250), UINT8_C(139), UINT8_C(232), UINT8_C( 8) },
248 { UINT8_C( 26), UINT8_C(167), UINT8_C( 17), UINT8_C( 55), UINT8_C(166), UINT8_C( 40), UINT8_C(122), UINT8_C(222) },
249 { UINT8_C( 27), UINT8_C(192), UINT8_C(122), UINT8_C( 2), UINT8_C(119), UINT8_C( 67), UINT8_C(157), UINT8_C( 98) } },
250 { { UINT8_C(139), UINT8_C(229), UINT8_C( 64), UINT8_C(120), UINT8_C(141), UINT8_C(181), UINT8_C(173), UINT8_C(159) },
251 { UINT8_C( 36), UINT8_C( 65), UINT8_C( 66), UINT8_C( 72), UINT8_C( 33), UINT8_C(114), UINT8_C(212), UINT8_C( 68) },
252 { UINT8_C(106), UINT8_C(203), UINT8_C(218), UINT8_C(100), UINT8_C( 86), UINT8_C(194), UINT8_C(108), UINT8_C(112) },
253 { UINT8_C(209), UINT8_C(111), UINT8_C(216), UINT8_C(148), UINT8_C(194), UINT8_C( 5), UINT8_C( 21), UINT8_C(203) } },
254 { { UINT8_C(105), UINT8_C(126), UINT8_C(167), UINT8_C( 15), UINT8_C(166), UINT8_C( 33), UINT8_C(237), UINT8_C( 49) },
255 { UINT8_C( 7), UINT8_C( 46), UINT8_C(170), UINT8_C(148), UINT8_C(227), UINT8_C( 87), UINT8_C( 51), UINT8_C( 7) },
256 { UINT8_C(152), UINT8_C(117), UINT8_C( 79), UINT8_C(185), UINT8_C(231), UINT8_C( 36), UINT8_C(253), UINT8_C( 81) },
257 { UINT8_C(250), UINT8_C(197), UINT8_C( 2), UINT8_C( 52), UINT8_C(170), UINT8_C( 84), UINT8_C(183), UINT8_C(123) } },
258 { { UINT8_C(239), UINT8_C(215), UINT8_C(182), UINT8_C( 70), UINT8_C(153), UINT8_C( 34), UINT8_C(182), UINT8_C( 3) },
259 { UINT8_C(160), UINT8_C( 94), UINT8_C( 18), UINT8_C( 71), UINT8_C(127), UINT8_C( 0), UINT8_C(120), UINT8_C(134) },
260 { UINT8_C( 46), UINT8_C( 34), UINT8_C( 26), UINT8_C( 17), UINT8_C(121), UINT8_C( 77), UINT8_C( 24), UINT8_C( 17) },
261 { UINT8_C( 97), UINT8_C( 19), UINT8_C(190), UINT8_C(124), UINT8_C(159), UINT8_C(111), UINT8_C( 22), UINT8_C(120) } }
262 };
263
264 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
265 simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
266 simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b);
267 simde_uint8x8_t c = simde_vld1_u8(test_vec[i].c);
268 simde_uint8x8_t r = simde_vaba_u8(a, b, c);
269
270 simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
271 }
272
273 return 0;
274 #else
275 fputc('\n', stdout);
276 for (int i = 0 ; i < 8 ; i++) {
277 simde_uint8x8_t a = simde_test_arm_neon_random_u8x8();
278 simde_uint8x8_t b = simde_test_arm_neon_random_u8x8();
279 simde_uint8x8_t c = simde_test_arm_neon_random_u8x8();
280 simde_uint8x8_t r = simde_vaba_u8(a, b, c);
281
282 simde_test_arm_neon_write_u8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
283 simde_test_arm_neon_write_u8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
284 simde_test_arm_neon_write_u8x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
285 simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
286 }
287 return 1;
288 #endif
289 }
290
291 static int
test_simde_vaba_u16(SIMDE_MUNIT_TEST_ARGS)292 test_simde_vaba_u16 (SIMDE_MUNIT_TEST_ARGS) {
293 #if 1
294 static const struct {
295 uint16_t a[4];
296 uint16_t b[4];
297 uint16_t c[4];
298 uint16_t r[4];
299 } test_vec[] = {
300 { { UINT16_C(26819), UINT16_C(43722), UINT16_C(51084), UINT16_C(31740) },
301 { UINT16_C(45726), UINT16_C(14529), UINT16_C(30932), UINT16_C(30011) },
302 { UINT16_C(19926), UINT16_C(21948), UINT16_C(13389), UINT16_C(31708) },
303 { UINT16_C(52619), UINT16_C(51141), UINT16_C( 3091), UINT16_C(33437) } },
304 { { UINT16_C(63063), UINT16_C(53388), UINT16_C(42308), UINT16_C( 2018) },
305 { UINT16_C(44045), UINT16_C(39345), UINT16_C(44404), UINT16_C( 4628) },
306 { UINT16_C(54879), UINT16_C(13386), UINT16_C(34126), UINT16_C( 9385) },
307 { UINT16_C( 8361), UINT16_C(13811), UINT16_C(52586), UINT16_C( 6775) } },
308 { { UINT16_C(26067), UINT16_C( 8313), UINT16_C(21913), UINT16_C(61596) },
309 { UINT16_C(10316), UINT16_C(37057), UINT16_C(41933), UINT16_C(55959) },
310 { UINT16_C(18511), UINT16_C(50035), UINT16_C(35062), UINT16_C(21974) },
311 { UINT16_C(34262), UINT16_C(21291), UINT16_C(28784), UINT16_C(30045) } },
312 { { UINT16_C( 8286), UINT16_C(44169), UINT16_C(12966), UINT16_C(31184) },
313 { UINT16_C(18839), UINT16_C(12697), UINT16_C(13727), UINT16_C(60193) },
314 { UINT16_C(57950), UINT16_C(11131), UINT16_C( 4741), UINT16_C(54534) },
315 { UINT16_C(47397), UINT16_C(45735), UINT16_C(21952), UINT16_C(36843) } },
316 { { UINT16_C(31066), UINT16_C(20632), UINT16_C(28161), UINT16_C(24486) },
317 { UINT16_C(12175), UINT16_C(13579), UINT16_C(56162), UINT16_C(63918) },
318 { UINT16_C(18213), UINT16_C(50218), UINT16_C(19581), UINT16_C(56239) },
319 { UINT16_C(37104), UINT16_C(57271), UINT16_C(64742), UINT16_C(32165) } },
320 { { UINT16_C(10798), UINT16_C(46086), UINT16_C( 3132), UINT16_C(38537) },
321 { UINT16_C( 8582), UINT16_C(34791), UINT16_C(36240), UINT16_C( 8167) },
322 { UINT16_C(62140), UINT16_C( 7764), UINT16_C( 718), UINT16_C(62232) },
323 { UINT16_C(64356), UINT16_C( 7577), UINT16_C(38654), UINT16_C(27066) } },
324 { { UINT16_C(16969), UINT16_C(50871), UINT16_C(26254), UINT16_C(48545) },
325 { UINT16_C(43152), UINT16_C(52337), UINT16_C(64180), UINT16_C(14946) },
326 { UINT16_C(18715), UINT16_C(43970), UINT16_C(43478), UINT16_C(37834) },
327 { UINT16_C(41406), UINT16_C(59238), UINT16_C(46956), UINT16_C( 5897) } },
328 { { UINT16_C( 7835), UINT16_C(27057), UINT16_C(51488), UINT16_C(27228) },
329 { UINT16_C( 4876), UINT16_C(39472), UINT16_C(53881), UINT16_C( 2391) },
330 { UINT16_C(51322), UINT16_C(11989), UINT16_C(14530), UINT16_C(56937) },
331 { UINT16_C(54281), UINT16_C(54540), UINT16_C(25303), UINT16_C(16238) } }
332 };
333
334 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
335 simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
336 simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b);
337 simde_uint16x4_t c = simde_vld1_u16(test_vec[i].c);
338 simde_uint16x4_t r = simde_vaba_u16(a, b, c);
339
340 simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
341 }
342
343 return 0;
344 #else
345 fputc('\n', stdout);
346 for (int i = 0 ; i < 8 ; i++) {
347 simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
348 simde_uint16x4_t b = simde_test_arm_neon_random_u16x4();
349 simde_uint16x4_t c = simde_test_arm_neon_random_u16x4();
350 simde_uint16x4_t r = simde_vaba_u16(a, b, c);
351
352 simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
353 simde_test_arm_neon_write_u16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
354 simde_test_arm_neon_write_u16x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
355 simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
356 }
357 return 1;
358 #endif
359 }
360
361 static int
test_simde_vaba_u32(SIMDE_MUNIT_TEST_ARGS)362 test_simde_vaba_u32 (SIMDE_MUNIT_TEST_ARGS) {
363 #if 1
364 static const struct {
365 uint32_t a[2];
366 uint32_t b[2];
367 uint32_t c[2];
368 uint32_t r[2];
369 } test_vec[] = {
370 { { UINT32_C(1485384577), UINT32_C(1877693652) },
371 { UINT32_C(2480512114), UINT32_C(1929196902) },
372 { UINT32_C(3255577929), UINT32_C(2043438335) },
373 { UINT32_C(2260450392), UINT32_C(1991935085) } },
374 { { UINT32_C(4020805932), UINT32_C(1540166105) },
375 { UINT32_C( 280188476), UINT32_C( 494902954) },
376 { UINT32_C(2695911482), UINT32_C(3608325518) },
377 { UINT32_C(2141561642), UINT32_C( 358621373) } },
378 { { UINT32_C(3667468250), UINT32_C(2941478275) },
379 { UINT32_C(3768515335), UINT32_C(1211853580) },
380 { UINT32_C(1817767618), UINT32_C(3347699852) },
381 { UINT32_C(1323248671), UINT32_C( 782357251) } },
382 { { UINT32_C(3194435888), UINT32_C(3247799014) },
383 { UINT32_C( 479932313), UINT32_C(2613833364) },
384 { UINT32_C(4135348970), UINT32_C(2537535445) },
385 { UINT32_C(2554885249), UINT32_C(3324096933) } },
386 { { UINT32_C( 839161766), UINT32_C(2700709231) },
387 { UINT32_C(2908643783), UINT32_C(1953428699) },
388 { UINT32_C(3079670051), UINT32_C(3797113848) },
389 { UINT32_C(1010188034), UINT32_C( 249427084) } },
390 { { UINT32_C(2614677445), UINT32_C( 741480326) },
391 { UINT32_C( 509556399), UINT32_C(2344507588) },
392 { UINT32_C(2486705593), UINT32_C( 872982289) },
393 { UINT32_C( 296859343), UINT32_C(2213005625) } },
394 { { UINT32_C(2834012336), UINT32_C(3112845044) },
395 { UINT32_C(2488558349), UINT32_C( 700483450) },
396 { UINT32_C(2168987581), UINT32_C( 822871672) },
397 { UINT32_C(3153583104), UINT32_C(3235233266) } },
398 { { UINT32_C( 885409059), UINT32_C(2624114412) },
399 { UINT32_C(1531270247), UINT32_C(2685718418) },
400 { UINT32_C(2905893170), UINT32_C(2916545776) },
401 { UINT32_C(2260031982), UINT32_C(2854941770) } }
402 };
403
404 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
405 simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
406 simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b);
407 simde_uint32x2_t c = simde_vld1_u32(test_vec[i].c);
408 simde_uint32x2_t r = simde_vaba_u32(a, b, c);
409
410 simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
411 }
412
413 return 0;
414 #else
415 fputc('\n', stdout);
416 for (int i = 0 ; i < 8 ; i++) {
417 simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
418 simde_uint32x2_t b = simde_test_arm_neon_random_u32x2();
419 simde_uint32x2_t c = simde_test_arm_neon_random_u32x2();
420 simde_uint32x2_t r = simde_vaba_u32(a, b, c);
421
422 simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
423 simde_test_arm_neon_write_u32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
424 simde_test_arm_neon_write_u32x2(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
425 simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
426 }
427 return 1;
428 #endif
429 }
430
431 static int
test_simde_vabaq_s8(SIMDE_MUNIT_TEST_ARGS)432 test_simde_vabaq_s8 (SIMDE_MUNIT_TEST_ARGS) {
433 #if 1
434 static const struct {
435 int8_t a[16];
436 int8_t b[16];
437 int8_t c[16];
438 int8_t r[16];
439 } test_vec[] = {
440 { { INT8_C( 74), INT8_C( 104), -INT8_C( 55), INT8_C( 64), -INT8_C( 42), -INT8_C( 57), INT8_C( 12), -INT8_C( 72),
441 -INT8_C( 63), INT8_C( 99), -INT8_C( 106), -INT8_C( 48), INT8_C( 72), INT8_C( 62), INT8_C( 20), INT8_C( 88) },
442 { INT8_C( 87), -INT8_C( 93), INT8_C( 118), -INT8_C( 53), -INT8_C( 18), INT8_C( 24), INT8_C( 78), -INT8_C( 62),
443 -INT8_C( 33), -INT8_C( 104), INT8_C( 27), INT8_C( 88), INT8_C( 68), INT8_C( 102), INT8_C( 102), -INT8_C( 114) },
444 { -INT8_C( 50), INT8_C( 47), -INT8_C( 50), -INT8_C( 92), -INT8_C( 9), -INT8_C( 37), INT8_C( 93), -INT8_C( 72),
445 INT8_C( 62), -INT8_C( 13), -INT8_C( 120), -INT8_C( 122), INT8_C( 50), -INT8_C( 100), -INT8_C( 33), -INT8_C( 119) },
446 { -INT8_C( 45), -INT8_C( 12), INT8_C( 113), INT8_C( 103), -INT8_C( 33), INT8_C( 4), INT8_C( 27), -INT8_C( 62),
447 INT8_C( 32), -INT8_C( 66), INT8_C( 41), -INT8_C( 94), INT8_C( 90), INT8_C( 8), -INT8_C( 101), INT8_C( 93) } },
448 { { INT8_C( 63), INT8_C( 85), INT8_C( 84), INT8_C( 45), INT8_C( 110), -INT8_C( 94), -INT8_C( 16), INT8_C( 77),
449 INT8_C( 59), INT8_C( 11), -INT8_C( 91), INT8_MAX, INT8_C( 113), INT8_C( 12), INT8_C( 13), INT8_C( 63) },
450 { INT8_C( 59), -INT8_C( 36), -INT8_C( 28), INT8_C( 50), -INT8_C( 73), INT8_C( 65), -INT8_C( 22), -INT8_C( 11),
451 INT8_C( 52), INT8_C( 115), INT8_C( 124), INT8_C( 102), INT8_C( 15), INT8_C( 91), -INT8_C( 17), INT8_C( 79) },
452 { -INT8_C( 80), INT8_C( 67), INT8_C( 124), INT8_C( 30), -INT8_C( 26), INT8_C( 108), INT8_C( 107), INT8_C( 33),
453 INT8_C( 119), INT8_C( 17), -INT8_C( 96), -INT8_C( 24), INT8_C( 29), -INT8_C( 83), INT8_C( 40), INT8_C( 88) },
454 { -INT8_C( 54), -INT8_C( 68), -INT8_C( 20), INT8_C( 65), -INT8_C( 99), -INT8_C( 51), INT8_C( 113), INT8_C( 121),
455 INT8_C( 126), INT8_C( 109), -INT8_C( 127), -INT8_C( 3), INT8_MAX, -INT8_C( 70), INT8_C( 70), INT8_C( 72) } },
456 { { -INT8_C( 119), INT8_C( 12), -INT8_C( 117), INT8_C( 64), INT8_C( 77), INT8_C( 117), INT8_C( 54), -INT8_C( 127),
457 -INT8_C( 24), -INT8_C( 78), -INT8_C( 24), -INT8_C( 8), INT8_C( 13), -INT8_C( 41), INT8_C( 71), -INT8_C( 67) },
458 { INT8_C( 27), -INT8_C( 61), -INT8_C( 36), INT8_C( 1), INT8_C( 48), INT8_C( 71), INT8_C( 34), -INT8_C( 89),
459 INT8_C( 88), -INT8_C( 62), -INT8_C( 112), INT8_C( 117), INT8_C( 111), -INT8_C( 72), -INT8_C( 50), -INT8_C( 7) },
460 { -INT8_C( 60), INT8_C( 89), INT8_C( 57), INT8_C( 17), -INT8_C( 50), INT8_C( 111), -INT8_C( 110), -INT8_C( 73),
461 INT8_C( 33), INT8_C( 122), -INT8_C( 81), INT8_C( 46), INT8_C( 82), -INT8_C( 10), -INT8_C( 20), INT8_C( 109) },
462 { -INT8_C( 32), -INT8_C( 94), -INT8_C( 24), INT8_C( 80), -INT8_C( 81), -INT8_C( 99), -INT8_C( 58), -INT8_C( 111),
463 INT8_C( 31), INT8_C( 106), INT8_C( 7), INT8_C( 63), INT8_C( 42), INT8_C( 21), INT8_C( 101), INT8_C( 49) } },
464 { { -INT8_C( 71), -INT8_C( 56), INT8_C( 110), -INT8_C( 23), INT8_C( 15), -INT8_C( 112), -INT8_C( 111), INT8_C( 104),
465 INT8_C( 82), INT8_C( 33), -INT8_C( 35), -INT8_C( 63), -INT8_C( 39), -INT8_C( 85), -INT8_C( 70), -INT8_C( 99) },
466 { INT8_C( 4), -INT8_C( 12), -INT8_C( 82), -INT8_C( 45), INT8_C( 99), INT8_C( 64), -INT8_C( 118), -INT8_C( 123),
467 -INT8_C( 69), INT8_C( 57), -INT8_C( 77), INT8_C( 13), INT8_C( 47), -INT8_C( 97), INT8_C( 122), -INT8_C( 24) },
468 { INT8_C( 103), -INT8_C( 24), -INT8_C( 46), INT8_C( 119), INT8_C( 120), INT8_C( 99), -INT8_C( 33), -INT8_C( 54),
469 -INT8_C( 124), -INT8_C( 68), -INT8_C( 117), INT8_C( 93), INT8_C( 104), INT8_C( 70), -INT8_C( 6), INT8_C( 108) },
470 { INT8_C( 28), -INT8_C( 44), -INT8_C( 110), -INT8_C( 115), INT8_C( 36), -INT8_C( 77), -INT8_C( 26), -INT8_C( 83),
471 -INT8_C( 119), -INT8_C( 98), INT8_C( 5), INT8_C( 17), INT8_C( 18), INT8_C( 82), INT8_C( 58), INT8_C( 33) } },
472 { { INT8_C( 58), -INT8_C( 88), INT8_C( 63), -INT8_C( 99), -INT8_C( 24), -INT8_C( 55), INT8_C( 34), -INT8_C( 93),
473 INT8_C( 2), -INT8_C( 42), -INT8_C( 80), INT8_C( 49), INT8_C( 117), INT8_C( 42), INT8_C( 26), -INT8_C( 35) },
474 { INT8_C( 18), -INT8_C( 20), INT8_C( 84), -INT8_C( 118), INT8_C( 79), INT8_C( 51), INT8_C( 84), -INT8_C( 45),
475 -INT8_C( 17), -INT8_C( 32), INT8_C( 48), INT8_C( 87), INT8_C( 38), INT8_C( 42), -INT8_C( 60), INT8_C( 96) },
476 { -INT8_C( 46), INT8_C( 3), -INT8_C( 3), -INT8_C( 70), -INT8_C( 51), INT8_C( 32), INT8_C( 94), -INT8_C( 49),
477 -INT8_C( 10), INT8_C( 14), INT8_C( 1), INT8_C( 107), INT8_C( 57), INT8_C( 27), INT8_C( 72), INT8_C( 75) },
478 { INT8_C( 122), -INT8_C( 65), -INT8_C( 106), -INT8_C( 51), INT8_C( 106), -INT8_C( 36), INT8_C( 44), -INT8_C( 89),
479 INT8_C( 9), INT8_C( 4), -INT8_C( 33), INT8_C( 69), -INT8_C( 120), INT8_C( 57), -INT8_C( 98), -INT8_C( 14) } },
480 { { INT8_C( 7), -INT8_C( 100), -INT8_C( 42), INT8_C( 86), -INT8_C( 49), INT8_C( 42), INT8_C( 41), -INT8_C( 65),
481 INT8_C( 10), INT8_C( 89), INT8_C( 22), INT8_C( 48), -INT8_C( 125), -INT8_C( 38), -INT8_C( 112), INT8_C( 85) },
482 { -INT8_C( 34), -INT8_C( 114), INT8_C( 15), -INT8_C( 85), -INT8_C( 82), INT8_C( 109), INT8_C( 122), -INT8_C( 92),
483 INT8_C( 124), INT8_C( 123), INT8_C( 15), -INT8_C( 75), -INT8_C( 106), INT8_C( 88), INT8_C( 0), -INT8_C( 99) },
484 { -INT8_C( 12), -INT8_C( 42), -INT8_C( 13), -INT8_C( 60), INT8_C( 1), INT8_C( 28), -INT8_C( 125), INT8_C( 11),
485 INT8_C( 117), -INT8_C( 103), INT8_C( 60), -INT8_C( 8), INT8_C( 116), -INT8_C( 52), INT8_C( 77), INT8_C( 82) },
486 { INT8_C( 29), -INT8_C( 28), -INT8_C( 14), INT8_C( 111), INT8_C( 34), INT8_C( 123), INT8_C( 32), INT8_C( 38),
487 INT8_C( 17), INT8_C( 59), INT8_C( 67), INT8_C( 115), INT8_C( 97), INT8_C( 102), -INT8_C( 35), INT8_C( 10) } },
488 { { INT8_C( 90), INT8_C( 93), -INT8_C( 3), INT8_C( 8), -INT8_C( 54), INT8_C( 119), -INT8_C( 84), INT8_C( 70),
489 -INT8_C( 13), -INT8_C( 68), -INT8_C( 5), -INT8_C( 119), INT8_C( 20), -INT8_C( 4), INT8_C( 39), INT8_C( 8) },
490 { -INT8_C( 46), INT8_C( 26), -INT8_C( 52), -INT8_C( 45), INT8_C( 55), INT8_C( 79), -INT8_C( 33), -INT8_C( 84),
491 -INT8_C( 23), INT8_C( 27), -INT8_C( 91), INT8_C( 93), -INT8_C( 25), -INT8_C( 14), -INT8_C( 81), INT8_C( 66) },
492 { INT8_C( 79), -INT8_C( 84), INT8_C( 74), INT8_C( 26), INT8_C( 35), -INT8_C( 9), INT8_C( 96), INT8_C( 22),
493 -INT8_C( 77), INT8_C( 92), -INT8_C( 96), -INT8_C( 57), INT8_C( 88), -INT8_C( 57), -INT8_C( 49), INT8_C( 42) },
494 { -INT8_C( 41), -INT8_C( 53), INT8_C( 123), INT8_C( 79), -INT8_C( 34), -INT8_C( 49), INT8_C( 45), -INT8_C( 80),
495 INT8_C( 41), -INT8_C( 3), INT8_C( 0), INT8_C( 31), -INT8_C( 123), INT8_C( 39), INT8_C( 71), INT8_C( 32) } },
496 { { -INT8_C( 31), -INT8_C( 100), -INT8_C( 2), INT8_C( 24), -INT8_C( 21), -INT8_C( 35), -INT8_C( 59), -INT8_C( 44),
497 -INT8_C( 8), INT8_C( 106), INT8_C( 49), -INT8_C( 33), INT8_C( 92), -INT8_C( 32), INT8_C( 33), -INT8_C( 84) },
498 { -INT8_C( 116), INT8_C( 108), -INT8_C( 58), -INT8_C( 80), INT8_C( 99), INT8_C( 38), -INT8_C( 58), INT8_C( 22),
499 -INT8_C( 126), INT8_C( 102), -INT8_C( 35), -INT8_C( 38), INT8_C( 45), -INT8_C( 84), INT8_C( 5), INT8_C( 15) },
500 { INT8_C( 72), INT8_C( 3), INT8_C( 39), INT8_C( 52), -INT8_C( 32), -INT8_C( 20), INT8_C( 8), -INT8_C( 40),
501 INT8_C( 86), INT8_C( 58), -INT8_C( 73), -INT8_C( 77), INT8_C( 26), -INT8_C( 39), INT8_C( 95), -INT8_C( 89) },
502 { -INT8_C( 99), INT8_C( 5), INT8_C( 95), -INT8_C( 100), INT8_C( 110), INT8_C( 23), INT8_C( 7), INT8_C( 18),
503 -INT8_C( 52), -INT8_C( 106), INT8_C( 87), INT8_C( 6), INT8_C( 111), INT8_C( 13), INT8_C( 123), INT8_C( 20) } }
504 };
505
506 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
507 simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
508 simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
509 simde_int8x16_t c = simde_vld1q_s8(test_vec[i].c);
510 simde_int8x16_t r = simde_vabaq_s8(a, b, c);
511
512 simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
513 }
514
515 return 0;
516 #else
517 fputc('\n', stdout);
518 for (int i = 0 ; i < 8 ; i++) {
519 simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
520 simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
521 simde_int8x16_t c = simde_test_arm_neon_random_i8x16();
522 simde_int8x16_t r = simde_vabaq_s8(a, b, c);
523
524 simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
525 simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
526 simde_test_arm_neon_write_i8x16(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
527 simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
528 }
529 return 1;
530 #endif
531 }
532
533 static int
test_simde_vabaq_s16(SIMDE_MUNIT_TEST_ARGS)534 test_simde_vabaq_s16 (SIMDE_MUNIT_TEST_ARGS) {
535 #if 1
536 static const struct {
537 int16_t a[8];
538 int16_t b[8];
539 int16_t c[8];
540 int16_t r[8];
541 } test_vec[] = {
542 { { INT16_C( 30977), INT16_C( 12491), INT16_C( 2221), -INT16_C( 1303), -INT16_C( 21084), INT16_C( 23557), -INT16_C( 31169), -INT16_C( 24084) },
543 { INT16_C( 24241), -INT16_C( 32243), -INT16_C( 7993), INT16_C( 14763), -INT16_C( 29538), -INT16_C( 2390), -INT16_C( 29998), -INT16_C( 11061) },
544 { -INT16_C( 27132), -INT16_C( 20220), -INT16_C( 4449), INT16_C( 17323), -INT16_C( 20325), -INT16_C( 9569), -INT16_C( 29897), -INT16_C( 6021) },
545 { INT16_C( 16814), INT16_C( 24514), INT16_C( 5765), INT16_C( 1257), -INT16_C( 11871), INT16_C( 30736), -INT16_C( 31068), -INT16_C( 19044) } },
546 { { -INT16_C( 30487), -INT16_C( 20118), INT16_C( 5480), INT16_C( 2026), -INT16_C( 27487), INT16_C( 29949), -INT16_C( 14306), INT16_C( 8776) },
547 { INT16_C( 19551), -INT16_C( 300), INT16_C( 32570), -INT16_C( 10943), -INT16_C( 8144), INT16_C( 26544), INT16_C( 11116), INT16_C( 21839) },
548 { -INT16_C( 17996), INT16_C( 7174), -INT16_C( 3890), INT16_C( 28707), INT16_C( 8580), -INT16_C( 23580), INT16_C( 11497), INT16_C( 18629) },
549 { INT16_C( 7060), -INT16_C( 12644), -INT16_C( 23596), -INT16_C( 23860), -INT16_C( 10763), INT16_C( 14537), -INT16_C( 13925), INT16_C( 11986) } },
550 { { -INT16_C( 26248), -INT16_C( 19642), -INT16_C( 30951), INT16_C( 18824), INT16_C( 14440), -INT16_C( 11088), -INT16_C( 156), INT16_C( 6185) },
551 { INT16_C( 12472), -INT16_C( 31180), INT16_C( 22560), -INT16_C( 23050), -INT16_C( 9607), INT16_C( 25160), INT16_C( 3334), INT16_C( 32683) },
552 { -INT16_C( 3673), -INT16_C( 16334), -INT16_C( 17799), -INT16_C( 7927), -INT16_C( 17933), INT16_C( 22453), -INT16_C( 8520), INT16_C( 28783) },
553 { -INT16_C( 10103), -INT16_C( 4796), INT16_C( 9408), -INT16_C( 31589), INT16_C( 22766), -INT16_C( 8381), INT16_C( 11698), INT16_C( 10085) } },
554 { { -INT16_C( 23794), INT16_C( 12278), -INT16_C( 4613), INT16_C( 29908), INT16_C( 7367), -INT16_C( 12585), -INT16_C( 32215), -INT16_C( 12211) },
555 { INT16_C( 32627), -INT16_C( 4976), -INT16_C( 26311), INT16_C( 11469), -INT16_C( 32174), INT16_C( 2691), -INT16_C( 3487), INT16_C( 28538) },
556 { INT16_C( 29078), -INT16_C( 28258), INT16_C( 29278), INT16_C( 9478), -INT16_C( 8818), -INT16_C( 18189), INT16_C( 16479), -INT16_C( 11640) },
557 { -INT16_C( 20245), -INT16_C( 29976), -INT16_C( 14560), INT16_C( 31899), INT16_C( 30723), INT16_C( 8295), -INT16_C( 12249), INT16_C( 27967) } },
558 { { INT16_C( 6591), -INT16_C( 1601), -INT16_C( 29518), INT16_C( 1317), -INT16_C( 22257), INT16_C( 28687), -INT16_C( 30053), INT16_C( 12767) },
559 { INT16_C( 32507), INT16_C( 22979), -INT16_C( 13840), INT16_C( 32638), INT16_C( 29350), INT16_C( 1335), -INT16_C( 16462), INT16_C( 29399) },
560 { -INT16_C( 26920), -INT16_C( 29845), -INT16_C( 28637), INT16_C( 12944), -INT16_C( 24775), -INT16_C( 10846), -INT16_C( 32471), INT16_C( 9222) },
561 { INT16_C( 482), -INT16_C( 14313), -INT16_C( 14721), INT16_C( 21011), INT16_C( 31868), -INT16_C( 24668), -INT16_C( 14044), -INT16_C( 32592) } },
562 { { -INT16_C( 13825), -INT16_C( 3971), -INT16_C( 878), INT16_C( 14447), -INT16_C( 22930), INT16_C( 8253), INT16_C( 5477), INT16_C( 16018) },
563 { -INT16_C( 597), -INT16_C( 12599), INT16_C( 22926), -INT16_C( 14592), -INT16_C( 23816), INT16_C( 8860), -INT16_C( 23772), INT16_C( 9030) },
564 { -INT16_C( 15252), -INT16_C( 237), -INT16_C( 32064), INT16_C( 11831), INT16_C( 29992), -INT16_C( 29106), -INT16_C( 7798), INT16_C( 13772) },
565 { INT16_C( 830), INT16_C( 8391), -INT16_C( 11424), -INT16_C( 24666), INT16_C( 30878), -INT16_C( 19317), INT16_C( 21451), INT16_C( 20760) } },
566 { { -INT16_C( 27170), INT16_C( 27652), INT16_C( 1262), -INT16_C( 6604), -INT16_C( 12121), -INT16_C( 13560), INT16_C( 20339), -INT16_C( 7954) },
567 { INT16_C( 531), -INT16_C( 11297), INT16_C( 5764), -INT16_C( 21247), INT16_C( 20363), INT16_C( 5435), INT16_C( 1840), INT16_C( 3915) },
568 { INT16_C( 20380), -INT16_C( 30085), -INT16_C( 20653), -INT16_C( 1424), INT16_C( 31104), -INT16_C( 3131), -INT16_C( 19256), -INT16_C( 9261) },
569 { -INT16_C( 7321), -INT16_C( 19096), INT16_C( 27679), INT16_C( 13219), -INT16_C( 1380), -INT16_C( 4994), -INT16_C( 24101), INT16_C( 5222) } },
570 { { -INT16_C( 19786), INT16_C( 15022), -INT16_C( 20535), INT16_C( 21735), INT16_C( 8958), INT16_C( 12138), -INT16_C( 19159), -INT16_C( 15042) },
571 { -INT16_C( 18172), INT16_C( 22351), -INT16_C( 16279), -INT16_C( 5806), INT16_C( 5945), INT16_C( 476), -INT16_C( 20277), -INT16_C( 32292) },
572 { -INT16_C( 30110), INT16_C( 11196), -INT16_C( 23751), INT16_C( 14208), -INT16_C( 5434), -INT16_C( 4250), -INT16_C( 23393), -INT16_C( 23627) },
573 { -INT16_C( 7848), INT16_C( 26177), -INT16_C( 13063), -INT16_C( 23787), INT16_C( 20337), INT16_C( 16864), -INT16_C( 16043), -INT16_C( 6377) } }
574 };
575
576 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
577 simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
578 simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
579 simde_int16x8_t c = simde_vld1q_s16(test_vec[i].c);
580 simde_int16x8_t r = simde_vabaq_s16(a, b, c);
581
582 simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
583 }
584
585 return 0;
586 #else
587 fputc('\n', stdout);
588 for (int i = 0 ; i < 8 ; i++) {
589 simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
590 simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
591 simde_int16x8_t c = simde_test_arm_neon_random_i16x8();
592 simde_int16x8_t r = simde_vabaq_s16(a, b, c);
593
594 simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
595 simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
596 simde_test_arm_neon_write_i16x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
597 simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
598 }
599 return 1;
600 #endif
601 }
602
603 #if !defined(TEST_SIMDE_VABD_NO_TEST_32)
604 static int
test_simde_vabaq_s32(SIMDE_MUNIT_TEST_ARGS)605 test_simde_vabaq_s32 (SIMDE_MUNIT_TEST_ARGS) {
606 #if 1
607 static const struct {
608 int32_t a[4];
609 int32_t b[4];
610 int32_t c[4];
611 int32_t r[4];
612 } test_vec[] = {
613 { { -INT32_C( 939916194), -INT32_C( 38777660), INT32_C( 805211236), -INT32_C( 1615734212) },
614 { -INT32_C( 1647678108), -INT32_C( 690664944), -INT32_C( 741983436), INT32_C( 1047952352) },
615 { INT32_C( 1141207423), INT32_C( 557954493), INT32_C( 2119254081), INT32_C( 2132607514) },
616 { INT32_C( 1848969337), INT32_C( 1209841777), -INT32_C( 628518543), -INT32_C( 531079050) } },
617 { { INT32_C( 2132600687), INT32_C( 1716973874), INT32_C( 221912109), INT32_C( 374059159) },
618 { -INT32_C( 547729375), INT32_C( 1174445061), -INT32_C( 154906148), -INT32_C( 1032461997) },
619 { -INT32_C( 79523127), -INT32_C( 1335781245), INT32_C( 1270717364), INT32_C( 1835075660) },
620 { -INT32_C( 1694160361), -INT32_C( 67767116), INT32_C( 1647535621), -INT32_C( 1053370480) } },
621 { { INT32_C( 1565310040), INT32_C( 883182936), -INT32_C( 232101730), INT32_C( 330604618) },
622 { -INT32_C( 1257310670), INT32_C( 1114009486), INT32_C( 1468867339), -INT32_C( 2067468500) },
623 { INT32_C( 65147307), -INT32_C( 63469986), INT32_C( 955146734), INT32_C( 860594945) },
624 { -INT32_C( 1407199279), INT32_C( 2060662408), INT32_C( 281618875), -INT32_C( 1036299233) } },
625 { { INT32_C( 686381465), -INT32_C( 731230263), -INT32_C( 1641285518), -INT32_C( 1843138585) },
626 { INT32_C( 1586824448), INT32_C( 2036059275), INT32_C( 800213293), -INT32_C( 2040332820) },
627 { INT32_C( 548293463), INT32_C( 234100890), -INT32_C( 139780336), INT32_C( 260689422) },
628 { INT32_C( 1724912450), INT32_C( 1070728122), -INT32_C( 701291889), INT32_C( 457883657) } },
629 { { INT32_C( 1584209619), INT32_C( 416860394), -INT32_C( 28866030), -INT32_C( 561731193) },
630 { -INT32_C( 1879166219), INT32_C( 1537012299), INT32_C( 542328849), -INT32_C( 365962218) },
631 { -INT32_C( 448226053), INT32_C( 2013077605), INT32_C( 846546090), -INT32_C( 485426450) },
632 { -INT32_C( 1279817511), INT32_C( 892925700), INT32_C( 275351211), -INT32_C( 442266961) } },
633 { { INT32_C( 2003963692), INT32_C( 332599041), INT32_C( 1832068695), -INT32_C( 44604926) },
634 { INT32_C( 1675862270), INT32_C( 1809506496), INT32_C( 329076773), INT32_C( 1995877706) },
635 { -INT32_C( 1091671876), -INT32_C( 825114249), -INT32_C( 381942553), INT32_C( 1692898150) },
636 { INT32_C( 476530542), -INT32_C( 1327747510), -INT32_C( 1751879275), INT32_C( 258374630) } },
637 { { -INT32_C( 188167629), -INT32_C( 815816022), INT32_C( 1021508850), INT32_C( 1723062441) },
638 { -INT32_C( 1205558975), INT32_C( 1233646946), INT32_C( 1597162489), -INT32_C( 1966925482) },
639 { -INT32_C( 1904309277), INT32_C( 543022382), -INT32_C( 2107817767), INT32_C( 1508380696) },
640 { INT32_C( 510582673), -INT32_C( 125191458), INT32_C( 431521810), INT32_C( 903401323) } },
641 { { INT32_C( 319950001), -INT32_C( 94594815), -INT32_C( 1302753700), -INT32_C( 1958994520) },
642 { -INT32_C( 702956888), INT32_C( 1895266199), -INT32_C( 806136649), INT32_C( 355064676) },
643 { -INT32_C( 383239192), INT32_C( 820282580), -INT32_C( 1159578350), INT32_C( 54927194) },
644 { INT32_C( 639667697), INT32_C( 980388804), -INT32_C( 949311999), -INT32_C( 1658857038) } }
645 };
646
647 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
648 simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
649 simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
650 simde_int32x4_t c = simde_vld1q_s32(test_vec[i].c);
651 simde_int32x4_t r = simde_vabaq_s32(a, b, c);
652
653 simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
654 }
655
656 return 0;
657 #else
658 fputc('\n', stdout);
659 for (int i = 0 ; i < 8 ; i++) {
660 simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
661 simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
662 simde_int32x4_t c = simde_test_arm_neon_random_i32x4();
663 simde_int32x4_t r = simde_vabaq_s32(a, b, c);
664
665 simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
666 simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
667 simde_test_arm_neon_write_i32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
668 simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
669 }
670 return 1;
671 #endif
672 }
673 #endif
674
675 static int
test_simde_vabaq_u8(SIMDE_MUNIT_TEST_ARGS)676 test_simde_vabaq_u8 (SIMDE_MUNIT_TEST_ARGS) {
677 #if 1
678 static const struct {
679 uint8_t a[16];
680 uint8_t b[16];
681 uint8_t c[16];
682 uint8_t r[16];
683 } test_vec[] = {
684 { { UINT8_C(216), UINT8_C( 11), UINT8_C( 40), UINT8_C(228), UINT8_C(187), UINT8_C(225), UINT8_C( 32), UINT8_C(216),
685 UINT8_C( 90), UINT8_C(133), UINT8_C(229), UINT8_C( 30), UINT8_C(182), UINT8_C( 36), UINT8_C(239), UINT8_C(187) },
686 { UINT8_C(110), UINT8_C( 19), UINT8_C( 78), UINT8_C(165), UINT8_C(167), UINT8_C(104), UINT8_C(134), UINT8_C( 18),
687 UINT8_C( 94), UINT8_C(254), UINT8_C(151), UINT8_C( 42), UINT8_C(254), UINT8_C(121), UINT8_C(219), UINT8_C(215) },
688 { UINT8_C(132), UINT8_C( 3), UINT8_C(187), UINT8_C( 63), UINT8_C(228), UINT8_C(220), UINT8_C( 24), UINT8_C( 62),
689 UINT8_C( 97), UINT8_C(253), UINT8_C( 93), UINT8_C( 23), UINT8_C( 33), UINT8_C( 76), UINT8_C(211), UINT8_C(144) },
690 { UINT8_C(238), UINT8_C( 27), UINT8_C(149), UINT8_C( 74), UINT8_C(248), UINT8_C( 85), UINT8_C(142), UINT8_C( 4),
691 UINT8_C( 93), UINT8_C(134), UINT8_C( 31), UINT8_C( 49), UINT8_C(147), UINT8_C( 81), UINT8_C(247), UINT8_C( 2) } },
692 { { UINT8_C( 95), UINT8_C( 33), UINT8_C( 53), UINT8_C( 6), UINT8_C(138), UINT8_C(187), UINT8_C( 24), UINT8_C(232),
693 UINT8_C(186), UINT8_C(175), UINT8_C( 18), UINT8_C(184), UINT8_C( 40), UINT8_C(237), UINT8_C(143), UINT8_C(173) },
694 { UINT8_C(240), UINT8_C( 75), UINT8_C(236), UINT8_C(212), UINT8_C( 39), UINT8_C( 4), UINT8_C( 18), UINT8_C(136),
695 UINT8_C( 2), UINT8_C(111), UINT8_C(160), UINT8_C( 35), UINT8_C(187), UINT8_C(115), UINT8_C(179), UINT8_C( 27) },
696 { UINT8_C(148), UINT8_C(232), UINT8_C( 33), UINT8_C( 30), UINT8_C(164), UINT8_C( 58), UINT8_C( 6), UINT8_C( 94),
697 UINT8_C(233), UINT8_C( 24), UINT8_C( 22), UINT8_C( 18), UINT8_C( 5), UINT8_C(166), UINT8_C(191), UINT8_C(245) },
698 { UINT8_C(187), UINT8_C(190), UINT8_C( 0), UINT8_C(188), UINT8_C( 7), UINT8_C(241), UINT8_C( 36), UINT8_C( 18),
699 UINT8_C(161), UINT8_C( 6), UINT8_C(156), UINT8_C(201), UINT8_C(222), UINT8_C( 32), UINT8_C(155), UINT8_C(135) } },
700 { { UINT8_C(241), UINT8_C(171), UINT8_C(201), UINT8_C( 24), UINT8_C(176), UINT8_C(220), UINT8_C(160), UINT8_C(178),
701 UINT8_C( 75), UINT8_C( 64), UINT8_C(213), UINT8_C( 7), UINT8_C(179), UINT8_C(137), UINT8_C( 34), UINT8_C( 72) },
702 { UINT8_C(113), UINT8_C( 67), UINT8_C(102), UINT8_C( 21), UINT8_C(125), UINT8_C(109), UINT8_C(115), UINT8_C(103),
703 UINT8_C(133), UINT8_C(138), UINT8_C(121), UINT8_C(139), UINT8_C( 48), UINT8_C( 56), UINT8_C(128), UINT8_C( 33) },
704 { UINT8_C(227), UINT8_C( 74), UINT8_C( 57), UINT8_C(147), UINT8_C( 38), UINT8_C(217), UINT8_C( 69), UINT8_C(113),
705 UINT8_C( 26), UINT8_C( 27), UINT8_C(120), UINT8_C(205), UINT8_C(164), UINT8_C(154), UINT8_C( 21), UINT8_C( 21) },
706 { UINT8_C( 99), UINT8_C(178), UINT8_C(246), UINT8_C(150), UINT8_C( 7), UINT8_C( 72), UINT8_C(206), UINT8_C(188),
707 UINT8_C(182), UINT8_C(175), UINT8_C(214), UINT8_C( 73), UINT8_C( 39), UINT8_C(235), UINT8_C(141), UINT8_C( 84) } },
708 { { UINT8_C(222), UINT8_C(124), UINT8_C( 43), UINT8_C( 91), UINT8_C(233), UINT8_C(158), UINT8_C(194), UINT8_C(110),
709 UINT8_C( 40), UINT8_C( 59), UINT8_C(249), UINT8_C( 88), UINT8_C(115), UINT8_C(122), UINT8_C(121), UINT8_C( 87) },
710 { UINT8_C(196), UINT8_C(178), UINT8_C(234), UINT8_C(234), UINT8_C(140), UINT8_C( 48), UINT8_C( 91), UINT8_C(166),
711 UINT8_C( 75), UINT8_C(212), UINT8_C(115), UINT8_C(239), UINT8_C(110), UINT8_C(137), UINT8_C( 4), UINT8_C( 76) },
712 { UINT8_C( 5), UINT8_C( 47), UINT8_C(168), UINT8_C(238), UINT8_C(206), UINT8_C(106), UINT8_C( 92), UINT8_C(246),
713 UINT8_C(166), UINT8_C( 86), UINT8_C( 79), UINT8_C( 25), UINT8_C(208), UINT8_C(200), UINT8_C(112), UINT8_C(148) },
714 { UINT8_C(157), UINT8_MAX, UINT8_C(109), UINT8_C( 95), UINT8_C( 43), UINT8_C(216), UINT8_C(195), UINT8_C(190),
715 UINT8_C(131), UINT8_C(185), UINT8_C( 29), UINT8_C( 46), UINT8_C(213), UINT8_C(185), UINT8_C(229), UINT8_C(159) } },
716 { { UINT8_C(123), UINT8_C( 91), UINT8_C(126), UINT8_C( 7), UINT8_C(139), UINT8_C(217), UINT8_C(173), UINT8_C(214),
717 UINT8_C(173), UINT8_C( 32), UINT8_C(197), UINT8_C( 28), UINT8_C(169), UINT8_C(201), UINT8_C(104), UINT8_C(174) },
718 { UINT8_C(249), UINT8_C( 16), UINT8_C(156), UINT8_C(199), UINT8_C(123), UINT8_C(249), UINT8_C(189), UINT8_C( 33),
719 UINT8_C( 79), UINT8_C( 12), UINT8_C( 58), UINT8_C( 31), UINT8_C(213), UINT8_C(171), UINT8_C(179), UINT8_C( 80) },
720 { UINT8_C( 6), UINT8_C( 49), UINT8_C( 87), UINT8_C(145), UINT8_C( 10), UINT8_C( 4), UINT8_C(103), UINT8_C(184),
721 UINT8_C( 36), UINT8_C( 44), UINT8_C(212), UINT8_C(206), UINT8_C(245), UINT8_C( 60), UINT8_C(124), UINT8_C(238) },
722 { UINT8_C(110), UINT8_C(124), UINT8_C(195), UINT8_C( 61), UINT8_C(252), UINT8_C(206), UINT8_C( 3), UINT8_C(109),
723 UINT8_C(216), UINT8_C( 64), UINT8_C( 95), UINT8_C(203), UINT8_C(201), UINT8_C( 56), UINT8_C(159), UINT8_C( 76) } },
724 { { UINT8_C( 77), UINT8_C( 25), UINT8_C(181), UINT8_C(200), UINT8_C( 18), UINT8_C(115), UINT8_C(233), UINT8_C( 97),
725 UINT8_C(127), UINT8_C( 35), UINT8_C(128), UINT8_C( 84), UINT8_C(206), UINT8_C( 51), UINT8_C(164), UINT8_C(212) },
726 { UINT8_C(100), UINT8_C(251), UINT8_C(101), UINT8_C(110), UINT8_MAX, UINT8_C(204), UINT8_C( 38), UINT8_C( 36),
727 UINT8_C(248), UINT8_C(250), UINT8_C(242), UINT8_C(238), UINT8_C( 55), UINT8_C(110), UINT8_C(220), UINT8_C(132) },
728 { UINT8_C(135), UINT8_C(146), UINT8_C( 76), UINT8_C(153), UINT8_C( 5), UINT8_C( 53), UINT8_C(250), UINT8_C(132),
729 UINT8_C( 88), UINT8_C(122), UINT8_C(217), UINT8_C( 39), UINT8_C(173), UINT8_C(125), UINT8_C(251), UINT8_C( 17) },
730 { UINT8_C(112), UINT8_C(130), UINT8_C(206), UINT8_C(243), UINT8_C( 12), UINT8_C( 10), UINT8_C(189), UINT8_C(193),
731 UINT8_C( 31), UINT8_C(163), UINT8_C(153), UINT8_C( 27), UINT8_C( 68), UINT8_C( 66), UINT8_C(195), UINT8_C( 71) } },
732 { { UINT8_C(121), UINT8_C( 97), UINT8_C(128), UINT8_C(120), UINT8_C( 45), UINT8_C(166), UINT8_C(156), UINT8_C( 38),
733 UINT8_C(161), UINT8_C(142), UINT8_C( 20), UINT8_C(216), UINT8_C(253), UINT8_C(240), UINT8_C( 92), UINT8_C(132) },
734 { UINT8_C(130), UINT8_C(168), UINT8_C( 30), UINT8_C(135), UINT8_C(221), UINT8_C( 24), UINT8_C( 12), UINT8_C( 53),
735 UINT8_C(147), UINT8_C(229), UINT8_C( 92), UINT8_C( 64), UINT8_C( 98), UINT8_C( 88), UINT8_C( 82), UINT8_C(219) },
736 { UINT8_C(185), UINT8_C(210), UINT8_C( 84), UINT8_C(230), UINT8_C(120), UINT8_C(240), UINT8_C( 12), UINT8_C( 25),
737 UINT8_C(127), UINT8_C( 32), UINT8_C(241), UINT8_C(124), UINT8_C( 17), UINT8_C( 77), UINT8_C( 0), UINT8_C(147) },
738 { UINT8_C(176), UINT8_C(139), UINT8_C(182), UINT8_C(215), UINT8_C(146), UINT8_C(126), UINT8_C(156), UINT8_C( 66),
739 UINT8_C(181), UINT8_C( 83), UINT8_C(169), UINT8_C( 20), UINT8_C( 78), UINT8_C(251), UINT8_C(174), UINT8_C(204) } },
740 { { UINT8_C(245), UINT8_C( 30), UINT8_C( 27), UINT8_C(210), UINT8_C( 55), UINT8_C( 39), UINT8_C( 8), UINT8_C(202),
741 UINT8_C( 12), UINT8_C(100), UINT8_C( 10), UINT8_C(110), UINT8_C(188), UINT8_C( 92), UINT8_C( 74), UINT8_C(117) },
742 { UINT8_C( 46), UINT8_C(158), UINT8_C( 92), UINT8_C(167), UINT8_C(142), UINT8_C(104), UINT8_C(192), UINT8_C( 13),
743 UINT8_C(137), UINT8_C(178), UINT8_C(137), UINT8_C(154), UINT8_MAX, UINT8_C(138), UINT8_C( 45), UINT8_C(245) },
744 { UINT8_C(168), UINT8_C( 72), UINT8_C(199), UINT8_C(223), UINT8_C(111), UINT8_C(207), UINT8_C(169), UINT8_C(123),
745 UINT8_C( 52), UINT8_C(180), UINT8_C(234), UINT8_C(240), UINT8_C( 16), UINT8_C( 52), UINT8_C(102), UINT8_C( 63) },
746 { UINT8_C(111), UINT8_C(116), UINT8_C(134), UINT8_C( 10), UINT8_C( 86), UINT8_C(142), UINT8_C( 31), UINT8_C( 56),
747 UINT8_C( 97), UINT8_C(102), UINT8_C(107), UINT8_C(196), UINT8_C(171), UINT8_C(178), UINT8_C(131), UINT8_C( 43) } }
748 };
749
750 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
751 simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
752 simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b);
753 simde_uint8x16_t c = simde_vld1q_u8(test_vec[i].c);
754 simde_uint8x16_t r = simde_vabaq_u8(a, b, c);
755
756 simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
757 }
758
759 return 0;
760 #else
761 fputc('\n', stdout);
762 for (int i = 0 ; i < 8 ; i++) {
763 simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
764 simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
765 simde_uint8x16_t c = simde_test_arm_neon_random_u8x16();
766 simde_uint8x16_t r = simde_vabaq_u8(a, b, c);
767
768 simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
769 simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
770 simde_test_arm_neon_write_u8x16(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
771 simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
772 }
773 return 1;
774 #endif
775 }
776
777 static int
test_simde_vabaq_u16(SIMDE_MUNIT_TEST_ARGS)778 test_simde_vabaq_u16 (SIMDE_MUNIT_TEST_ARGS) {
779 #if 1
780 static const struct {
781 uint16_t a[8];
782 uint16_t b[8];
783 uint16_t c[8];
784 uint16_t r[8];
785 } test_vec[] = {
786 { { UINT16_C(49874), UINT16_C(24806), UINT16_C(42538), UINT16_C(45934), UINT16_C(63320), UINT16_C(22605), UINT16_C(31617), UINT16_C(10829) },
787 { UINT16_C( 5315), UINT16_C(13065), UINT16_C(46052), UINT16_C( 6318), UINT16_C(39015), UINT16_C(30472), UINT16_C(28364), UINT16_C(40630) },
788 { UINT16_C(39984), UINT16_C(23551), UINT16_C(27971), UINT16_C(39694), UINT16_C(23652), UINT16_C(59123), UINT16_C(16599), UINT16_C(39440) },
789 { UINT16_C(19007), UINT16_C(35292), UINT16_C(60619), UINT16_C(13774), UINT16_C(13147), UINT16_C(51256), UINT16_C(43382), UINT16_C(12019) } },
790 { { UINT16_C( 6485), UINT16_C(14797), UINT16_C(31948), UINT16_C(13137), UINT16_C(22804), UINT16_C(57771), UINT16_C(25032), UINT16_C(63615) },
791 { UINT16_C(32510), UINT16_C(16723), UINT16_C(25323), UINT16_C(20700), UINT16_C(53438), UINT16_C(38198), UINT16_C(17936), UINT16_C(25903) },
792 { UINT16_C(64863), UINT16_C(11422), UINT16_C(61305), UINT16_C(36191), UINT16_C( 2633), UINT16_C( 4462), UINT16_C(61036), UINT16_C(27145) },
793 { UINT16_C(38838), UINT16_C(20098), UINT16_C( 2394), UINT16_C(28628), UINT16_C( 8073), UINT16_C(25971), UINT16_C( 2596), UINT16_C(64857) } },
794 { { UINT16_C(23916), UINT16_C(22699), UINT16_C(34751), UINT16_C(32168), UINT16_C(56919), UINT16_C(26642), UINT16_C(16676), UINT16_C(33741) },
795 { UINT16_C(27710), UINT16_C(47023), UINT16_C( 3931), UINT16_C(42053), UINT16_C(45849), UINT16_C(34229), UINT16_C(49057), UINT16_C( 3823) },
796 { UINT16_C(39452), UINT16_C(56166), UINT16_C( 3618), UINT16_C(31064), UINT16_C(27372), UINT16_C( 4321), UINT16_C(44971), UINT16_C(60051) },
797 { UINT16_C(35658), UINT16_C(31842), UINT16_C(35064), UINT16_C(43157), UINT16_C( 9860), UINT16_C(56550), UINT16_C(20762), UINT16_C(24433) } },
798 { { UINT16_C(17179), UINT16_C(30369), UINT16_C(58962), UINT16_C(27419), UINT16_C(53402), UINT16_C(15345), UINT16_C(57487), UINT16_C(43849) },
799 { UINT16_C(44923), UINT16_C(40326), UINT16_C(57021), UINT16_C(43286), UINT16_C(63560), UINT16_C(62649), UINT16_C(19879), UINT16_C(49886) },
800 { UINT16_C(32656), UINT16_C(57912), UINT16_C(21350), UINT16_C( 77), UINT16_C(15908), UINT16_C(45883), UINT16_C(34079), UINT16_C(39519) },
801 { UINT16_C(29446), UINT16_C(47955), UINT16_C(29097), UINT16_C( 5092), UINT16_C(35518), UINT16_C(32111), UINT16_C( 6151), UINT16_C(54216) } },
802 { { UINT16_C(58676), UINT16_C(62007), UINT16_C(19908), UINT16_C( 3227), UINT16_C(21829), UINT16_C(60416), UINT16_C(56994), UINT16_C(12974) },
803 { UINT16_C(59230), UINT16_C(50196), UINT16_C(24890), UINT16_C(24260), UINT16_C(65440), UINT16_C(48914), UINT16_C(29060), UINT16_C(47449) },
804 { UINT16_C(36950), UINT16_C( 6827), UINT16_C(18141), UINT16_C( 8999), UINT16_C(10139), UINT16_C(15631), UINT16_C(48646), UINT16_C(25711) },
805 { UINT16_C(15420), UINT16_C(39840), UINT16_C(26657), UINT16_C(18488), UINT16_C(11594), UINT16_C(28163), UINT16_C(11044), UINT16_C(34712) } },
806 { { UINT16_C(33701), UINT16_C(57128), UINT16_C(60645), UINT16_C(34110), UINT16_C(20715), UINT16_C(28740), UINT16_C(40385), UINT16_C( 5929) },
807 { UINT16_C(54317), UINT16_C( 2610), UINT16_C(22810), UINT16_C(46637), UINT16_C(15744), UINT16_C(34547), UINT16_C(25595), UINT16_C(41194) },
808 { UINT16_C( 4838), UINT16_C(52095), UINT16_C(48638), UINT16_C(59984), UINT16_C(37901), UINT16_C(52826), UINT16_C(33585), UINT16_C(24294) },
809 { UINT16_C(17644), UINT16_C(41077), UINT16_C(20937), UINT16_C(47457), UINT16_C(42872), UINT16_C(47019), UINT16_C(48375), UINT16_C(22829) } },
810 { { UINT16_C( 6231), UINT16_C(29033), UINT16_C(38513), UINT16_C(61735), UINT16_C( 7123), UINT16_C(52856), UINT16_C(25214), UINT16_C(25710) },
811 { UINT16_C(61045), UINT16_C(29488), UINT16_C(32939), UINT16_C(47453), UINT16_C(46869), UINT16_C(18055), UINT16_C(27962), UINT16_C(37285) },
812 { UINT16_C( 3717), UINT16_C(62979), UINT16_C(10916), UINT16_C(30952), UINT16_C(24645), UINT16_C(49990), UINT16_C(46530), UINT16_C(14120) },
813 { UINT16_C(63559), UINT16_C(62524), UINT16_C(60536), UINT16_C(12700), UINT16_C(29347), UINT16_C(19255), UINT16_C(43782), UINT16_C(48875) } },
814 { { UINT16_C(22691), UINT16_C(20139), UINT16_C( 2264), UINT16_C(60679), UINT16_C(36800), UINT16_C(64052), UINT16_C(55804), UINT16_C(33420) },
815 { UINT16_C(36839), UINT16_C(35704), UINT16_C(24761), UINT16_C(65283), UINT16_C(19136), UINT16_C(33730), UINT16_C(60159), UINT16_C(41658) },
816 { UINT16_C(25922), UINT16_C( 7152), UINT16_C(63598), UINT16_C(11784), UINT16_C(15495), UINT16_C(33576), UINT16_C(46101), UINT16_C(64517) },
817 { UINT16_C(33608), UINT16_C(48691), UINT16_C(41101), UINT16_C(48642), UINT16_C(40441), UINT16_C(64206), UINT16_C( 4326), UINT16_C(56279) } }
818 };
819
820 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
821 simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
822 simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b);
823 simde_uint16x8_t c = simde_vld1q_u16(test_vec[i].c);
824 simde_uint16x8_t r = simde_vabaq_u16(a, b, c);
825
826 simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
827 }
828
829 return 0;
830 #else
831 fputc('\n', stdout);
832 for (int i = 0 ; i < 8 ; i++) {
833 simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
834 simde_uint16x8_t b = simde_test_arm_neon_random_u16x8();
835 simde_uint16x8_t c = simde_test_arm_neon_random_u16x8();
836 simde_uint16x8_t r = simde_vabaq_u16(a, b, c);
837
838 simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
839 simde_test_arm_neon_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
840 simde_test_arm_neon_write_u16x8(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
841 simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
842 }
843 return 1;
844 #endif
845 }
846
847 #if !defined(TEST_SIMDE_VABD_NO_TEST_32)
848 static int
test_simde_vabaq_u32(SIMDE_MUNIT_TEST_ARGS)849 test_simde_vabaq_u32 (SIMDE_MUNIT_TEST_ARGS) {
850 #if 1
851 static const struct {
852 uint32_t a[4];
853 uint32_t b[4];
854 uint32_t c[4];
855 uint32_t r[4];
856 } test_vec[] = {
857 { { UINT32_C(4253580867), UINT32_C(2684128222), UINT32_C(3559046869), UINT32_C(3950435497) },
858 { UINT32_C(2953209666), UINT32_C(3873312607), UINT32_C(1634272843), UINT32_C(4267536315) },
859 { UINT32_C(3422283245), UINT32_C(1181415281), UINT32_C(1595641014), UINT32_C(2873790825) },
860 { UINT32_C( 427687150), UINT32_C(1081058252), UINT32_C(3597678698), UINT32_C(1049213691) } },
861 { { UINT32_C(1465602552), UINT32_C(2872916320), UINT32_C(4195133247), UINT32_C( 66677270) },
862 { UINT32_C(3234788431), UINT32_C(2718382572), UINT32_C( 771826373), UINT32_C(2899921843) },
863 { UINT32_C(4228068508), UINT32_C(2913485165), UINT32_C(4272403688), UINT32_C(1845600286) },
864 { UINT32_C(2458882629), UINT32_C(3068018913), UINT32_C(3400743266), UINT32_C(1120998827) } },
865 { { UINT32_C(2167328661), UINT32_C(3458413832), UINT32_C( 201073751), UINT32_C( 213374575) },
866 { UINT32_C(2013837834), UINT32_C(3810898171), UINT32_C(2212613221), UINT32_C( 49406573) },
867 { UINT32_C(3129155762), UINT32_C(2911413845), UINT32_C( 968394186), UINT32_C(1699049307) },
868 { UINT32_C(3282646589), UINT32_C( 62930862), UINT32_C(1445292786), UINT32_C(1863017309) } },
869 { { UINT32_C( 635260457), UINT32_C(1661469438), UINT32_C(1021831887), UINT32_C(2118047948) },
870 { UINT32_C(1312408056), UINT32_C( 838582631), UINT32_C(2708124486), UINT32_C(1258795042) },
871 { UINT32_C(4235257086), UINT32_C(3059775975), UINT32_C( 804407139), UINT32_C( 414068767) },
872 { UINT32_C(3558109487), UINT32_C(3882662782), UINT32_C(2925549234), UINT32_C(2962774223) } },
873 { { UINT32_C(1483139057), UINT32_C(4018758056), UINT32_C( 915469076), UINT32_C(2709624739) },
874 { UINT32_C(1671361148), UINT32_C(3457810027), UINT32_C(1694305093), UINT32_C( 746367803) },
875 { UINT32_C( 998564498), UINT32_C(1462373699), UINT32_C(2760751616), UINT32_C(3460632402) },
876 { UINT32_C(2155935707), UINT32_C(1719227088), UINT32_C(1981915599), UINT32_C(1128922042) } },
877 { { UINT32_C(1815208705), UINT32_C( 641354465), UINT32_C(2425042773), UINT32_C(1975257059) },
878 { UINT32_C( 766525674), UINT32_C(1300617805), UINT32_C(3891335829), UINT32_C( 582301473) },
879 { UINT32_C(4237223450), UINT32_C(2233649200), UINT32_C(3809848576), UINT32_C(2673398197) },
880 { UINT32_C( 990939185), UINT32_C(1574385860), UINT32_C(2506530026), UINT32_C(4066353783) } },
881 { { UINT32_C(1590429969), UINT32_C(2024493539), UINT32_C(2237635940), UINT32_C(4003992788) },
882 { UINT32_C( 719992570), UINT32_C(4289662463), UINT32_C(1877132474), UINT32_C(2785950357) },
883 { UINT32_C( 654629699), UINT32_C(2426384428), UINT32_C( 555155277), UINT32_C( 235912723) },
884 { UINT32_C(1655792840), UINT32_C(3887771574), UINT32_C(3559613137), UINT32_C(2259063126) } },
885 { { UINT32_C(4080597748), UINT32_C(3253921799), UINT32_C(1110561964), UINT32_C(1390952207) },
886 { UINT32_C(1199172890), UINT32_C(3939965341), UINT32_C( 722201880), UINT32_C(2688096939) },
887 { UINT32_C( 462647828), UINT32_C( 115181146), UINT32_C(1766329946), UINT32_C(1757163853) },
888 { UINT32_C( 522155514), UINT32_C(2783738698), UINT32_C(2154690030), UINT32_C(2321885293) } }
889 };
890
891 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
892 simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
893 simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b);
894 simde_uint32x4_t c = simde_vld1q_u32(test_vec[i].c);
895 simde_uint32x4_t r = simde_vabaq_u32(a, b, c);
896
897 simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
898 }
899
900 return 0;
901 #else
902 fputc('\n', stdout);
903 for (int i = 0 ; i < 8 ; i++) {
904 simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
905 simde_uint32x4_t b = simde_test_arm_neon_random_u32x4();
906 simde_uint32x4_t c = simde_test_arm_neon_random_u32x4();
907 simde_uint32x4_t r = simde_vabaq_u32(a, b, c);
908
909 simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
910 simde_test_arm_neon_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
911 simde_test_arm_neon_write_u32x4(2, c, SIMDE_TEST_VEC_POS_MIDDLE);
912 simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
913 }
914 return 1;
915 #endif
916 }
917 #endif
918
919 SIMDE_TEST_FUNC_LIST_BEGIN
920 SIMDE_TEST_FUNC_LIST_ENTRY(vaba_s8)
921 SIMDE_TEST_FUNC_LIST_ENTRY(vaba_s16)
922 SIMDE_TEST_FUNC_LIST_ENTRY(vaba_u8)
923 SIMDE_TEST_FUNC_LIST_ENTRY(vaba_u16)
924 SIMDE_TEST_FUNC_LIST_ENTRY(vaba_u32)
925 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_s8)
926 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_s16)
927 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_u8)
928 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_u16)
929 #if !defined(TEST_SIMDE_VABD_NO_TEST_32)
930 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_s32)
931 SIMDE_TEST_FUNC_LIST_ENTRY(vabaq_u32)
932 #endif
933 SIMDE_TEST_FUNC_LIST_END
934
935 #include "test-neon-footer.h"
936