1 /* Test vclz works correctly. */
2 /* { dg-do run } */
3 /* { dg-options "-std=gnu99 -O3 -Wno-div-by-zero --save-temps" } */
4 #include <arm_neon.h>
5
6 extern void abort (void);
7
8 /* Tests in binary should look like:
9 0
10 1
11 10
12 101
13 1010
14 10101
15 etc. */
16
17 #define TEST0 0
18 #define TEST1 0x1
19 #define TEST2 0x2
20 #define TEST3 0x5
21 #define TEST4 0xa
22 #define TEST5 0x15
23 #define TEST6 0x2a
24 #define TEST7 0x55
25 #define TEST8 0xaa
26 #define TEST9 0x155
27 #define TEST10 0x2aa
28 #define TEST11 0x555
29 #define TEST12 0xaaa
30 #define TEST13 0x1555
31 #define TEST14 0x2aaa
32 #define TEST15 0x5555
33 #define TEST16 0xaaaa
34 #define TEST17 0x15555
35 #define TEST18 0x2aaaa
36 #define TEST19 0x55555
37 #define TEST20 0xaaaaa
38 #define TEST21 0x155555
39 #define TEST22 0x2aaaaa
40 #define TEST23 0x555555
41 #define TEST24 0xaaaaaa
42 #define TEST25 0x1555555
43 #define TEST26 0x2aaaaaa
44 #define TEST27 0x5555555
45 #define TEST28 0xaaaaaaa
46 #define TEST29 0x15555555
47 #define TEST30 0x2aaaaaaa
48 #define TEST31 0x55555555
49 #define TEST32 0xaaaaaaaa
50
51 #define INHIB_OPTIMIZATION asm volatile ("" : : : "memory")
52
53 #define CONCAT(a, b) a##b
54 #define CONCAT1(a, b) CONCAT (a, b)
55 #define REG_INFEX64 _
56 #define REG_INFEX128 q_
57 #define SIGNED0 u
58 #define SIGNED1 s
59 #define SIGNED(x) SIGNED##x
60 #define REG_INFEX(reg_len) REG_INFEX##reg_len
61 #define POSTFIX(reg_len, data_len, is_signed) \
62 CONCAT1 (REG_INFEX (reg_len), CONCAT1 (SIGNED (is_signed), data_len))
63 #define DATA_TYPE(data_len) DATA_TYPE_##data_len
64 #define LOAD_INST(reg_len, data_len, is_signed) \
65 CONCAT1 (vld1, POSTFIX (reg_len, data_len, is_signed))
66 #define CLZ_INST(reg_len, data_len, is_signed) \
67 CONCAT1 (vclz, POSTFIX (reg_len, data_len, is_signed))
68
69 #define BUILD_TEST(type, size, lanes) \
70 int __attribute__((noipa,noinline)) \
71 run_test##type##size##x##lanes (int##size##_t* test_set, \
72 int##size##_t* answ_set, \
73 int reg_len, int data_len, \
74 int n) \
75 { \
76 int i; \
77 INHIB_OPTIMIZATION; \
78 int##size##x##lanes##_t a = vld1##type##size (test_set); \
79 int##size##x##lanes##_t b = vld1##type##size (answ_set); \
80 a = vclz##type##size (a); \
81 for (i = 0; i < n; i++){ \
82 if (a [i] != b [i]) \
83 return 1; \
84 } \
85 return 0; \
86 }
87
88 /* unsigned inputs */
89 #define U_BUILD_TEST(type, size, lanes) \
90 int __attribute__((noipa,noinline)) \
91 run_test##type##size##x##lanes (uint##size##_t* test_set, \
92 uint##size##_t* answ_set, \
93 int reg_len, int data_len, \
94 int n) \
95 { \
96 int i; \
97 INHIB_OPTIMIZATION; \
98 uint##size##x##lanes##_t a = vld1##type##size (test_set); \
99 uint##size##x##lanes##_t b = vld1##type##size (answ_set); \
100 a = vclz##type##size (a); \
101 for (i = 0; i < n; i++){ \
102 if (a [i] != b [i]) \
103 return 1; \
104 } \
105 return 0; \
106 }
107
108 BUILD_TEST (_s, 8, 8)
109 BUILD_TEST (_s, 16, 4)
110 BUILD_TEST (_s, 32, 2)
111 BUILD_TEST (q_s, 8, 16)
112 BUILD_TEST (q_s, 16, 8)
113 BUILD_TEST (q_s, 32, 4)
114
115 U_BUILD_TEST (_u, 8, 8)
116 U_BUILD_TEST (_u, 16, 4)
117 U_BUILD_TEST (_u, 32, 2)
118 U_BUILD_TEST (q_u, 8, 16)
119 U_BUILD_TEST (q_u, 16, 8)
120 U_BUILD_TEST (q_u, 32, 4)
121
122 int __attribute__ ((noinline))
123 test_vclz_s8 ()
124 {
125 int8_t test_set0[8] = {
126 TEST0, TEST1, TEST2, TEST3,
127 TEST4, TEST5, TEST6, TEST7
128 };
129 int8_t test_set1[8] = {
130 TEST8, TEST8, TEST8, TEST8,
131 TEST8, TEST8, TEST8, TEST8
132 };
133 int8_t answ_set0[8] = {
134 8, 7, 6, 5,
135 4, 3, 2, 1
136 };
137 int8_t answ_set1[8] = {
138 0, 0, 0, 0,
139 0, 0, 0, 0
140 };
141 int o1 = run_test_s8x8 (test_set0, answ_set0, 64, 8, 8);
142 int o2 = run_test_s8x8 (test_set1, answ_set1, 64, 8, 1);
143
144 return o1||o2;
145 }
146
147 /* Double scan-assembler-times to take account of unsigned functions. */
148 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.8b, v\[0-9\]+\.8b" 2 } } */
149
150 int __attribute__ ((noinline))
151 test_vclz_s16 ()
152 {
153 int16_t test_set0[4] = { TEST0, TEST1, TEST2, TEST3 };
154 int16_t test_set1[4] = { TEST4, TEST5, TEST6, TEST7 };
155 int16_t test_set2[4] = { TEST8, TEST9, TEST10, TEST11 };
156 int16_t test_set3[4] = { TEST12, TEST13, TEST14, TEST15 };
157 int16_t test_set4[4] = { TEST16, TEST16, TEST16, TEST16 };
158
159 int16_t answ_set0[4] = { 16, 15, 14, 13 };
160 int16_t answ_set1[4] = { 12, 11, 10, 9 };
161 int16_t answ_set2[4] = { 8, 7, 6, 5 };
162 int16_t answ_set3[4] = { 4, 3, 2, 1 };
163 int16_t answ_set4[4] = { 0, 0, 0, 0 };
164
165 int o1 = run_test_s16x4 (test_set0, answ_set0, 64, 16, 4);
166 int o2 = run_test_s16x4 (test_set1, answ_set1, 64, 16, 4);
167 int o3 = run_test_s16x4 (test_set2, answ_set2, 64, 16, 4);
168 int o4 = run_test_s16x4 (test_set3, answ_set3, 64, 16, 4);
169 int o5 = run_test_s16x4 (test_set4, answ_set4, 64, 16, 1);
170
171 return o1||o2||o3||o4||o5;
172 }
173
174 /* Double scan-assembler-times to take account of unsigned functions. */
175 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.4h, v\[0-9\]+\.4h" 2} } */
176
177 int __attribute__ ((noinline))
178 test_vclz_s32 ()
179 {
180 int32_t test_set0[2] = { TEST0, TEST1 };
181 int32_t test_set1[2] = { TEST2, TEST3 };
182 int32_t test_set2[2] = { TEST4, TEST5 };
183 int32_t test_set3[2] = { TEST6, TEST7 };
184 int32_t test_set4[2] = { TEST8, TEST9 };
185 int32_t test_set5[2] = { TEST10, TEST11 };
186 int32_t test_set6[2] = { TEST12, TEST13 };
187 int32_t test_set7[2] = { TEST14, TEST15 };
188 int32_t test_set8[2] = { TEST16, TEST17 };
189 int32_t test_set9[2] = { TEST18, TEST19 };
190 int32_t test_set10[2] = { TEST20, TEST21 };
191 int32_t test_set11[2] = { TEST22, TEST23 };
192 int32_t test_set12[2] = { TEST24, TEST25 };
193 int32_t test_set13[2] = { TEST26, TEST27 };
194 int32_t test_set14[2] = { TEST28, TEST29 };
195 int32_t test_set15[2] = { TEST30, TEST31 };
196 int32_t test_set16[2] = { TEST32, TEST32 };
197
198 int32_t answ_set0[2] = { 32, 31 };
199 int32_t answ_set1[2] = { 30, 29 };
200 int32_t answ_set2[2] = { 28, 27 };
201 int32_t answ_set3[2] = { 26, 25 };
202 int32_t answ_set4[2] = { 24, 23 };
203 int32_t answ_set5[2] = { 22, 21 };
204 int32_t answ_set6[2] = { 20, 19 };
205 int32_t answ_set7[2] = { 18, 17 };
206 int32_t answ_set8[2] = { 16, 15 };
207 int32_t answ_set9[2] = { 14, 13 };
208 int32_t answ_set10[2] = { 12, 11 };
209 int32_t answ_set11[2] = { 10, 9 };
210 int32_t answ_set12[2] = { 8, 7 };
211 int32_t answ_set13[2] = { 6, 5 };
212 int32_t answ_set14[2] = { 4, 3 };
213 int32_t answ_set15[2] = { 2, 1 };
214 int32_t answ_set16[2] = { 0, 0 };
215
216 int o1 = run_test_s32x2 (test_set0, answ_set0, 64, 32, 2);
217 int o2 = run_test_s32x2 (test_set1, answ_set1, 64, 32, 2);
218 int o3 = run_test_s32x2 (test_set2, answ_set2, 64, 32, 2);
219 int o4 = run_test_s32x2 (test_set3, answ_set3, 64, 32, 2);
220 int o5 = run_test_s32x2 (test_set4, answ_set4, 64, 32, 2);
221 int o6 = run_test_s32x2 (test_set5, answ_set5, 64, 32, 2);
222 int o7 = run_test_s32x2 (test_set6, answ_set6, 64, 32, 2);
223 int o8 = run_test_s32x2 (test_set7, answ_set7, 64, 32, 2);
224 int o9 = run_test_s32x2 (test_set8, answ_set8, 64, 32, 2);
225 int o10 = run_test_s32x2 (test_set9, answ_set9, 64, 32, 2);
226 int o11 = run_test_s32x2 (test_set10, answ_set10, 64, 32, 2);
227 int o12 = run_test_s32x2 (test_set11, answ_set11, 64, 32, 2);
228 int o13 = run_test_s32x2 (test_set12, answ_set12, 64, 32, 2);
229 int o14 = run_test_s32x2 (test_set13, answ_set13, 64, 32, 2);
230 int o15 = run_test_s32x2 (test_set14, answ_set14, 64, 32, 2);
231 int o16 = run_test_s32x2 (test_set15, answ_set15, 64, 32, 2);
232 int o17 = run_test_s32x2 (test_set16, answ_set16, 64, 32, 1);
233
234 return o1||o2||o3||o4||o5||o6||o7||o8||o9||o10||o11||o12||o13||o14
235 ||o15||o16||o17;
236 }
237
238 /* Double scan-assembler-times to take account of unsigned functions. */
239 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.2s, v\[0-9\]+\.2s" 2 } } */
240
241 int __attribute__ ((noinline))
242 test_vclzq_s8 ()
243 {
244 int8_t test_set0[16] = {
245 TEST0, TEST1, TEST2, TEST3, TEST4, TEST5, TEST6, TEST7,
246 TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8
247 };
248 int8_t answ_set0[16] = {
249 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0
250 };
251 int o1 = run_testq_s8x16 (test_set0, answ_set0, 128, 8, 9);
252 return o1;
253 }
254
255 /* Double scan-assembler-times to take account of unsigned functions. */
256 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.16b, v\[0-9\]+\.16b" 2 } } */
257
258 int __attribute__ ((noinline))
259 test_vclzq_s16 ()
260 {
261 int16_t test_set0[8] = {
262 TEST0, TEST1, TEST2, TEST3, TEST4, TEST5, TEST6, TEST7
263 };
264 int16_t test_set1[8] = {
265 TEST8, TEST9, TEST10, TEST11, TEST12, TEST13, TEST14, TEST15
266 };
267 int16_t test_set2[8] = {
268 TEST16, TEST16, TEST16, TEST16, TEST16, TEST16, TEST16, TEST16
269 };
270
271 int16_t answ_set0[8] = {
272 16, 15, 14, 13, 12, 11, 10, 9
273 };
274 int16_t answ_set1[8] = {
275 8, 7, 6, 5, 4, 3, 2, 1
276 };
277 int16_t answ_set2[8] = {
278 0, 0, 0, 0, 0, 0, 0, 0
279 };
280 int o1 = run_testq_s16x8 (test_set0, answ_set0, 128, 16, 8);
281 int o2 = run_testq_s16x8 (test_set1, answ_set1, 128, 16, 8);
282 int o3 = run_testq_s16x8 (test_set2, answ_set2, 128, 16, 1);
283
284 return o1||o2||o3;
285 }
286
287 /* Double scan-assembler-times to take account of unsigned functions. */
288 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.8h, v\[0-9\]+\.8h" 2 } } */
289
290 int __attribute__ ((noinline))
291 test_vclzq_s32 ()
292 {
293 int32_t test_set0[4] = { TEST0, TEST1, TEST2, TEST3 };
294 int32_t test_set1[4] = { TEST4, TEST5, TEST6, TEST7 };
295 int32_t test_set2[4] = { TEST8, TEST9, TEST10, TEST11 };
296 int32_t test_set3[4] = { TEST12, TEST13, TEST14, TEST15 };
297 int32_t test_set4[4] = { TEST16, TEST17, TEST18, TEST19 };
298 int32_t test_set5[4] = { TEST20, TEST21, TEST22, TEST23 };
299 int32_t test_set6[4] = { TEST24, TEST25, TEST26, TEST27 };
300 int32_t test_set7[4] = { TEST28, TEST29, TEST30, TEST31 };
301 int32_t test_set8[4] = { TEST32, TEST32, TEST32, TEST32 };
302
303 int32_t answ_set0[4] = { 32, 31, 30, 29 };
304 int32_t answ_set1[4] = { 28, 27, 26, 25 };
305 int32_t answ_set2[4] = { 24, 23, 22, 21 };
306 int32_t answ_set3[4] = { 20, 19, 18, 17 };
307 int32_t answ_set4[4] = { 16, 15, 14, 13 };
308 int32_t answ_set5[4] = { 12, 11, 10, 9 };
309 int32_t answ_set6[4] = { 8, 7, 6, 5 };
310 int32_t answ_set7[4] = { 4, 3, 2, 1 };
311 int32_t answ_set8[4] = { 0, 0, 0, 0 };
312
313 int o1 = run_testq_s32x4 (test_set0, answ_set0, 128, 32, 4);
314 int o2 = run_testq_s32x4 (test_set1, answ_set1, 128, 32, 4);
315 int o3 = run_testq_s32x4 (test_set2, answ_set2, 128, 32, 4);
316 int o4 = run_testq_s32x4 (test_set3, answ_set3, 128, 32, 4);
317 int o5 = run_testq_s32x4 (test_set4, answ_set4, 128, 32, 1);
318
319 return o1||o2||o3||o4||o5;
320 }
321
322 /* Double scan-assembler-times to take account of unsigned functions. */
323 /* { dg-final { scan-assembler-times "clz\\tv\[0-9\]+\.4s, v\[0-9\]+\.4s" 2 } } */
324
325 /* Unsigned versions. */
326
327 int __attribute__ ((noinline))
328 test_vclz_u8 ()
329 {
330 uint8_t test_set0[8] = {
331 TEST0, TEST1, TEST2, TEST3, TEST4, TEST5, TEST6, TEST7
332 };
333 uint8_t test_set1[8] = {
334 TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8
335 };
336 uint8_t answ_set0[8] = {
337 8, 7, 6, 5, 4, 3, 2, 1
338 };
339 uint8_t answ_set1[8] = {
340 0, 0, 0, 0, 0, 0, 0, 0
341 };
342
343 int o1 = run_test_u8x8 (test_set0, answ_set0, 64, 8, 8);
344 int o2 = run_test_u8x8 (test_set1, answ_set1, 64, 8, 1);
345
346 return o1||o2;
347 }
348
349 /* ASM scan near test for signed version. */
350
351 int __attribute__ ((noinline))
352 test_vclz_u16 ()
353 {
354 uint16_t test_set0[4] = { TEST0, TEST1, TEST2, TEST3 };
355 uint16_t test_set1[4] = { TEST4, TEST5, TEST6, TEST7 };
356 uint16_t test_set2[4] = { TEST8, TEST9, TEST10, TEST11 };
357 uint16_t test_set3[4] = { TEST12, TEST13, TEST14, TEST15 };
358 uint16_t test_set4[4] = { TEST16, TEST16, TEST16, TEST16 };
359
360 uint16_t answ_set0[4] = { 16, 15, 14, 13 };
361 uint16_t answ_set1[4] = { 12, 11, 10, 9 };
362 uint16_t answ_set2[4] = { 8, 7, 6, 5 };
363 uint16_t answ_set3[4] = { 4, 3, 2, 1 };
364 uint16_t answ_set4[4] = { 0, 0, 0, 0 };
365
366 int o1 = run_test_u16x4 (test_set0, answ_set0, 64, 16, 4);
367 int o2 = run_test_u16x4 (test_set1, answ_set1, 64, 16, 4);
368 int o3 = run_test_u16x4 (test_set2, answ_set2, 64, 16, 4);
369 int o4 = run_test_u16x4 (test_set3, answ_set3, 64, 16, 4);
370 int o5 = run_test_u16x4 (test_set4, answ_set4, 64, 16, 1);
371
372 return o1||o2||o3||o4||o5;
373 }
374
375 /* ASM scan near test for signed version. */
376
377 int __attribute__ ((noinline))
378 test_vclz_u32 ()
379 {
380 uint32_t test_set0[2] = { TEST0, TEST1 };
381 uint32_t test_set1[2] = { TEST2, TEST3 };
382 uint32_t test_set2[2] = { TEST4, TEST5 };
383 uint32_t test_set3[2] = { TEST6, TEST7 };
384 uint32_t test_set4[2] = { TEST8, TEST9 };
385 uint32_t test_set5[2] = { TEST10, TEST11 };
386 uint32_t test_set6[2] = { TEST12, TEST13 };
387 uint32_t test_set7[2] = { TEST14, TEST15 };
388 uint32_t test_set8[2] = { TEST16, TEST17 };
389 uint32_t test_set9[2] = { TEST18, TEST19 };
390 uint32_t test_set10[2] = { TEST20, TEST21 };
391 uint32_t test_set11[2] = { TEST22, TEST23 };
392 uint32_t test_set12[2] = { TEST24, TEST25 };
393 uint32_t test_set13[2] = { TEST26, TEST27 };
394 uint32_t test_set14[2] = { TEST28, TEST29 };
395 uint32_t test_set15[2] = { TEST30, TEST31 };
396 uint32_t test_set16[2] = { TEST32, TEST32 };
397
398 uint32_t answ_set0[2] = { 32, 31 };
399 uint32_t answ_set1[2] = { 30, 29 };
400 uint32_t answ_set2[2] = { 28, 27 };
401 uint32_t answ_set3[2] = { 26, 25 };
402 uint32_t answ_set4[2] = { 24, 23 };
403 uint32_t answ_set5[2] = { 22, 21 };
404 uint32_t answ_set6[2] = { 20, 19 };
405 uint32_t answ_set7[2] = { 18, 17 };
406 uint32_t answ_set8[2] = { 16, 15 };
407 uint32_t answ_set9[2] = { 14, 13 };
408 uint32_t answ_set10[2] = { 12, 11 };
409 uint32_t answ_set11[2] = { 10, 9 };
410 uint32_t answ_set12[2] = { 8, 7 };
411 uint32_t answ_set13[2] = { 6, 5 };
412 uint32_t answ_set14[2] = { 4, 3 };
413 uint32_t answ_set15[2] = { 2, 1 };
414 uint32_t answ_set16[2] = { 0, 0 };
415
416 int o1 = run_test_u32x2 (test_set0, answ_set0, 64, 32, 2);
417 int o2 = run_test_u32x2 (test_set1, answ_set1, 64, 32, 2);
418 int o3 = run_test_u32x2 (test_set2, answ_set2, 64, 32, 2);
419 int o4 = run_test_u32x2 (test_set3, answ_set3, 64, 32, 2);
420 int o5 = run_test_u32x2 (test_set4, answ_set4, 64, 32, 2);
421 int o6 = run_test_u32x2 (test_set5, answ_set5, 64, 32, 2);
422 int o7 = run_test_u32x2 (test_set6, answ_set6, 64, 32, 2);
423 int o8 = run_test_u32x2 (test_set7, answ_set7, 64, 32, 2);
424 int o9 = run_test_u32x2 (test_set8, answ_set8, 64, 32, 2);
425 int o10 = run_test_u32x2 (test_set9, answ_set9, 64, 32, 2);
426 int o11 = run_test_u32x2 (test_set10, answ_set10, 64, 32, 2);
427 int o12 = run_test_u32x2 (test_set11, answ_set11, 64, 32, 2);
428 int o13 = run_test_u32x2 (test_set12, answ_set12, 64, 32, 2);
429 int o14 = run_test_u32x2 (test_set13, answ_set13, 64, 32, 2);
430 int o15 = run_test_u32x2 (test_set14, answ_set14, 64, 32, 2);
431 int o16 = run_test_u32x2 (test_set15, answ_set15, 64, 32, 2);
432 int o17 = run_test_u32x2 (test_set16, answ_set16, 64, 32, 1);
433
434 return o1||o2||o3||o4||o5||o6||o7||o8||o9||o10||o11||o12||o13||o14
435 ||o15||o16||o17;
436 }
437
438 /* ASM scan near test for signed version. */
439
440 int __attribute__ ((noinline))
441 test_vclzq_u8 ()
442 {
443 int i;
444 uint8x16_t a;
445 uint8x16_t b;
446
447 uint8_t test_set0[16] = {
448 TEST0, TEST1, TEST2, TEST3, TEST4, TEST5, TEST6, TEST7,
449 TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8, TEST8
450 };
451 uint8_t answ_set0[16] = {
452 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0
453 };
454 int o1 = run_testq_u8x16 (test_set0, answ_set0, 128, 8, 9);
455
456 return o1;
457 }
458
459 /* ASM scan near test for signed version. */
460
461 int __attribute__ ((noinline))
462 test_vclzq_u16 ()
463 {
464 int i;
465 uint16x8_t a;
466 uint16x8_t b;
467
468 uint16_t test_set0[8] = {
469 TEST0, TEST1, TEST2, TEST3, TEST4, TEST5, TEST6, TEST7
470 };
471 uint16_t test_set1[8] = {
472 TEST8, TEST9, TEST10, TEST11, TEST12, TEST13, TEST14, TEST15
473 };
474 uint16_t test_set2[8] = {
475 TEST16, TEST16, TEST16, TEST16, TEST16, TEST16, TEST16, TEST16
476 };
477
478 uint16_t answ_set0[8] = {
479 16, 15, 14, 13, 12, 11, 10, 9
480 };
481
482 uint16_t answ_set1[8] = {
483 8, 7, 6, 5, 4, 3, 2, 1
484 };
485 uint16_t answ_set2[8] = {
486 0, 0, 0, 0, 0, 0, 0, 0
487 };
488
489 int o1 = run_testq_u16x8 (test_set0, answ_set0, 128, 16, 8);
490 int o2 = run_testq_u16x8 (test_set1, answ_set1, 128, 16, 8);
491 int o3 = run_testq_u16x8 (test_set2, answ_set2, 128, 16, 1);
492
493 return o1||o2||o3;
494 }
495
496 /* ASM scan near test for signed version. */
497
498 int __attribute__ ((noinline))
499 test_vclzq_u32 ()
500 {
501 uint32_t test_set0[4] = { TEST0, TEST1, TEST2, TEST3 };
502 uint32_t test_set1[4] = { TEST4, TEST5, TEST6, TEST7 };
503 uint32_t test_set2[4] = { TEST8, TEST9, TEST10, TEST11 };
504 uint32_t test_set3[4] = { TEST12, TEST13, TEST14, TEST15 };
505 uint32_t test_set4[4] = { TEST16, TEST17, TEST18, TEST19 };
506 uint32_t test_set5[4] = { TEST20, TEST21, TEST22, TEST23 };
507 uint32_t test_set6[4] = { TEST24, TEST25, TEST26, TEST27 };
508 uint32_t test_set7[4] = { TEST28, TEST29, TEST30, TEST31 };
509 uint32_t test_set8[4] = { TEST32, TEST32, TEST32, TEST32 };
510
511 uint32_t answ_set0[4] = { 32, 31, 30, 29 };
512 uint32_t answ_set1[4] = { 28, 27, 26, 25 };
513 uint32_t answ_set2[4] = { 24, 23, 22, 21 };
514 uint32_t answ_set3[4] = { 20, 19, 18, 17 };
515 uint32_t answ_set4[4] = { 16, 15, 14, 13 };
516 uint32_t answ_set5[4] = { 12, 11, 10, 9 };
517 uint32_t answ_set6[4] = { 8, 7, 6, 5 };
518 uint32_t answ_set7[4] = { 4, 3, 2, 1 };
519 uint32_t answ_set8[4] = { 0, 0, 0, 0 };
520
521 int o1 = run_testq_u32x4 (test_set0, answ_set0, 128, 32, 4);
522 int o2 = run_testq_u32x4 (test_set1, answ_set1, 128, 32, 4);
523 int o3 = run_testq_u32x4 (test_set2, answ_set2, 128, 32, 4);
524 int o4 = run_testq_u32x4 (test_set3, answ_set3, 128, 32, 4);
525 int o5 = run_testq_u32x4 (test_set4, answ_set4, 128, 32, 1);
526
527 return o1||o2||o3||o4||o5;
528 }
529
530 /* ASM scan near test for signed version. */
531
532 int
533 main (int argc, char **argv)
534 {
535
536 if (test_vclz_s8 ())
537 abort ();
538
539 if (test_vclz_s16 ())
540 abort ();
541
542 if (test_vclz_s32 ())
543 abort ();
544
545 if (test_vclzq_s8 ())
546 abort ();
547
548 if (test_vclzq_s16 ())
549 abort ();
550
551 if (test_vclzq_s32 ())
552 abort ();
553
554 if (test_vclz_u8 ())
555 abort ();
556
557 if (test_vclz_u16 ())
558 abort ();
559
560 if (test_vclz_u32 ())
561 abort ();
562
563 if (test_vclzq_u8 ())
564 abort ();
565
566 if (test_vclzq_u16 ())
567 abort ();
568
569 if (test_vclzq_u32 ())
570 abort ();
571
572 return 0;
573 }
574