1 @ Neon tests. Basic bitfield tests, using zero for as many registers/fields as
2 @ possible, but without causing instructions to be badly-formed.
8 .macro regs3_1 op opq vtype
14 .macro dregs3_1 op vtype
18 .macro regn3_1 op operand2 vtype
19 \op\vtype d0,q0,\operand2
22 .macro regl3_1 op operand2 vtype
23 \op\vtype q0,d0,\operand2
26 .macro regw3_1 op operand2 vtype
27 \op\vtype q0,q0,\operand2
30 .macro regs2_1 op opq vtype
36 .macro regs3_su_32 op opq
45 regs3_su_32 vaba vabaq
46 regs3_su_32 vhadd vhaddq
47 regs3_su_32 vrhadd vrhaddq
48 regs3_su_32 vhsub vhsubq
50 .macro regs3_su_64 op opq
61 regs3_su_64 vqadd vqaddq
62 regs3_su_64 vqsub vqsubq
63 regs3_su_64 vrshl vrshlq
64 regs3_su_64 vqrshl vqrshlq
66 regs3_su_64 vshl vshlq
67 regs3_su_64 vqshl vqshlq
69 .macro regs2i_1 op opq imm vtype
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
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
90 regs2i_1 \op \opq \imm .i64
93 regs2i_i_64 vshl vshlq 0
94 regs2i_su_64 vqshl vqshlq 0
96 .macro regs3_ntyp op opq
100 regs3_ntyp vand vandq
101 regs3_ntyp vbic vbicq
102 regs3_ntyp vorr vorrq
103 regs3_ntyp vorn vornq
104 regs3_ntyp veor veorq
106 .macro logic_imm_1 op opq imm vtype
112 .macro logic_imm op opq
113 logic_imm_1 \op \opq 0x000000ff .i32
114 logic_imm_1 \op \opq 0x0000ff00 .i32
115 logic_imm_1 \op \opq 0x00ff0000 .i32
116 logic_imm_1 \op \opq 0xff000000 .i32
117 logic_imm_1 \op \opq 0x00ff .i16
118 logic_imm_1 \op \opq 0xff00 .i16
124 .macro logic_inv_imm op opq
125 logic_imm_1 \op \opq 0xffffff00 .i32
126 logic_imm_1 \op \opq 0xffff00ff .i32
127 logic_imm_1 \op \opq 0xff00ffff .i32
128 logic_imm_1 \op \opq 0x00ffffff .i32
129 logic_imm_1 \op \opq 0xff00 .i16
130 logic_imm_1 \op \opq 0x00ff .i16
133 logic_inv_imm vand vandq
134 logic_inv_imm vorn vornq
136 regs3_ntyp vbsl vbslq
137 regs3_ntyp vbit vbitq
138 regs3_ntyp vbif vbifq
140 .macro regs3_suf_32 op opq
142 regs3_1 \op \opq .s16
143 regs3_1 \op \opq .s32
145 regs3_1 \op \opq .u16
146 regs3_1 \op \opq .u32
147 regs3_1 \op \opq .f32
150 .macro regs3_if_32 op opq
152 regs3_1 \op \opq .i16
153 regs3_1 \op \opq .i32
154 regs3_1 \op \opq .f32
157 regs3_suf_32 vabd vabdq
158 regs3_suf_32 vmax vmaxq
159 regs3_suf_32 vmin vminq
161 regs3_suf_32 vcge vcgeq
162 regs3_suf_32 vcgt vcgtq
163 regs3_suf_32 vcle vcleq
164 regs3_suf_32 vclt vcltq
166 regs3_if_32 vceq vceqq
168 .macro regs2i_sf_0 op opq
169 regs2i_1 \op \opq 0 .s8
170 regs2i_1 \op \opq 0 .s16
171 regs2i_1 \op \opq 0 .s32
172 regs2i_1 \op \opq 0 .f32
175 regs2i_sf_0 vcge vcgeq
176 regs2i_sf_0 vcgt vcgtq
177 regs2i_sf_0 vcle vcleq
178 regs2i_sf_0 vclt vcltq
180 .macro regs2i_if_0 op opq
181 regs2i_1 \op \opq 0 .i8
182 regs2i_1 \op \opq 0 .i16
183 regs2i_1 \op \opq 0 .i32
184 regs2i_1 \op \opq 0 .f32
187 regs2i_if_0 vceq vceqq
189 .macro dregs3_suf_32 op
202 .macro sregs3_1 op opq vtype
208 .macro sclr21_1 op opq vtype
209 \op\vtype q0,q0,d0[0]
210 \opq\vtype q0,q0,d0[0]
211 \op\vtype d0,d0,d0[0]
214 .macro mul_incl_scalar op opq
216 regs3_1 \op \opq .i16
217 regs3_1 \op \opq .i32
218 regs3_1 \op \opq .f32
219 sclr21_1 \op \opq .i16
220 sclr21_1 \op \opq .i32
221 sclr21_1 \op \opq .f32
224 mul_incl_scalar vmla vmlaq
225 mul_incl_scalar vmls vmlsq
227 .macro dregs3_if_32 op
236 .macro regs3_if_64 op opq
238 regs3_1 \op \opq .i16
239 regs3_1 \op \opq .i32
240 regs3_1 \op \opq .i64
241 regs3_1 \op \opq .f32
244 regs3_if_64 vadd vaddq
245 regs3_if_64 vsub vsubq
247 .macro regs3_sz_32 op opq
253 regs3_sz_32 vtst vtstq
255 .macro regs3_ifp_32 op opq
257 regs3_1 \op \opq .i16
258 regs3_1 \op \opq .i32
259 regs3_1 \op \opq .f32
263 regs3_ifp_32 vmul vmulq
265 .macro dqmulhs op opq
266 regs3_1 \op \opq .s16
267 regs3_1 \op \opq .s32
268 sclr21_1 \op \opq .s16
269 sclr21_1 \op \opq .s32
272 dqmulhs vqdmulh vqdmulhq
273 dqmulhs vqrdmulh vqrdmulhq
275 regs3_1 vacge vacgeq .f32
276 regs3_1 vacgt vacgtq .f32
277 regs3_1 vacle vacleq .f32
278 regs3_1 vaclt vacltq .f32
279 regs3_1 vrecps vrecpsq .f32
280 regs3_1 vrsqrts vrsqrtsq .f32
282 .macro regs2_sf_32 op opq
284 regs2_1 \op \opq .s16
285 regs2_1 \op \opq .s32
286 regs2_1 \op \opq .f32
289 regs2_sf_32 vabs vabsq
290 regs2_sf_32 vneg vnegq
292 .macro rshift_imm op opq
293 regs2i_1 \op \opq 7 .s8
294 regs2i_1 \op \opq 15 .s16
295 regs2i_1 \op \opq 31 .s32
296 regs2i_1 \op \opq 63 .s64
297 regs2i_1 \op \opq 7 .u8
298 regs2i_1 \op \opq 15 .u16
299 regs2i_1 \op \opq 31 .u32
300 regs2i_1 \op \opq 63 .u64
303 rshift_imm vshr vshrq
304 rshift_imm vrshr vrshrq
305 rshift_imm vsra vsraq
306 rshift_imm vrsra vrsraq
308 regs2i_1 vsli vsliq 0 .8
309 regs2i_1 vsli vsliq 0 .16
310 regs2i_1 vsli vsliq 0 .32
311 regs2i_1 vsli vsliq 0 .64
313 regs2i_1 vsri vsriq 7 .8
314 regs2i_1 vsri vsriq 15 .16
315 regs2i_1 vsri vsriq 31 .32
316 regs2i_1 vsri vsriq 63 .64
318 regs2i_1 vqshlu vqshluq 0 .s8
319 regs2i_1 vqshlu vqshluq 0 .s16
320 regs2i_1 vqshlu vqshluq 0 .s32
321 regs2i_1 vqshlu vqshluq 0 .s64
323 .macro qrshift_imm op
332 .macro qrshiftu_imm op
338 .macro qrshifti_imm op
347 qrshiftu_imm vqrshrun
360 regl3_1 vshll 16 .i16
361 regl3_1 vshll 32 .i32
363 .macro convert op opr arg="" t1=".s32.f32" t2=".u32.f32" t3=".f32.s32" t4=".f32.u32"
374 convert vcvtq q0 ",1"
390 .macro mov_imm op imm vtype
395 mov_imm vmov 0x00000077 .i32
396 mov_imm vmvn 0x00000077 .i32
397 mov_imm vmov 0x00007700 .i32
398 mov_imm vmvn 0x00007700 .i32
399 mov_imm vmov 0x00770000 .i32
400 mov_imm vmvn 0x00770000 .i32
401 mov_imm vmov 0x77000000 .i32
402 mov_imm vmvn 0x77000000 .i32
403 mov_imm vmov 0x0077 .i16
404 mov_imm vmvn 0x0077 .i16
405 mov_imm vmov 0x7700 .i16
406 mov_imm vmvn 0x7700 .i16
407 mov_imm vmov 0x000077ff .i32
408 mov_imm vmvn 0x000077ff .i32
409 mov_imm vmov 0x0077ffff .i32
410 mov_imm vmvn 0x0077ffff .i32
411 mov_imm vmov 0x77 .i8
412 mov_imm vmov 0xff0000ff000000ff .i64
413 mov_imm vmov 0x40880000 .f32
440 regl3_1 \op "d0[0]" .s16
441 regl3_1 \op "d0[0]" .s32
442 regl3_1 \op "d0[0]" .u16
443 regl3_1 \op "d0[0]" .u32
475 regl3_1 \op "d0[0]" .s16
476 regl3_1 \op "d0[0]" .s32
484 regl3_1 vmull d0 .s16
485 regl3_1 vmull d0 .s32
487 regl3_1 vmull d0 .u16
488 regl3_1 vmull d0 .u32
490 regl3_1 vmull "d0[0]" .s16
491 regl3_1 vmull "d0[0]" .s32
492 regl3_1 vmull "d0[0]" .u16
493 regl3_1 vmull "d0[0]" .u32
499 .macro revs op opq vtype
505 revs vrev64 vrev64q .8
506 revs vrev64 vrev64q .16
507 revs vrev64 vrev64q .32
508 revs vrev32 vrev32q .8
509 revs vrev32 vrev32q .16
510 revs vrev16 vrev16q .8
512 .macro dups op opq vtype
525 .macro binop_3typ op op1 op2 t1 t2 t3
531 binop_3typ vmovl q0 d0 .s8 .s16 .s32
532 binop_3typ vmovl q0 d0 .u8 .u16 .u32
533 binop_3typ vmovn d0 q0 .i16 .i32 .i64
534 binop_3typ vqmovn d0 q0 .s16 .s32 .s64
535 binop_3typ vqmovn d0 q0 .u16 .u32 .u64
536 binop_3typ vqmovun d0 q0 .s16 .s32 .s64
538 .macro binops op opq vtype="" rhs="0"
544 .macro regs2_sz_32 op opq
546 binops \op \opq .16 1
547 binops \op \opq .32 1
550 regs2_sz_32 vzip vzipq
551 regs2_sz_32 vuzp vuzpq
553 .macro regs2_s_32 op opq
559 regs2_s_32 vqabs vqabsq
560 regs2_s_32 vqneg vqnegq
562 .macro regs2_su_32 op opq
569 regs2_su_32 vpadal vpadalq
570 regs2_su_32 vpaddl vpaddlq
572 binops vrecpe vrecpeq .u32
573 binops vrecpe vrecpeq .f32
574 binops vrsqrte vrsqrteq .u32
575 binops vrsqrte vrsqrteq .f32
577 regs2_s_32 vcls vclsq
579 .macro regs2_i_32 op opq
585 regs2_i_32 vclz vclzq
589 binops vswp vswpq "" 1
591 regs2_sz_32 vtrn vtrnq