*** empty log message ***
[deliverable/binutils-gdb.git] / gas / testsuite / gas / arm / neon-cov.s
CommitLineData
edd40341
JB
1@ Neon tests. Basic bitfield tests, using zero for as many registers/fields as
2@ possible, but without causing instructions to be badly-formed.
3
4 .arm
5 .syntax unified
6 .text
7
8 .macro regs3_1 op opq vtype
9 \op\vtype q0,q0,q0
10 \opq\vtype q0,q0,q0
11 \op\vtype d0,d0,d0
12 .endm
13
14 .macro dregs3_1 op vtype
15 \op\vtype d0,d0,d0
16 .endm
17
18 .macro regn3_1 op operand2 vtype
19 \op\vtype d0,q0,\operand2
20 .endm
21
22 .macro regl3_1 op operand2 vtype
23 \op\vtype q0,d0,\operand2
24 .endm
25
26 .macro regw3_1 op operand2 vtype
27 \op\vtype q0,q0,\operand2
28 .endm
29
30 .macro regs2_1 op opq vtype
31 \op\vtype q0,q0
32 \opq\vtype q0,q0
33 \op\vtype d0,d0
34 .endm
35
36 .macro regs3_su_32 op opq
37 regs3_1 \op \opq .s8
38 regs3_1 \op \opq .s16
39 regs3_1 \op \opq .s32
40 regs3_1 \op \opq .u8
41 regs3_1 \op \opq .u16
42 regs3_1 \op \opq .u32
43 .endm
44
45 regs3_su_32 vaba vabaq
46 regs3_su_32 vhadd vhaddq
47 regs3_su_32 vrhadd vrhaddq
48 regs3_su_32 vhsub vhsubq
49
50 .macro regs3_su_64 op opq
51 regs3_1 \op \opq .s8
52 regs3_1 \op \opq .s16
53 regs3_1 \op \opq .s32
54 regs3_1 \op \opq .s64
55 regs3_1 \op \opq .u8
56 regs3_1 \op \opq .u16
57 regs3_1 \op \opq .u32
58 regs3_1 \op \opq .u64
59 .endm
60
61 regs3_su_64 vqadd vqaddq
62 regs3_su_64 vqsub vqsubq
63 regs3_su_64 vrshl vrshlq
64 regs3_su_64 vqrshl vqrshlq
65
66 regs3_su_64 vshl vshlq
67 regs3_su_64 vqshl vqshlq
68
69 .macro regs2i_1 op opq imm vtype
70 \op\vtype q0,q0,\imm
71 \opq\vtype q0,q0,\imm
72 \op\vtype d0,d0,\imm
73 .endm
74
75 .macro regs2i_su_64 op opq imm
76 regs2i_1 \op \opq \imm .s8
77 regs2i_1 \op \opq \imm .s16
78 regs2i_1 \op \opq \imm .s32
79 regs2i_1 \op \opq \imm .s64
80 regs2i_1 \op \opq \imm .u8
81 regs2i_1 \op \opq \imm .u16
82 regs2i_1 \op \opq \imm .u32
83 regs2i_1 \op \opq \imm .u64
84 .endm
85
86 .macro regs2i_i_64 op opq imm
87 regs2i_1 \op \opq \imm .i8
88 regs2i_1 \op \opq \imm .i16
89 regs2i_1 \op \opq \imm .i32
428e3f1f
PB
90 regs2i_1 \op \opq \imm .s32
91 regs2i_1 \op \opq \imm .u32
edd40341
JB
92 regs2i_1 \op \opq \imm .i64
93 .endm
94
95 regs2i_i_64 vshl vshlq 0
96 regs2i_su_64 vqshl vqshlq 0
97
98 .macro regs3_ntyp op opq
99 regs3_1 \op \opq .8
100 .endm
101
102 regs3_ntyp vand vandq
103 regs3_ntyp vbic vbicq
104 regs3_ntyp vorr vorrq
105 regs3_ntyp vorn vornq
106 regs3_ntyp veor veorq
107
108 .macro logic_imm_1 op opq imm vtype
109 \op\vtype q0,\imm
110 \opq\vtype q0,\imm
111 \op\vtype d0,\imm
112 .endm
113
114 .macro logic_imm op opq
115 logic_imm_1 \op \opq 0x000000ff .i32
428e3f1f
PB
116 logic_imm_1 \op \opq 0x000000ff .s32
117 logic_imm_1 \op \opq 0x000000ff .u32
edd40341
JB
118 logic_imm_1 \op \opq 0x0000ff00 .i32
119 logic_imm_1 \op \opq 0x00ff0000 .i32
120 logic_imm_1 \op \opq 0xff000000 .i32
121 logic_imm_1 \op \opq 0x00ff .i16
122 logic_imm_1 \op \opq 0xff00 .i16
123 .endm
124
125 logic_imm vbic vbicq
126 logic_imm vorr vorrq
127
128 .macro logic_inv_imm op opq
129 logic_imm_1 \op \opq 0xffffff00 .i32
428e3f1f
PB
130 logic_imm_1 \op \opq 0xffffff00 .s32
131 logic_imm_1 \op \opq 0xffffff00 .u32
edd40341
JB
132 logic_imm_1 \op \opq 0xffff00ff .i32
133 logic_imm_1 \op \opq 0xff00ffff .i32
134 logic_imm_1 \op \opq 0x00ffffff .i32
135 logic_imm_1 \op \opq 0xff00 .i16
136 logic_imm_1 \op \opq 0x00ff .i16
137 .endm
138
139 logic_inv_imm vand vandq
140 logic_inv_imm vorn vornq
141
142 regs3_ntyp vbsl vbslq
143 regs3_ntyp vbit vbitq
144 regs3_ntyp vbif vbifq
145
146 .macro regs3_suf_32 op opq
147 regs3_1 \op \opq .s8
148 regs3_1 \op \opq .s16
149 regs3_1 \op \opq .s32
150 regs3_1 \op \opq .u8
151 regs3_1 \op \opq .u16
152 regs3_1 \op \opq .u32
153 regs3_1 \op \opq .f32
154 .endm
155
156 .macro regs3_if_32 op opq
157 regs3_1 \op \opq .i8
158 regs3_1 \op \opq .i16
159 regs3_1 \op \opq .i32
428e3f1f
PB
160 regs3_1 \op \opq .s32
161 regs3_1 \op \opq .u32
edd40341
JB
162 regs3_1 \op \opq .f32
163 .endm
164
165 regs3_suf_32 vabd vabdq
166 regs3_suf_32 vmax vmaxq
167 regs3_suf_32 vmin vminq
168
169 regs3_suf_32 vcge vcgeq
170 regs3_suf_32 vcgt vcgtq
171 regs3_suf_32 vcle vcleq
172 regs3_suf_32 vclt vcltq
173
174 regs3_if_32 vceq vceqq
175
176 .macro regs2i_sf_0 op opq
177 regs2i_1 \op \opq 0 .s8
178 regs2i_1 \op \opq 0 .s16
179 regs2i_1 \op \opq 0 .s32
180 regs2i_1 \op \opq 0 .f32
181 .endm
182
183 regs2i_sf_0 vcge vcgeq
184 regs2i_sf_0 vcgt vcgtq
185 regs2i_sf_0 vcle vcleq
186 regs2i_sf_0 vclt vcltq
187
188 .macro regs2i_if_0 op opq
189 regs2i_1 \op \opq 0 .i8
190 regs2i_1 \op \opq 0 .i16
191 regs2i_1 \op \opq 0 .i32
428e3f1f
PB
192 regs2i_1 \op \opq 0 .s32
193 regs2i_1 \op \opq 0 .u32
edd40341
JB
194 regs2i_1 \op \opq 0 .f32
195 .endm
196
197 regs2i_if_0 vceq vceqq
198
199 .macro dregs3_suf_32 op
200 dregs3_1 \op .s8
201 dregs3_1 \op .s16
202 dregs3_1 \op .s32
203 dregs3_1 \op .u8
204 dregs3_1 \op .u16
205 dregs3_1 \op .u32
206 dregs3_1 \op .f32
207 .endm
208
209 dregs3_suf_32 vpmax
210 dregs3_suf_32 vpmin
211
212 .macro sregs3_1 op opq vtype
213 \op\vtype q0,q0,q0
214 \opq\vtype q0,q0,q0
215 \op\vtype d0,d0,d0
216 .endm
217
218 .macro sclr21_1 op opq vtype
219 \op\vtype q0,q0,d0[0]
220 \opq\vtype q0,q0,d0[0]
221 \op\vtype d0,d0,d0[0]
222 .endm
223
224 .macro mul_incl_scalar op opq
225 regs3_1 \op \opq .i8
226 regs3_1 \op \opq .i16
227 regs3_1 \op \opq .i32
428e3f1f
PB
228 regs3_1 \op \opq .s32
229 regs3_1 \op \opq .u32
edd40341
JB
230 regs3_1 \op \opq .f32
231 sclr21_1 \op \opq .i16
232 sclr21_1 \op \opq .i32
428e3f1f
PB
233 sclr21_1 \op \opq .s32
234 sclr21_1 \op \opq .u32
edd40341
JB
235 sclr21_1 \op \opq .f32
236 .endm
237
238 mul_incl_scalar vmla vmlaq
239 mul_incl_scalar vmls vmlsq
240
241 .macro dregs3_if_32 op
242 dregs3_1 \op .i8
243 dregs3_1 \op .i16
244 dregs3_1 \op .i32
428e3f1f
PB
245 dregs3_1 \op .s32
246 dregs3_1 \op .u32
edd40341
JB
247 dregs3_1 \op .f32
248 .endm
249
250 dregs3_if_32 vpadd
251
252 .macro regs3_if_64 op opq
253 regs3_1 \op \opq .i8
254 regs3_1 \op \opq .i16
255 regs3_1 \op \opq .i32
428e3f1f
PB
256 regs3_1 \op \opq .s32
257 regs3_1 \op \opq .u32
edd40341
JB
258 regs3_1 \op \opq .i64
259 regs3_1 \op \opq .f32
260 .endm
261
262 regs3_if_64 vadd vaddq
263 regs3_if_64 vsub vsubq
264
265 .macro regs3_sz_32 op opq
266 regs3_1 \op \opq .8
267 regs3_1 \op \opq .16
268 regs3_1 \op \opq .32
269 .endm
270
271 regs3_sz_32 vtst vtstq
272
273 .macro regs3_ifp_32 op opq
274 regs3_1 \op \opq .i8
275 regs3_1 \op \opq .i16
276 regs3_1 \op \opq .i32
428e3f1f
PB
277 regs3_1 \op \opq .s32
278 regs3_1 \op \opq .u32
edd40341
JB
279 regs3_1 \op \opq .f32
280 regs3_1 \op \opq .p8
281 .endm
282
283 regs3_ifp_32 vmul vmulq
284
285 .macro dqmulhs op opq
286 regs3_1 \op \opq .s16
287 regs3_1 \op \opq .s32
288 sclr21_1 \op \opq .s16
289 sclr21_1 \op \opq .s32
290 .endm
291
292 dqmulhs vqdmulh vqdmulhq
293 dqmulhs vqrdmulh vqrdmulhq
294
295 regs3_1 vacge vacgeq .f32
296 regs3_1 vacgt vacgtq .f32
297 regs3_1 vacle vacleq .f32
298 regs3_1 vaclt vacltq .f32
299 regs3_1 vrecps vrecpsq .f32
300 regs3_1 vrsqrts vrsqrtsq .f32
301
302 .macro regs2_sf_32 op opq
303 regs2_1 \op \opq .s8
304 regs2_1 \op \opq .s16
305 regs2_1 \op \opq .s32
306 regs2_1 \op \opq .f32
307 .endm
308
309 regs2_sf_32 vabs vabsq
310 regs2_sf_32 vneg vnegq
311
312 .macro rshift_imm op opq
313 regs2i_1 \op \opq 7 .s8
314 regs2i_1 \op \opq 15 .s16
315 regs2i_1 \op \opq 31 .s32
316 regs2i_1 \op \opq 63 .s64
317 regs2i_1 \op \opq 7 .u8
318 regs2i_1 \op \opq 15 .u16
319 regs2i_1 \op \opq 31 .u32
320 regs2i_1 \op \opq 63 .u64
321 .endm
322
323 rshift_imm vshr vshrq
324 rshift_imm vrshr vrshrq
325 rshift_imm vsra vsraq
326 rshift_imm vrsra vrsraq
327
328 regs2i_1 vsli vsliq 0 .8
329 regs2i_1 vsli vsliq 0 .16
330 regs2i_1 vsli vsliq 0 .32
331 regs2i_1 vsli vsliq 0 .64
332
333 regs2i_1 vsri vsriq 7 .8
334 regs2i_1 vsri vsriq 15 .16
335 regs2i_1 vsri vsriq 31 .32
336 regs2i_1 vsri vsriq 63 .64
337
338 regs2i_1 vqshlu vqshluq 0 .s8
339 regs2i_1 vqshlu vqshluq 0 .s16
340 regs2i_1 vqshlu vqshluq 0 .s32
341 regs2i_1 vqshlu vqshluq 0 .s64
342
343 .macro qrshift_imm op
344 regn3_1 \op 7 .s16
345 regn3_1 \op 15 .s32
346 regn3_1 \op 31 .s64
347 regn3_1 \op 7 .u16
348 regn3_1 \op 15 .u32
349 regn3_1 \op 31 .u64
350 .endm
351
352 .macro qrshiftu_imm op
353 regn3_1 \op 7 .s16
354 regn3_1 \op 15 .s32
355 regn3_1 \op 31 .s64
356 .endm
357
358 .macro qrshifti_imm op
359 regn3_1 \op 7 .i16
360 regn3_1 \op 15 .i32
428e3f1f
PB
361 regn3_1 \op 15 .s32
362 regn3_1 \op 15 .u32
edd40341
JB
363 regn3_1 \op 31 .i64
364 .endm
365
366 qrshift_imm vqshrn
367 qrshift_imm vqrshrn
368 qrshiftu_imm vqshrun
369 qrshiftu_imm vqrshrun
370
371 qrshifti_imm vshrn
372 qrshifti_imm vrshrn
373
374 regl3_1 vshll 1 .s8
375 regl3_1 vshll 1 .s16
376 regl3_1 vshll 1 .s32
377 regl3_1 vshll 1 .u8
378 regl3_1 vshll 1 .u16
379 regl3_1 vshll 1 .u32
380
381 regl3_1 vshll 8 .i8
382 regl3_1 vshll 16 .i16
383 regl3_1 vshll 32 .i32
428e3f1f
PB
384 regl3_1 vshll 32 .s32
385 regl3_1 vshll 32 .u32
edd40341
JB
386
387 .macro convert op opr arg="" t1=".s32.f32" t2=".u32.f32" t3=".f32.s32" t4=".f32.u32"
388 \op\t1 \opr,\opr\arg
389 \op\t2 \opr,\opr\arg
390 \op\t3 \opr,\opr\arg
391 \op\t4 \opr,\opr\arg
392 .endm
393
394 convert vcvt q0
395 convert vcvtq q0
396 convert vcvt d0
397 convert vcvt q0 ",1"
398 convert vcvtq q0 ",1"
399 convert vcvt d0 ",1"
400
401 vmov q0,q0
402 vmov d0,d0
403 vmov.8 d0[0],r0
404 vmov.16 d0[0],r0
405 vmov.32 d0[0],r0
406 vmov d0,r0,r0
407 vmov.s8 r0,d0[0]
408 vmov.s16 r0,d0[0]
409 vmov.u8 r0,d0[0]
410 vmov.u16 r0,d0[0]
411 vmov.32 r0,d0[0]
412 vmov r0,r1,d0
413
414 .macro mov_imm op imm vtype
415 \op\vtype q0,\imm
416 \op\vtype d0,\imm
417 .endm
418
419 mov_imm vmov 0x00000077 .i32
428e3f1f
PB
420 mov_imm vmov 0x00000077 .s32
421 mov_imm vmov 0x00000077 .u32
edd40341 422 mov_imm vmvn 0x00000077 .i32
428e3f1f
PB
423 mov_imm vmvn 0x00000077 .s32
424 mov_imm vmvn 0x00000077 .u32
edd40341
JB
425 mov_imm vmov 0x00007700 .i32
426 mov_imm vmvn 0x00007700 .i32
427 mov_imm vmov 0x00770000 .i32
428 mov_imm vmvn 0x00770000 .i32
429 mov_imm vmov 0x77000000 .i32
430 mov_imm vmvn 0x77000000 .i32
431 mov_imm vmov 0x0077 .i16
432 mov_imm vmvn 0x0077 .i16
433 mov_imm vmov 0x7700 .i16
434 mov_imm vmvn 0x7700 .i16
435 mov_imm vmov 0x000077ff .i32
436 mov_imm vmvn 0x000077ff .i32
437 mov_imm vmov 0x0077ffff .i32
438 mov_imm vmvn 0x0077ffff .i32
439 mov_imm vmov 0x77 .i8
440 mov_imm vmov 0xff0000ff000000ff .i64
441 mov_imm vmov 0x40880000 .f32
442
443 vmvn q0,q0
444 vmvnq q0,q0
445 vmvn d0,d0
446
447 .macro long_ops op
448 regl3_1 \op d0 .s8
449 regl3_1 \op d0 .s16
450 regl3_1 \op d0 .s32
451 regl3_1 \op d0 .u8
452 regl3_1 \op d0 .u16
453 regl3_1 \op d0 .u32
454 .endm
455
456 long_ops vabal
457 long_ops vabdl
458 long_ops vaddl
459 long_ops vsubl
460
461 .macro long_mac op
462 regl3_1 \op d0 .s8
463 regl3_1 \op d0 .s16
464 regl3_1 \op d0 .s32
465 regl3_1 \op d0 .u8
466 regl3_1 \op d0 .u16
467 regl3_1 \op d0 .u32
468 regl3_1 \op "d0[0]" .s16
469 regl3_1 \op "d0[0]" .s32
470 regl3_1 \op "d0[0]" .u16
471 regl3_1 \op "d0[0]" .u32
472 .endm
473
474 long_mac vmlal
475 long_mac vmlsl
476
477 .macro wide_ops op
478 regw3_1 \op d0 .s8
479 regw3_1 \op d0 .s16
480 regw3_1 \op d0 .s32
481 regw3_1 \op d0 .u8
482 regw3_1 \op d0 .u16
483 regw3_1 \op d0 .u32
484 .endm
485
486 wide_ops vaddw
487 wide_ops vsubw
488
489 .macro narr_ops op
490 regn3_1 \op q0 .i16
491 regn3_1 \op q0 .i32
428e3f1f
PB
492 regn3_1 \op q0 .s32
493 regn3_1 \op q0 .u32
edd40341
JB
494 regn3_1 \op q0 .i64
495 .endm
496
497 narr_ops vaddhn
498 narr_ops vraddhn
499 narr_ops vsubhn
500 narr_ops vrsubhn
501
502 .macro long_dmac op
503 regl3_1 \op d0 .s16
504 regl3_1 \op d0 .s32
505 regl3_1 \op "d0[0]" .s16
506 regl3_1 \op "d0[0]" .s32
507 .endm
508
509 long_dmac vqdmlal
510 long_dmac vqdmlsl
511 long_dmac vqdmull
512
513 regl3_1 vmull d0 .s8
514 regl3_1 vmull d0 .s16
515 regl3_1 vmull d0 .s32
516 regl3_1 vmull d0 .u8
517 regl3_1 vmull d0 .u16
518 regl3_1 vmull d0 .u32
519 regl3_1 vmull d0 .p8
520 regl3_1 vmull "d0[0]" .s16
521 regl3_1 vmull "d0[0]" .s32
522 regl3_1 vmull "d0[0]" .u16
523 regl3_1 vmull "d0[0]" .u32
524
525 vext.8 q0,q0,q0,0
526 vextq.8 q0,q0,q0,0
527 vext.8 d0,d0,d0,0
528
529 .macro revs op opq vtype
530 \op\vtype q0,q0
531 \opq\vtype q0,q0
532 \op\vtype d0,d0
533 .endm
534
535 revs vrev64 vrev64q .8
536 revs vrev64 vrev64q .16
537 revs vrev64 vrev64q .32
538 revs vrev32 vrev32q .8
539 revs vrev32 vrev32q .16
540 revs vrev16 vrev16q .8
541
542 .macro dups op opq vtype
543 \op\vtype q0,r0
544 \opq\vtype q0,r0
545 \op\vtype d0,r0
546 \op\vtype q0,d0[0]
547 \opq\vtype q0,d0[0]
548 \op\vtype d0,d0[0]
549 .endm
550
551 dups vdup vdupq .8
552 dups vdup vdupq .16
553 dups vdup vdupq .32
554
555 .macro binop_3typ op op1 op2 t1 t2 t3
556 \op\t1 \op1,\op2
557 \op\t2 \op1,\op2
558 \op\t3 \op1,\op2
559 .endm
560
561 binop_3typ vmovl q0 d0 .s8 .s16 .s32
562 binop_3typ vmovl q0 d0 .u8 .u16 .u32
563 binop_3typ vmovn d0 q0 .i16 .i32 .i64
428e3f1f
PB
564 vmovn.s32 d0, q0
565 vmovn.u32 d0, q0
edd40341
JB
566 binop_3typ vqmovn d0 q0 .s16 .s32 .s64
567 binop_3typ vqmovn d0 q0 .u16 .u32 .u64
568 binop_3typ vqmovun d0 q0 .s16 .s32 .s64
569
570 .macro binops op opq vtype="" rhs="0"
571 \op\vtype q0,q\rhs
572 \opq\vtype q0,q\rhs
573 \op\vtype d0,d\rhs
574 .endm
575
576 .macro regs2_sz_32 op opq
577 binops \op \opq .8 1
578 binops \op \opq .16 1
579 binops \op \opq .32 1
580 .endm
581
582 regs2_sz_32 vzip vzipq
583 regs2_sz_32 vuzp vuzpq
584
585 .macro regs2_s_32 op opq
586 binops \op \opq .s8
587 binops \op \opq .s16
588 binops \op \opq .s32
589 .endm
590
591 regs2_s_32 vqabs vqabsq
592 regs2_s_32 vqneg vqnegq
593
594 .macro regs2_su_32 op opq
595 regs2_s_32 \op \opq
596 binops \op \opq .u8
597 binops \op \opq .u16
598 binops \op \opq .u32
599 .endm
600
601 regs2_su_32 vpadal vpadalq
602 regs2_su_32 vpaddl vpaddlq
603
604 binops vrecpe vrecpeq .u32
605 binops vrecpe vrecpeq .f32
606 binops vrsqrte vrsqrteq .u32
607 binops vrsqrte vrsqrteq .f32
608
609 regs2_s_32 vcls vclsq
610
611 .macro regs2_i_32 op opq
612 binops \op \opq .i8
613 binops \op \opq .i16
614 binops \op \opq .i32
428e3f1f
PB
615 binops \op \opq .s32
616 binops \op \opq .u32
edd40341
JB
617 .endm
618
619 regs2_i_32 vclz vclzq
620
621 binops vcnt vcntq .8
622
623 binops vswp vswpq "" 1
624
625 regs2_sz_32 vtrn vtrnq
626
627 vtbl.8 d0,{d0},d0
628 vtbx.8 d0,{d0},d0
629
This page took 0.057561 seconds and 4 git commands to generate.