[AArch64] Fix types for vqdmlals_lane_s32 and vqdmlsls_lane_s32 intrinsics.
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / scalar_intrinsics.c
blob2bd762cdcb86d327fb0ab7fc3d8e4f0d41b81a3e
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -dp" } */
4 #include <arm_neon.h>
6 /* Used to force a variable to a SIMD register. */
7 #define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
8 : "=w"(V1) \
9 : "w"(V1) \
10 : /* No clobbers */);
12 /* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
14 uint64_t
15 test_vaddd_u64 (uint64_t a, uint64_t b)
17 return vaddd_u64 (a, b);
20 int64_t
21 test_vaddd_s64 (int64_t a, int64_t b)
23 return vaddd_s64 (a, b);
26 /* { dg-final { scan-assembler-times "\\tadd\\td\[0-9\]+" 1 } } */
28 int64_t
29 test_vaddd_s64_2 (int64_t a, int64_t b)
31 int64_t res;
32 force_simd (a);
33 force_simd (b);
34 res = vaddd_s64 (a, b);
35 force_simd (res);
36 return res;
39 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
41 uint64_t
42 test_vceqd_s64 (int64_t a, int64_t b)
44 uint64_t res;
45 force_simd (a);
46 force_simd (b);
47 res = vceqd_s64 (a, b);
48 force_simd (res);
49 return res;
52 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
54 uint64_t
55 test_vceqzd_s64 (int64_t a)
57 uint64_t res;
58 force_simd (a);
59 res = vceqzd_s64 (a);
60 force_simd (res);
61 return res;
64 /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
66 uint64_t
67 test_vcged_s64 (int64_t a, int64_t b)
69 uint64_t res;
70 force_simd (a);
71 force_simd (b);
72 res = vcged_s64 (a, b);
73 force_simd (res);
74 return res;
77 uint64_t
78 test_vcled_s64 (int64_t a, int64_t b)
80 uint64_t res;
81 force_simd (a);
82 force_simd (b);
83 res = vcled_s64 (a, b);
84 force_simd (res);
85 return res;
88 /* Idiom recognition will cause this testcase not to generate
89 the expected cmge instruction, so do not check for it. */
91 uint64_t
92 test_vcgezd_s64 (int64_t a)
94 uint64_t res;
95 force_simd (a);
96 res = vcgezd_s64 (a);
97 force_simd (res);
98 return res;
101 /* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
103 uint64_t
104 test_vcged_u64 (uint64_t a, uint64_t b)
106 uint64_t res;
107 force_simd (a);
108 force_simd (b);
109 res = vcged_u64 (a, b);
110 force_simd (res);
111 return res;
114 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
116 uint64_t
117 test_vcgtd_s64 (int64_t a, int64_t b)
119 uint64_t res;
120 force_simd (a);
121 force_simd (b);
122 res = vcgtd_s64 (a, b);
123 force_simd (res);
124 return res;
127 uint64_t
128 test_vcltd_s64 (int64_t a, int64_t b)
130 uint64_t res;
131 force_simd (a);
132 force_simd (b);
133 res = vcltd_s64 (a, b);
134 force_simd (res);
135 return res;
138 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
140 uint64_t
141 test_vcgtzd_s64 (int64_t a)
143 uint64_t res;
144 force_simd (a);
145 res = vcgtzd_s64 (a);
146 force_simd (res);
147 return res;
150 /* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
152 uint64_t
153 test_vcgtd_u64 (uint64_t a, uint64_t b)
155 uint64_t res;
156 force_simd (a);
157 force_simd (b);
158 res = vcgtd_u64 (a, b);
159 force_simd (res);
160 return res;
163 /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
165 uint64_t
166 test_vclezd_s64 (int64_t a)
168 uint64_t res;
169 force_simd (a);
170 res = vclezd_s64 (a);
171 force_simd (res);
172 return res;
175 /* Idiom recognition will cause this testcase not to generate
176 the expected cmlt instruction, so do not check for it. */
178 uint64_t
179 test_vcltzd_s64 (int64_t a)
181 uint64_t res;
182 force_simd (a);
183 res = vcltzd_s64 (a);
184 force_simd (res);
185 return res;
188 /* { dg-final { scan-assembler-times "aarch64_get_lanev16qi" 2 } } */
190 int8x1_t
191 test_vdupb_lane_s8 (int8x16_t a)
193 int8x1_t res;
194 force_simd (a);
195 res = vdupb_laneq_s8 (a, 2);
196 force_simd (res);
197 return res;
200 uint8x1_t
201 test_vdupb_lane_u8 (uint8x16_t a)
203 uint8x1_t res;
204 force_simd (a);
205 res = vdupb_laneq_u8 (a, 2);
206 force_simd (res);
207 return res;
210 /* { dg-final { scan-assembler-times "aarch64_get_lanev8hi" 2 } } */
212 int16x1_t
213 test_vduph_lane_s16 (int16x8_t a)
215 int16x1_t res;
216 force_simd (a);
217 res = vduph_laneq_s16 (a, 2);
218 force_simd (res);
219 return res;
222 uint16x1_t
223 test_vduph_lane_u16 (uint16x8_t a)
225 uint16x1_t res;
226 force_simd (a);
227 res = vduph_laneq_u16 (a, 2);
228 force_simd (res);
229 return res;
232 /* { dg-final { scan-assembler-times "aarch64_get_lanev4si" 2 } } */
234 int32x1_t
235 test_vdups_lane_s32 (int32x4_t a)
237 int32x1_t res;
238 force_simd (a);
239 res = vdups_laneq_s32 (a, 2);
240 force_simd (res);
241 return res;
244 uint32x1_t
245 test_vdups_lane_u32 (uint32x4_t a)
247 uint32x1_t res;
248 force_simd (a);
249 res = vdups_laneq_u32 (a, 2);
250 force_simd (res);
251 return res;
254 /* { dg-final { scan-assembler-times "aarch64_get_lanev2di" 2 } } */
256 int64_t
257 test_vdupd_laneq_s64 (int64x2_t a)
259 int64_t res = vdupd_laneq_s64 (a, 1);
260 force_simd (res);
261 return res;
264 uint64_t
265 test_vdupd_laneq_u64 (uint64x2_t a)
267 uint64_t res = vdupd_laneq_u64 (a, 1);
268 force_simd (res);
269 return res;
272 /* { dg-final { scan-assembler-times "\\tcmtst\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
274 uint64_t
275 test_vtstd_s64 (int64_t a, int64_t b)
277 uint64_t res;
278 force_simd (a);
279 force_simd (b);
280 res = vtstd_s64 (a, b);
281 force_simd (res);
282 return res;
285 uint64_t
286 test_vtstd_u64 (uint64_t a, uint64_t b)
288 uint64_t res;
289 force_simd (a);
290 force_simd (b);
291 res = vtstd_u64 (a, b);
292 force_simd (res);
293 return res;
296 /* { dg-final { scan-assembler-times "\\tfaddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
298 float64_t
299 test_vpaddd_f64 (float64x2_t a)
301 return vpaddd_f64 (a);
304 /* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 2 } } */
306 int64_t
307 test_vpaddd_s64 (int64x2_t a)
309 return vpaddd_s64 (a);
312 uint64_t
313 test_vpaddd_u64 (uint64x2_t a)
315 return vpaddd_u64 (a);
318 /* { dg-final { scan-assembler-times "\\tuqadd\\td\[0-9\]+" 1 } } */
320 uint64_t
321 test_vqaddd_u64 (uint64_t a, uint64_t b)
323 return vqaddd_u64 (a, b);
326 /* { dg-final { scan-assembler-times "\\tuqadd\\ts\[0-9\]+" 1 } } */
328 uint32x1_t
329 test_vqadds_u32 (uint32x1_t a, uint32x1_t b)
331 return vqadds_u32 (a, b);
334 /* { dg-final { scan-assembler-times "\\tuqadd\\th\[0-9\]+" 1 } } */
336 uint16x1_t
337 test_vqaddh_u16 (uint16x1_t a, uint16x1_t b)
339 return vqaddh_u16 (a, b);
342 /* { dg-final { scan-assembler-times "\\tuqadd\\tb\[0-9\]+" 1 } } */
344 uint8x1_t
345 test_vqaddb_u8 (uint8x1_t a, uint8x1_t b)
347 return vqaddb_u8 (a, b);
350 /* { dg-final { scan-assembler-times "\\tsqadd\\td\[0-9\]+" 1 } } */
352 int64_t
353 test_vqaddd_s64 (int64_t a, int64_t b)
355 return vqaddd_s64 (a, b);
358 /* { dg-final { scan-assembler-times "\\tsqadd\\ts\[0-9\]+, s\[0-9\]+" 1 } } */
360 int32x1_t
361 test_vqadds_s32 (int32x1_t a, int32x1_t b)
363 return vqadds_s32 (a, b);
366 /* { dg-final { scan-assembler-times "\\tsqadd\\th\[0-9\]+, h\[0-9\]+" 1 } } */
368 int16x1_t
369 test_vqaddh_s16 (int16x1_t a, int16x1_t b)
371 return vqaddh_s16 (a, b);
374 /* { dg-final { scan-assembler-times "\\tsqadd\\tb\[0-9\]+, b\[0-9\]+" 1 } } */
376 int8x1_t
377 test_vqaddb_s8 (int8x1_t a, int8x1_t b)
379 return vqaddb_s8 (a, b);
382 /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
384 int32x1_t
385 test_vqdmlalh_s16 (int32x1_t a, int16x1_t b, int16x1_t c)
387 return vqdmlalh_s16 (a, b, c);
390 /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
392 int32x1_t
393 test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
395 return vqdmlalh_lane_s16 (a, b, c, 3);
398 /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
400 int64_t
401 test_vqdmlals_s32 (int64_t a, int32x1_t b, int32x1_t c)
403 return vqdmlals_s32 (a, b, c);
406 /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
408 int64_t
409 test_vqdmlals_lane_s32 (int64_t a, int32_t b, int32x2_t c)
411 return vqdmlals_lane_s32 (a, b, c, 1);
414 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
416 int32x1_t
417 test_vqdmlslh_s16 (int32x1_t a, int16x1_t b, int16x1_t c)
419 return vqdmlslh_s16 (a, b, c);
422 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
424 int32x1_t
425 test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
427 return vqdmlslh_lane_s16 (a, b, c, 3);
430 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
432 int64_t
433 test_vqdmlsls_s32 (int64_t a, int32x1_t b, int32x1_t c)
435 return vqdmlsls_s32 (a, b, c);
438 /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
440 int64_t
441 test_vqdmlsls_lane_s32 (int64_t a, int32_t b, int32x2_t c)
443 return vqdmlsls_lane_s32 (a, b, c, 1);
446 /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
448 int16x1_t
449 test_vqdmulhh_s16 (int16x1_t a, int16x1_t b)
451 return vqdmulhh_s16 (a, b);
454 /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
456 int16x1_t
457 test_vqdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
459 return vqdmulhh_lane_s16 (a, b, 3);
462 /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
464 int32x1_t
465 test_vqdmulhs_s32 (int32x1_t a, int32x1_t b)
467 return vqdmulhs_s32 (a, b);
470 /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
472 int32x1_t
473 test_vqdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
475 return vqdmulhs_lane_s32 (a, b, 1);
478 /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
480 int32x1_t
481 test_vqdmullh_s16 (int16x1_t a, int16x1_t b)
483 return vqdmullh_s16 (a, b);
486 /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
488 int32x1_t
489 test_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b)
491 return vqdmullh_lane_s16 (a, b, 3);
494 /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
496 int64_t
497 test_vqdmulls_s32 (int32x1_t a, int32x1_t b)
499 return vqdmulls_s32 (a, b);
502 /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
504 int64x1_t
505 test_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b)
507 return vqdmulls_lane_s32 (a, b, 1);
510 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
512 int16x1_t
513 test_vqrdmulhh_s16 (int16x1_t a, int16x1_t b)
515 return vqrdmulhh_s16 (a, b);
518 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
520 int16x1_t
521 test_vqrdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
523 return vqrdmulhh_lane_s16 (a, b, 3);
526 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
528 int32x1_t
529 test_vqrdmulhs_s32 (int32x1_t a, int32x1_t b)
531 return vqrdmulhs_s32 (a, b);
534 /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
536 int32x1_t
537 test_vqrdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
539 return vqrdmulhs_lane_s32 (a, b, 1);
542 /* { dg-final { scan-assembler-times "\\tsuqadd\\tb\[0-9\]+" 1 } } */
544 int8x1_t
545 test_vuqaddb_s8 (int8x1_t a, int8x1_t b)
547 return vuqaddb_s8 (a, b);
550 /* { dg-final { scan-assembler-times "\\tsuqadd\\th\[0-9\]+" 1 } } */
552 int16x1_t
553 test_vuqaddh_s16 (int16x1_t a, int8x1_t b)
555 return vuqaddh_s16 (a, b);
558 /* { dg-final { scan-assembler-times "\\tsuqadd\\ts\[0-9\]+" 1 } } */
560 int32x1_t
561 test_vuqadds_s32 (int32x1_t a, int8x1_t b)
563 return vuqadds_s32 (a, b);
566 /* { dg-final { scan-assembler-times "\\tsuqadd\\td\[0-9\]+" 1 } } */
568 int64_t
569 test_vuqaddd_s64 (int64_t a, uint64_t b)
571 return vuqaddd_s64 (a, b);
574 /* { dg-final { scan-assembler-times "\\tusqadd\\tb\[0-9\]+" 1 } } */
576 uint8x1_t
577 test_vsqaddb_u8 (uint8x1_t a, int8x1_t b)
579 return vsqaddb_u8 (a, b);
582 /* { dg-final { scan-assembler-times "\\tusqadd\\th\[0-9\]+" 1 } } */
584 uint16x1_t
585 test_vsqaddh_u16 (uint16x1_t a, int8x1_t b)
587 return vsqaddh_u16 (a, b);
590 /* { dg-final { scan-assembler-times "\\tusqadd\\ts\[0-9\]+" 1 } } */
592 uint32x1_t
593 test_vsqadds_u32 (uint32x1_t a, int8x1_t b)
595 return vsqadds_u32 (a, b);
598 /* { dg-final { scan-assembler-times "\\tusqadd\\td\[0-9\]+" 1 } } */
600 uint64_t
601 test_vsqaddd_u64 (uint64_t a, int64_t b)
603 return vsqaddd_u64 (a, b);
606 /* { dg-final { scan-assembler-times "\\tsqabs\\tb\[0-9\]+" 1 } } */
608 int8x1_t
609 test_vqabsb_s8 (int8x1_t a)
611 return vqabsb_s8 (a);
614 /* { dg-final { scan-assembler-times "\\tsqabs\\th\[0-9\]+" 1 } } */
616 int16x1_t
617 test_vqabsh_s16 (int16x1_t a)
619 return vqabsh_s16 (a);
622 /* { dg-final { scan-assembler-times "\\tsqabs\\ts\[0-9\]+" 1 } } */
624 int32x1_t
625 test_vqabss_s32 (int32x1_t a)
627 return vqabss_s32 (a);
630 /* { dg-final { scan-assembler-times "\\tsqneg\\tb\[0-9\]+" 1 } } */
632 int8x1_t
633 test_vqnegb_s8 (int8x1_t a)
635 return vqnegb_s8 (a);
638 /* { dg-final { scan-assembler-times "\\tsqneg\\th\[0-9\]+" 1 } } */
640 int16x1_t
641 test_vqnegh_s16 (int16x1_t a)
643 return vqnegh_s16 (a);
646 /* { dg-final { scan-assembler-times "\\tsqneg\\ts\[0-9\]+" 1 } } */
648 int32x1_t
649 test_vqnegs_s32 (int32x1_t a)
651 return vqnegs_s32 (a);
654 /* { dg-final { scan-assembler-times "\\tsqxtun\\tb\[0-9\]+" 1 } } */
656 int8x1_t
657 test_vqmovunh_s16 (int16x1_t a)
659 return vqmovunh_s16 (a);
662 /* { dg-final { scan-assembler-times "\\tsqxtun\\th\[0-9\]+" 1 } } */
664 int16x1_t
665 test_vqmovuns_s32 (int32x1_t a)
667 return vqmovuns_s32 (a);
670 /* { dg-final { scan-assembler-times "\\tsqxtun\\ts\[0-9\]+" 1 } } */
672 int32x1_t
673 test_vqmovund_s64 (int64_t a)
675 return vqmovund_s64 (a);
678 /* { dg-final { scan-assembler-times "\\tsqxtn\\tb\[0-9\]+" 1 } } */
680 int8x1_t
681 test_vqmovnh_s16 (int16x1_t a)
683 return vqmovnh_s16 (a);
686 /* { dg-final { scan-assembler-times "\\tsqxtn\\th\[0-9\]+" 1 } } */
688 int16x1_t
689 test_vqmovns_s32 (int32x1_t a)
691 return vqmovns_s32 (a);
694 /* { dg-final { scan-assembler-times "\\tsqxtn\\ts\[0-9\]+" 1 } } */
696 int32x1_t
697 test_vqmovnd_s64 (int64_t a)
699 return vqmovnd_s64 (a);
702 /* { dg-final { scan-assembler-times "\\tuqxtn\\tb\[0-9\]+" 1 } } */
704 uint8x1_t
705 test_vqmovnh_u16 (uint16x1_t a)
707 return vqmovnh_u16 (a);
710 /* { dg-final { scan-assembler-times "\\tuqxtn\\th\[0-9\]+" 1 } } */
712 uint16x1_t
713 test_vqmovns_u32 (uint32x1_t a)
715 return vqmovns_u32 (a);
718 /* { dg-final { scan-assembler-times "\\tuqxtn\\ts\[0-9\]+" 1 } } */
720 uint32x1_t
721 test_vqmovnd_u64 (uint64_t a)
723 return vqmovnd_u64 (a);
726 /* { dg-final { scan-assembler-times "\\tsub\\tx\[0-9\]+" 2 } } */
728 uint64_t
729 test_vsubd_u64 (uint64_t a, uint64_t b)
731 return vsubd_u64 (a, b);
734 int64_t
735 test_vsubd_s64 (int64_t a, int64_t b)
737 return vsubd_s64 (a, b);
740 /* { dg-final { scan-assembler-times "\\tsub\\td\[0-9\]+" 1 } } */
742 int64_t
743 test_vsubd_s64_2 (int64_t a, int64_t b)
745 int64_t res;
746 force_simd (a);
747 force_simd (b);
748 res = vsubd_s64 (a, b);
749 force_simd (res);
750 return res;
753 /* { dg-final { scan-assembler-times "\\tuqsub\\td\[0-9\]+" 1 } } */
755 uint64_t
756 test_vqsubd_u64 (uint64_t a, uint64_t b)
758 return vqsubd_u64 (a, b);
761 /* { dg-final { scan-assembler-times "\\tuqsub\\ts\[0-9\]+" 1 } } */
763 uint32x1_t
764 test_vqsubs_u32 (uint32x1_t a, uint32x1_t b)
766 return vqsubs_u32 (a, b);
769 /* { dg-final { scan-assembler-times "\\tuqsub\\th\[0-9\]+" 1 } } */
771 uint16x1_t
772 test_vqsubh_u16 (uint16x1_t a, uint16x1_t b)
774 return vqsubh_u16 (a, b);
777 /* { dg-final { scan-assembler-times "\\tuqsub\\tb\[0-9\]+" 1 } } */
779 uint8x1_t
780 test_vqsubb_u8 (uint8x1_t a, uint8x1_t b)
782 return vqsubb_u8 (a, b);
785 /* { dg-final { scan-assembler-times "\\tsqsub\\td\[0-9\]+" 1 } } */
787 int64_t
788 test_vqsubd_s64 (int64_t a, int64_t b)
790 return vqsubd_s64 (a, b);
793 /* { dg-final { scan-assembler-times "\\tsqsub\\ts\[0-9\]+" 1 } } */
795 int32x1_t
796 test_vqsubs_s32 (int32x1_t a, int32x1_t b)
798 return vqsubs_s32 (a, b);
801 /* { dg-final { scan-assembler-times "\\tsqsub\\th\[0-9\]+" 1 } } */
803 int16x1_t
804 test_vqsubh_s16 (int16x1_t a, int16x1_t b)
806 return vqsubh_s16 (a, b);
809 /* { dg-final { scan-assembler-times "\\tsqsub\\tb\[0-9\]+" 1 } } */
811 int8x1_t
812 test_vqsubb_s8 (int8x1_t a, int8x1_t b)
814 return vqsubb_s8 (a, b);
817 /* { dg-final { scan-assembler-times "\\tsshl\\td\[0-9\]+" 1 } } */
819 int64_t
820 test_vshld_s64 (int64_t a, int64_t b)
822 return vshld_s64 (a, b);
825 /* { dg-final { scan-assembler-times "\\tushl\\td\[0-9\]+" 1 } } */
827 uint64_t
828 test_vshld_u64 (uint64_t a, uint64_t b)
830 return vshld_u64 (a, b);
833 /* { dg-final { scan-assembler-times "\\tsrshl\\td\[0-9\]+" 1 } } */
835 int64_t
836 test_vrshld_s64 (int64_t a, int64_t b)
838 return vrshld_s64 (a, b);
841 /* { dg-final { scan-assembler-times "\\turshl\\td\[0-9\]+" 1 } } */
843 uint64_t
844 test_vrshld_u64 (uint64_t a, int64_t b)
846 return vrshld_u64 (a, b);
849 /* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
850 so we cannot check scan-assembler-times. */
852 /* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
854 int64_t
855 test_vshrd_n_s64 (int64_t a)
857 return vshrd_n_s64 (a, 5);
860 /* { dg-final { scan-assembler-times "\\tlsr\\tx\[0-9\]+" 1 } } */
862 uint64_t
863 test_vshrd_n_u64 (uint64_t a)
865 return vshrd_n_u64 (a, 3);
868 /* { dg-final { scan-assembler-times "\\tssra\\td\[0-9\]+" 1 } } */
870 int64_t
871 test_vsrad_n_s64 (int64_t a, int64_t b)
873 return vsrad_n_s64 (a, b, 2);
876 /* { dg-final { scan-assembler-times "\\tusra\\td\[0-9\]+" 1 } } */
878 uint64_t
879 test_vsrad_n_u64 (uint64_t a, uint64_t b)
881 return vsrad_n_u64 (a, b, 5);
884 /* { dg-final { scan-assembler-times "\\tsrshr\\td\[0-9\]+" 1 } } */
886 int64_t
887 test_vrshrd_n_s64 (int64_t a)
889 return vrshrd_n_s64 (a, 5);
892 /* { dg-final { scan-assembler-times "\\turshr\\td\[0-9\]+" 1 } } */
894 uint64_t
895 test_vrshrd_n_u64 (uint64_t a)
897 return vrshrd_n_u64 (a, 3);
900 /* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */
902 int64_t
903 test_vrsrad_n_s64 (int64_t a, int64_t b)
905 return vrsrad_n_s64 (a, b, 3);
908 /* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */
910 uint64_t
911 test_vrsrad_n_u64 (uint64_t a, uint64_t b)
913 return vrsrad_n_u64 (a, b, 4);
916 /* { dg-final { scan-assembler-times "\\tsqrshl\\tb\[0-9\]+" 1 } } */
918 int8x1_t
919 test_vqrshlb_s8 (int8x1_t a, int8x1_t b)
921 return vqrshlb_s8 (a, b);
924 /* { dg-final { scan-assembler-times "\\tsqrshl\\th\[0-9\]+" 1 } } */
926 int16x1_t
927 test_vqrshlh_s16 (int16x1_t a, int16x1_t b)
929 return vqrshlh_s16 (a, b);
932 /* { dg-final { scan-assembler-times "\\tsqrshl\\ts\[0-9\]+" 1 } } */
934 int32x1_t
935 test_vqrshls_s32 (int32x1_t a, int32x1_t b)
937 return vqrshls_s32 (a, b);
940 /* { dg-final { scan-assembler-times "\\tsqrshl\\td\[0-9\]+" 1 } } */
942 int64_t
943 test_vqrshld_s64 (int64_t a, int64_t b)
945 return vqrshld_s64 (a, b);
948 /* { dg-final { scan-assembler-times "\\tuqrshl\\tb\[0-9\]+" 1 } } */
950 uint8x1_t
951 test_vqrshlb_u8 (uint8x1_t a, uint8x1_t b)
953 return vqrshlb_u8 (a, b);
956 /* { dg-final { scan-assembler-times "\\tuqrshl\\th\[0-9\]+" 1 } } */
958 uint16x1_t
959 test_vqrshlh_u16 (uint16x1_t a, uint16x1_t b)
961 return vqrshlh_u16 (a, b);
964 /* { dg-final { scan-assembler-times "\\tuqrshl\\ts\[0-9\]+" 1 } } */
966 uint32x1_t
967 test_vqrshls_u32 (uint32x1_t a, uint32x1_t b)
969 return vqrshls_u32 (a, b);
972 /* { dg-final { scan-assembler-times "\\tuqrshl\\td\[0-9\]+" 1 } } */
974 uint64_t
975 test_vqrshld_u64 (uint64_t a, uint64_t b)
977 return vqrshld_u64 (a, b);
980 /* { dg-final { scan-assembler-times "\\tsqshlu\\tb\[0-9\]+" 1 } } */
982 int8x1_t
983 test_vqshlub_n_s8 (int8x1_t a)
985 return vqshlub_n_s8 (a, 3);
988 /* { dg-final { scan-assembler-times "\\tsqshlu\\th\[0-9\]+" 1 } } */
990 int16x1_t
991 test_vqshluh_n_s16 (int16x1_t a)
993 return vqshluh_n_s16 (a, 4);
996 /* { dg-final { scan-assembler-times "\\tsqshlu\\ts\[0-9\]+" 1 } } */
998 int32x1_t
999 test_vqshlus_n_s32 (int32x1_t a)
1001 return vqshlus_n_s32 (a, 5);
1004 /* { dg-final { scan-assembler-times "\\tsqshlu\\td\[0-9\]+" 1 } } */
1006 int64_t
1007 test_vqshlud_n_s64 (int64_t a)
1009 return vqshlud_n_s64 (a, 6);
1012 /* { dg-final { scan-assembler-times "\\tsqshl\\tb\[0-9\]+" 2 } } */
1014 int8x1_t
1015 test_vqshlb_s8 (int8x1_t a, int8x1_t b)
1017 return vqshlb_s8 (a, b);
1020 int8x1_t
1021 test_vqshlb_n_s8 (int8x1_t a)
1023 return vqshlb_n_s8 (a, 2);
1026 /* { dg-final { scan-assembler-times "\\tsqshl\\th\[0-9\]+" 2 } } */
1028 int16x1_t
1029 test_vqshlh_s16 (int16x1_t a, int16x1_t b)
1031 return vqshlh_s16 (a, b);
1034 int16x1_t
1035 test_vqshlh_n_s16 (int16x1_t a)
1037 return vqshlh_n_s16 (a, 3);
1040 /* { dg-final { scan-assembler-times "\\tsqshl\\ts\[0-9\]+" 2 } } */
1042 int32x1_t
1043 test_vqshls_s32 (int32x1_t a, int32x1_t b)
1045 return vqshls_s32 (a, b);
1048 int32x1_t
1049 test_vqshls_n_s32 (int32x1_t a)
1051 return vqshls_n_s32 (a, 4);
1054 /* { dg-final { scan-assembler-times "\\tsqshl\\td\[0-9\]+" 2 } } */
1056 int64_t
1057 test_vqshld_s64 (int64_t a, int64_t b)
1059 return vqshld_s64 (a, b);
1062 int64_t
1063 test_vqshld_n_s64 (int64_t a)
1065 return vqshld_n_s64 (a, 5);
1068 /* { dg-final { scan-assembler-times "\\tuqshl\\tb\[0-9\]+" 2 } } */
1070 uint8x1_t
1071 test_vqshlb_u8 (uint8x1_t a, uint8x1_t b)
1073 return vqshlb_u8 (a, b);
1076 uint8x1_t
1077 test_vqshlb_n_u8 (uint8x1_t a)
1079 return vqshlb_n_u8 (a, 2);
1082 /* { dg-final { scan-assembler-times "\\tuqshl\\th\[0-9\]+" 2 } } */
1084 uint16x1_t
1085 test_vqshlh_u16 (uint16x1_t a, uint16x1_t b)
1087 return vqshlh_u16 (a, b);
1090 uint16x1_t
1091 test_vqshlh_n_u16 (uint16x1_t a)
1093 return vqshlh_n_u16 (a, 3);
1096 /* { dg-final { scan-assembler-times "\\tuqshl\\ts\[0-9\]+" 2 } } */
1098 uint32x1_t
1099 test_vqshls_u32 (uint32x1_t a, uint32x1_t b)
1101 return vqshls_u32 (a, b);
1104 uint32x1_t
1105 test_vqshls_n_u32 (uint32x1_t a)
1107 return vqshls_n_u32 (a, 4);
1110 /* { dg-final { scan-assembler-times "\\tuqshl\\td\[0-9\]+" 2 } } */
1112 uint64_t
1113 test_vqshld_u64 (uint64_t a, int64_t b)
1115 return vqshld_u64 (a, b);
1118 uint64_t
1119 test_vqshld_n_u64 (uint64_t a)
1121 return vqshld_n_u64 (a, 5);
1124 /* { dg-final { scan-assembler-times "\\tsqshrun\\tb\[0-9\]+" 1 } } */
1126 int8x1_t
1127 test_vqshrunh_n_s16 (int16x1_t a)
1129 return vqshrunh_n_s16 (a, 2);
1132 /* { dg-final { scan-assembler-times "\\tsqshrun\\th\[0-9\]+" 1 } } */
1134 int16x1_t
1135 test_vqshruns_n_s32 (int32x1_t a)
1137 return vqshruns_n_s32 (a, 3);
1140 /* { dg-final { scan-assembler-times "\\tsqshrun\\ts\[0-9\]+" 1 } } */
1142 int32x1_t
1143 test_vqshrund_n_s64 (int64_t a)
1145 return vqshrund_n_s64 (a, 4);
1148 /* { dg-final { scan-assembler-times "\\tsqrshrun\\tb\[0-9\]+" 1 } } */
1150 int8x1_t
1151 test_vqrshrunh_n_s16 (int16x1_t a)
1153 return vqrshrunh_n_s16 (a, 2);
1156 /* { dg-final { scan-assembler-times "\\tsqrshrun\\th\[0-9\]+" 1 } } */
1158 int16x1_t
1159 test_vqrshruns_n_s32 (int32x1_t a)
1161 return vqrshruns_n_s32 (a, 3);
1164 /* { dg-final { scan-assembler-times "\\tsqrshrun\\ts\[0-9\]+" 1 } } */
1166 int32x1_t
1167 test_vqrshrund_n_s64 (int64_t a)
1169 return vqrshrund_n_s64 (a, 4);
1172 /* { dg-final { scan-assembler-times "\\tsqshrn\\tb\[0-9\]+" 1 } } */
1174 int8x1_t
1175 test_vqshrnh_n_s16 (int16x1_t a)
1177 return vqshrnh_n_s16 (a, 2);
1180 /* { dg-final { scan-assembler-times "\\tsqshrn\\th\[0-9\]+" 1 } } */
1182 int16x1_t
1183 test_vqshrns_n_s32 (int32x1_t a)
1185 return vqshrns_n_s32 (a, 3);
1188 /* { dg-final { scan-assembler-times "\\tsqshrn\\ts\[0-9\]+" 1 } } */
1190 int32x1_t
1191 test_vqshrnd_n_s64 (int64_t a)
1193 return vqshrnd_n_s64 (a, 4);
1196 /* { dg-final { scan-assembler-times "\\tuqshrn\\tb\[0-9\]+" 1 } } */
1198 uint8x1_t
1199 test_vqshrnh_n_u16 (uint16x1_t a)
1201 return vqshrnh_n_u16 (a, 2);
1204 /* { dg-final { scan-assembler-times "\\tuqshrn\\th\[0-9\]+" 1 } } */
1206 uint16x1_t
1207 test_vqshrns_n_u32 (uint32x1_t a)
1209 return vqshrns_n_u32 (a, 3);
1212 /* { dg-final { scan-assembler-times "\\tuqshrn\\ts\[0-9\]+" 1 } } */
1214 uint32x1_t
1215 test_vqshrnd_n_u64 (uint64_t a)
1217 return vqshrnd_n_u64 (a, 4);
1220 /* { dg-final { scan-assembler-times "\\tsqrshrn\\tb\[0-9\]+" 1 } } */
1222 int8x1_t
1223 test_vqrshrnh_n_s16 (int16x1_t a)
1225 return vqrshrnh_n_s16 (a, 2);
1228 /* { dg-final { scan-assembler-times "\\tsqrshrn\\th\[0-9\]+" 1 } } */
1230 int16x1_t
1231 test_vqrshrns_n_s32 (int32x1_t a)
1233 return vqrshrns_n_s32 (a, 3);
1236 /* { dg-final { scan-assembler-times "\\tsqrshrn\\ts\[0-9\]+" 1 } } */
1238 int32x1_t
1239 test_vqrshrnd_n_s64 (int64_t a)
1241 return vqrshrnd_n_s64 (a, 4);
1244 /* { dg-final { scan-assembler-times "\\tuqrshrn\\tb\[0-9\]+" 1 } } */
1246 uint8x1_t
1247 test_vqrshrnh_n_u16 (uint16x1_t a)
1249 return vqrshrnh_n_u16 (a, 2);
1252 /* { dg-final { scan-assembler-times "\\tuqrshrn\\th\[0-9\]+" 1 } } */
1254 uint16x1_t
1255 test_vqrshrns_n_u32 (uint32x1_t a)
1257 return vqrshrns_n_u32 (a, 3);
1260 /* { dg-final { scan-assembler-times "\\tuqrshrn\\ts\[0-9\]+" 1 } } */
1262 uint32x1_t
1263 test_vqrshrnd_n_u64 (uint64_t a)
1265 return vqrshrnd_n_u64 (a, 4);
1268 /* { dg-final { scan-assembler-times "\\tlsl\\tx\[0-9\]+" 2 } } */
1270 int64_t
1271 test_vshld_n_s64 (int64_t a)
1273 return vshld_n_s64 (a, 9);
1276 uint64_t
1277 test_vshdl_n_u64 (uint64_t a)
1279 return vshld_n_u64 (a, 9);
1282 /* { dg-final { scan-assembler-times "\\tsli\\td\[0-9\]+" 2 } } */
1284 int64_t
1285 test_vslid_n_s64 (int64_t a, int64_t b)
1287 return vslid_n_s64 (a, b, 9);
1290 uint64_t
1291 test_vslid_n_u64 (uint64_t a, uint64_t b)
1293 return vslid_n_u64 (a, b, 9);
1296 /* { dg-final { scan-assembler-times "\\tsri\\td\[0-9\]+" 2 } } */
1298 int64_t
1299 test_vsrid_n_s64 (int64_t a, int64_t b)
1301 return vsrid_n_s64 (a, b, 9);
1304 uint64_t
1305 test_vsrid_n_u64 (uint64_t a, uint64_t b)
1307 return vsrid_n_u64 (a, b, 9);