Update ChangeLog and version files for release
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / singleton_intrinsics_1.c
blob4a0934b01f9442b7f1324a1f4528d45022daf9b8
1 /* { dg-do assemble } */
2 /* { dg-options "-O2 -dp --save-temps" } */
4 /* Test the [u]int64x1_t intrinsics. */
6 #include <arm_neon.h>
8 /* { dg-final { scan-assembler-times "\\tadd\\td\[0-9\]+" 2 } } */
10 uint64x1_t
11 test_vadd_u64 (uint64x1_t a, uint64x1_t b)
13 return vadd_u64 (a, b);
16 int64x1_t
17 test_vadd_s64 (int64x1_t a, int64x1_t b)
19 return vadd_s64 (a, b);
22 /* { dg-final { scan-assembler-times "\\tabs\\td\[0-9\]+, d\[0-9\]+" 1 } } */
24 int64x1_t
25 test_vabs_s64 (int64x1_t a)
27 return vabs_s64 (a);
30 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
32 uint64x1_t
33 test_vceq_s64 (int64x1_t a, int64x1_t b)
35 return vceq_s64 (a, b);
38 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
40 uint64x1_t
41 test_vceqz_s64 (int64x1_t a)
43 return vceqz_s64 (a);
46 /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
48 uint64x1_t
49 test_vcge_s64 (int64x1_t a, int64x1_t b)
51 return vcge_s64 (a, b);
54 uint64x1_t
55 test_vcle_s64 (int64x1_t a, int64x1_t b)
57 return vcle_s64 (a, b);
60 /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
62 uint64x1_t
63 test_vcgez_s64 (int64x1_t a)
65 return vcgez_s64 (a);
68 /* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
70 uint64x1_t
71 test_vcge_u64 (uint64x1_t a, uint64x1_t b)
73 return vcge_u64 (a, b);
76 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
78 uint64x1_t
79 test_vcgt_s64 (int64x1_t a, int64x1_t b)
81 return vcgt_s64 (a, b);
84 uint64x1_t
85 test_vclt_s64 (int64x1_t a, int64x1_t b)
87 return vclt_s64 (a, b);
90 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
92 uint64x1_t
93 test_vcgtz_s64 (int64x1_t a)
95 return vcgtz_s64 (a);
98 /* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
100 uint64x1_t
101 test_vcgt_u64 (uint64x1_t a, uint64x1_t b)
103 return vcgt_u64 (a, b);
106 /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
108 uint64x1_t
109 test_vclez_s64 (int64x1_t a)
111 return vclez_s64 (a);
114 /* Compiling with "-dp" outputs the name of each .md pattern into the assembler.
115 This is what we look for here. */
116 /* { dg-final { scan-assembler-times "aarch64_get_lanev2di" 2 } } */
118 int64x1_t
119 test_vdup_laneq_s64 (int64x2_t a)
121 return vdup_laneq_s64 (a, 1);
124 uint64x1_t
125 test_vdup_laneq_u64 (uint64x2_t a)
127 return vdup_laneq_u64 (a, 1);
130 /* { dg-final { scan-assembler-times "\\tcmtst\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
132 uint64x1_t
133 test_vtst_s64 (int64x1_t a, int64x1_t b)
135 return vtst_s64 (a, b);
138 uint64x1_t
139 test_vtst_u64 (uint64x1_t a, uint64x1_t b)
141 return vtst_u64 (a, b);
144 /* { dg-final { scan-assembler-times "\\tuqadd\\td\[0-9\]+" 1 } } */
146 uint64x1_t
147 test_vqadd_u64 (uint64x1_t a, uint64x1_t b)
149 return vqadd_u64 (a, b);
152 /* { dg-final { scan-assembler-times "\\tsqadd\\td\[0-9\]+" 1 } } */
154 int64x1_t
155 test_vqadd_s64 (int64x1_t a, int64x1_t b)
157 return vqadd_s64 (a, b);
160 /* { dg-final { scan-assembler-times "\\tsuqadd\\td\[0-9\]+" 1 } } */
162 int64x1_t
163 test_vuqadd_s64 (int64x1_t a, uint64x1_t b)
165 return vuqadd_s64 (a, b);
168 /* { dg-final { scan-assembler-times "\\tusqadd\\td\[0-9\]+" 1 } } */
170 uint64x1_t
171 test_vsqadd_u64 (uint64x1_t a, int64x1_t b)
173 return vsqadd_u64 (a, b);
176 /* { dg-final { scan-assembler-times "\\tsub\\td\[0-9\]+" 2 } } */
178 uint64x1_t
179 test_vsub_u64 (uint64x1_t a, uint64x1_t b)
181 return vsub_u64 (a, b);
184 int64x1_t
185 test_vsub_s64 (int64x1_t a, int64x1_t b)
187 return vsub_s64 (a, b);
190 /* { dg-final { scan-assembler-times "\\tuqsub\\td\[0-9\]+" 1 } } */
192 uint64x1_t
193 test_vqsub_u64 (uint64x1_t a, uint64x1_t b)
195 return vqsub_u64 (a, b);
198 /* { dg-final { scan-assembler-times "\\tsqsub\\td\[0-9\]+" 1 } } */
200 int64x1_t
201 test_vqsub_s64 (int64x1_t a, int64x1_t b)
203 return vqsub_s64 (a, b);
206 /* { dg-final { scan-assembler-times "\\tsshl\\td\[0-9\]+" 1 } } */
208 int64x1_t
209 test_vshl_s64 (int64x1_t a, int64x1_t b)
211 return vshl_s64 (a, b);
214 /* { dg-final { scan-assembler-times "\\tushl\\td\[0-9\]+" 1 } } */
216 uint64x1_t
217 test_vshl_u64 (uint64x1_t a, int64x1_t b)
219 return vshl_u64 (a, b);
222 /* { dg-final { scan-assembler-times "\\tsrshl\\td\[0-9\]+" 1 } } */
224 int64x1_t
225 test_vrshl_s64 (int64x1_t a, int64x1_t b)
227 return vrshl_s64 (a, b);
230 /* { dg-final { scan-assembler-times "\\turshl\\td\[0-9\]+" 1 } } */
232 uint64x1_t
233 test_vrshl_u64 (uint64x1_t a, int64x1_t b)
235 return vrshl_u64 (a, b);
238 /* For int64x1_t, sshr...#63 is output instead of the equivalent cmlt...#0. */
239 /* { dg-final { scan-assembler-times "\\tsshr\\td\[0-9\]+" 2 } } */
241 int64x1_t
242 test_vshr_n_s64 (int64x1_t a)
244 return vshr_n_s64 (a, 5);
247 uint64x1_t
248 test_vcltz_s64 (int64x1_t a)
250 return vcltz_s64 (a);
253 /* { dg-final { scan-assembler-times "\\tushr\\td\[0-9\]+" 1 } } */
255 uint64x1_t
256 test_vshr_n_u64 (uint64x1_t a)
258 return vshr_n_u64 (a, 3);
261 /* { dg-final { scan-assembler-times "\\tssra\\td\[0-9\]+" 1 } } */
263 int64x1_t
264 test_vsra_n_s64 (int64x1_t a, int64x1_t b)
266 return vsra_n_s64 (a, b, 2);
269 /* { dg-final { scan-assembler-times "\\tusra\\td\[0-9\]+" 1 } } */
271 uint64x1_t
272 test_vsra_n_u64 (uint64x1_t a, uint64x1_t b)
274 return vsra_n_u64 (a, b, 5);
277 /* { dg-final { scan-assembler-times "\\tsrshr\\td\[0-9\]+" 1 } } */
279 int64x1_t
280 test_vrshr_n_s64 (int64x1_t a)
282 return vrshr_n_s64 (a, 5);
285 /* { dg-final { scan-assembler-times "\\turshr\\td\[0-9\]+" 1 } } */
287 uint64x1_t
288 test_vrshr_n_u64 (uint64x1_t a)
290 return vrshr_n_u64 (a, 3);
293 /* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */
295 int64x1_t
296 test_vrsra_n_s64 (int64x1_t a, int64x1_t b)
298 return vrsra_n_s64 (a, b, 3);
301 /* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */
303 uint64x1_t
304 test_vrsra_n_u64 (uint64x1_t a, uint64x1_t b)
306 return vrsra_n_u64 (a, b, 4);
309 /* { dg-final { scan-assembler-times "\\tsqrshl\\td\[0-9\]+" 1 } } */
311 int64x1_t
312 test_vqrshl_s64 (int64x1_t a, int64x1_t b)
314 return vqrshl_s64 (a, b);
317 /* { dg-final { scan-assembler-times "\\tuqrshl\\td\[0-9\]+" 1 } } */
319 uint64x1_t
320 test_vqrshl_u64 (uint64x1_t a, int64x1_t b)
322 return vqrshl_u64 (a, b);
325 /* { dg-final { scan-assembler-times "\\tsqshlu\\td\[0-9\]+" 1 } } */
327 uint64x1_t
328 test_vqshlu_n_s64 (int64x1_t a)
330 return vqshlu_n_s64 (a, 6);
333 /* { dg-final { scan-assembler-times "\\tsqshl\\td\[0-9\]+" 2 } } */
335 int64x1_t
336 test_vqshl_s64 (int64x1_t a, int64x1_t b)
338 return vqshl_s64 (a, b);
341 int64x1_t
342 test_vqshl_n_s64 (int64x1_t a)
344 return vqshl_n_s64 (a, 5);
347 /* { dg-final { scan-assembler-times "\\tuqshl\\td\[0-9\]+" 2 } } */
349 uint64x1_t
350 test_vqshl_u64 (uint64x1_t a, int64x1_t b)
352 return vqshl_u64 (a, b);
355 uint64x1_t
356 test_vqshl_n_u64 (uint64x1_t a)
358 return vqshl_n_u64 (a, 5);
361 /* { dg-final { scan-assembler-times "\\tshl\\td\[0-9\]+" 2 } } */
363 int64x1_t
364 test_vshl_n_s64 (int64x1_t a)
366 return vshl_n_s64 (a, 9);
369 uint64x1_t
370 test_vshl_n_u64 (uint64x1_t a)
372 return vshl_n_u64 (a, 9);
375 /* { dg-final { scan-assembler-times "\\tsli\\td\[0-9\]+" 2 } } */
377 int64x1_t
378 test_vsli_n_s64 (int64x1_t a, int64x1_t b)
380 return vsli_n_s64 (a, b, 9);
383 uint64x1_t
384 test_vsli_n_u64 (uint64x1_t a, uint64x1_t b)
386 return vsli_n_u64 (a, b, 9);
389 /* { dg-final { scan-assembler-times "\\tsri\\td\[0-9\]+" 2 } } */
391 int64x1_t
392 test_vsri_n_s64 (int64x1_t a, int64x1_t b)
394 return vsri_n_s64 (a, b, 9);
397 uint64x1_t
398 test_vsri_n_u64 (uint64x1_t a, uint64x1_t b)
400 return vsri_n_u64 (a, b, 9);
403 /* { dg-final { cleanup-saved-temps } } */