Home | History | Annotate | Download | only in arm
      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
     90 	regs2i_1 \op \opq \imm .s32
     91 	regs2i_1 \op \opq \imm .u32
     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 0x000000a5000000a5 .i64
    116 	logic_imm_1 \op \opq 0x0000a5000000a500 .i64
    117 	logic_imm_1 \op \opq 0x00a5000000a50000 .i64
    118 	logic_imm_1 \op \opq 0xa5000000a5000000 .i64
    119 	logic_imm_1 \op \opq 0x00a500a500a500a5 .i64
    120 	logic_imm_1 \op \opq 0xa500a500a500a500 .i64
    121 	logic_imm_1 \op \opq 0x000000ff .i32
    122 	logic_imm_1 \op \opq 0x000000ff .s32
    123 	logic_imm_1 \op \opq 0x000000ff .u32
    124 	logic_imm_1 \op \opq 0x0000ff00 .i32
    125 	logic_imm_1 \op \opq 0x00ff0000 .i32
    126 	logic_imm_1 \op \opq 0xff000000 .i32
    127 	logic_imm_1 \op \opq 0x00a500a5 .i32
    128 	logic_imm_1 \op \opq 0xa500a500 .i32
    129 	logic_imm_1 \op \opq 0x00ff .i16
    130 	logic_imm_1 \op \opq 0xff00 .i16
    131 	logic_imm_1 \op \opq 0x00 .i8
    132 	.endm
    133 
    134 	logic_imm vbic vbicq
    135 	logic_imm vorr vorrq
    136 
    137 	.macro logic_inv_imm op opq
    138 	logic_imm_1 \op \opq 0xffffff5affffff5a .i64
    139 	logic_imm_1 \op \opq 0xffff5affffff5aff .i64
    140 	logic_imm_1 \op \opq 0xff5affffff5affff .i64
    141 	logic_imm_1 \op \opq 0x5affffff5affffff .i64
    142 	logic_imm_1 \op \opq 0xff5aff5aff5aff5a .i64
    143 	logic_imm_1 \op \opq 0x5aff5aff5aff5aff .i64
    144 	logic_imm_1 \op \opq 0xffffff00 .i32
    145 	logic_imm_1 \op \opq 0xffffff00 .s32
    146 	logic_imm_1 \op \opq 0xffffff00 .u32
    147 	logic_imm_1 \op \opq 0xffff00ff .i32
    148 	logic_imm_1 \op \opq 0xff00ffff .i32
    149 	logic_imm_1 \op \opq 0x00ffffff .i32
    150 	logic_imm_1 \op \opq 0xff5aff5a .i32
    151 	logic_imm_1 \op \opq 0x5aff5aff .i32
    152 	logic_imm_1 \op \opq 0xff00 .i16
    153 	logic_imm_1 \op \opq 0x00ff .i16
    154 	logic_imm_1 \op \opq 0xff .i8
    155 	.endm
    156 
    157 	logic_inv_imm vand vandq
    158 	logic_inv_imm vorn vornq
    159 
    160 	regs3_ntyp vbsl vbslq
    161 	regs3_ntyp vbit vbitq
    162 	regs3_ntyp vbif vbifq
    163 
    164 	.macro regs3_suf_32 op opq
    165 	regs3_1 \op \opq .s8
    166 	regs3_1 \op \opq .s16
    167 	regs3_1 \op \opq .s32
    168 	regs3_1 \op \opq .u8
    169 	regs3_1 \op \opq .u16
    170 	regs3_1 \op \opq .u32
    171 	regs3_1 \op \opq .f32
    172 	.endm
    173 
    174 	.macro regs3_if_32 op opq
    175 	regs3_1 \op \opq .i8
    176 	regs3_1 \op \opq .i16
    177 	regs3_1 \op \opq .i32
    178 	regs3_1 \op \opq .s32
    179 	regs3_1 \op \opq .u32
    180 	regs3_1 \op \opq .f32
    181 	.endm
    182 
    183 	regs3_suf_32 vabd vabdq
    184 	regs3_suf_32 vmax vmaxq
    185 	regs3_suf_32 vmin vminq
    186 
    187 	regs3_suf_32 vcge vcgeq
    188 	regs3_suf_32 vcgt vcgtq
    189 	regs3_suf_32 vcle vcleq
    190 	regs3_suf_32 vclt vcltq
    191 
    192 	regs3_if_32 vceq vceqq
    193 
    194 	.macro regs2i_sf_0 op opq
    195 	regs2i_1 \op \opq 0 .s8
    196 	regs2i_1 \op \opq 0 .s16
    197 	regs2i_1 \op \opq 0 .s32
    198 	regs2i_1 \op \opq 0 .f32
    199 	.endm
    200 
    201 	regs2i_sf_0 vcge vcgeq
    202 	regs2i_sf_0 vcgt vcgtq
    203 	regs2i_sf_0 vcle vcleq
    204 	regs2i_sf_0 vclt vcltq
    205 
    206 	.macro regs2i_if_0 op opq
    207 	regs2i_1 \op \opq 0 .i8
    208 	regs2i_1 \op \opq 0 .i16
    209 	regs2i_1 \op \opq 0 .i32
    210 	regs2i_1 \op \opq 0 .s32
    211 	regs2i_1 \op \opq 0 .u32
    212 	regs2i_1 \op \opq 0 .f32
    213 	.endm
    214 
    215 	regs2i_if_0 vceq vceqq
    216 
    217 	.macro dregs3_suf_32 op
    218 	dregs3_1 \op .s8
    219 	dregs3_1 \op .s16
    220 	dregs3_1 \op .s32
    221 	dregs3_1 \op .u8
    222 	dregs3_1 \op .u16
    223 	dregs3_1 \op .u32
    224 	dregs3_1 \op .f32
    225 	.endm
    226 
    227 	dregs3_suf_32 vpmax
    228 	dregs3_suf_32 vpmin
    229 
    230 	.macro sregs3_1 op opq vtype
    231 	\op\vtype q0,q0,q0
    232 	\opq\vtype q0,q0,q0
    233 	\op\vtype d0,d0,d0
    234 	.endm
    235 
    236 	.macro sclr21_1 op opq vtype
    237 	\op\vtype q0,q0,d0[0]
    238 	\opq\vtype q0,q0,d0[0]
    239 	\op\vtype d0,d0,d0[0]
    240 	.endm
    241 
    242 	.macro mul_incl_scalar op opq
    243 	regs3_1 \op \opq .i8
    244 	regs3_1 \op \opq .i16
    245 	regs3_1 \op \opq .i32
    246 	regs3_1 \op \opq .s32
    247 	regs3_1 \op \opq .u32
    248 	regs3_1 \op \opq .f32
    249 	sclr21_1 \op \opq .i16
    250 	sclr21_1 \op \opq .i32
    251 	sclr21_1 \op \opq .s32
    252 	sclr21_1 \op \opq .u32
    253 	sclr21_1 \op \opq .f32
    254 	.endm
    255 
    256 	mul_incl_scalar vmla vmlaq
    257 	mul_incl_scalar vmls vmlsq
    258 
    259 	.macro dregs3_if_32 op
    260 	dregs3_1 \op .i8
    261 	dregs3_1 \op .i16
    262 	dregs3_1 \op .i32
    263 	dregs3_1 \op .s32
    264 	dregs3_1 \op .u32
    265 	dregs3_1 \op .f32
    266 	.endm
    267 
    268 	dregs3_if_32 vpadd
    269 
    270 	.macro regs3_if_64 op opq
    271 	regs3_1 \op \opq .i8
    272 	regs3_1 \op \opq .i16
    273 	regs3_1 \op \opq .i32
    274 	regs3_1 \op \opq .s32
    275 	regs3_1 \op \opq .u32
    276 	regs3_1 \op \opq .i64
    277 	regs3_1 \op \opq .f32
    278 	.endm
    279 
    280 	regs3_if_64 vadd vaddq
    281 	regs3_if_64 vsub vsubq
    282 
    283 	.macro regs3_sz_32 op opq
    284 	regs3_1 \op \opq .8
    285 	regs3_1 \op \opq .16
    286 	regs3_1 \op \opq .32
    287 	.endm
    288 
    289 	regs3_sz_32 vtst vtstq
    290 
    291 	.macro regs3_ifp_32 op opq
    292         regs3_1 \op \opq .i8
    293 	regs3_1 \op \opq .i16
    294 	regs3_1 \op \opq .i32
    295 	regs3_1 \op \opq .s32
    296 	regs3_1 \op \opq .u32
    297 	regs3_1 \op \opq .f32
    298 	regs3_1 \op \opq .p8
    299 	.endm
    300 
    301 	regs3_ifp_32 vmul vmulq
    302 
    303 	.macro dqmulhs op opq
    304 	regs3_1 \op \opq .s16
    305 	regs3_1 \op \opq .s32
    306 	sclr21_1 \op \opq .s16
    307 	sclr21_1 \op \opq .s32
    308 	.endm
    309 
    310 	dqmulhs vqdmulh vqdmulhq
    311 	dqmulhs vqrdmulh vqrdmulhq
    312 
    313 	regs3_1 vacge vacgeq .f32
    314 	regs3_1 vacgt vacgtq .f32
    315 	regs3_1 vacle vacleq .f32
    316 	regs3_1 vaclt vacltq .f32
    317 	regs3_1 vrecps vrecpsq .f32
    318 	regs3_1 vrsqrts vrsqrtsq .f32
    319 
    320 	.macro regs2_sf_32 op opq
    321 	regs2_1 \op \opq .s8
    322 	regs2_1 \op \opq .s16
    323 	regs2_1 \op \opq .s32
    324 	regs2_1 \op \opq .f32
    325 	.endm
    326 
    327 	regs2_sf_32 vabs vabsq
    328 	regs2_sf_32 vneg vnegq
    329 
    330 	.macro rshift_imm op opq
    331 	regs2i_1 \op \opq 7 .s8
    332 	regs2i_1 \op \opq 15 .s16
    333 	regs2i_1 \op \opq 31 .s32
    334 	regs2i_1 \op \opq 63 .s64
    335 	regs2i_1 \op \opq 7 .u8
    336 	regs2i_1 \op \opq 15 .u16
    337 	regs2i_1 \op \opq 31 .u32
    338 	regs2i_1 \op \opq 63 .u64
    339 	.endm
    340 
    341 	rshift_imm vshr vshrq
    342 	rshift_imm vrshr vrshrq
    343 	rshift_imm vsra vsraq
    344 	rshift_imm vrsra vrsraq
    345 
    346 	regs2i_1 vsli vsliq 0 .8
    347 	regs2i_1 vsli vsliq 0 .16
    348 	regs2i_1 vsli vsliq 0 .32
    349 	regs2i_1 vsli vsliq 0 .64
    350 
    351 	regs2i_1 vsri vsriq 7 .8
    352 	regs2i_1 vsri vsriq 15 .16
    353 	regs2i_1 vsri vsriq 31 .32
    354 	regs2i_1 vsri vsriq 63 .64
    355 
    356 	regs2i_1 vqshlu vqshluq 0 .s8
    357 	regs2i_1 vqshlu vqshluq 0 .s16
    358 	regs2i_1 vqshlu vqshluq 0 .s32
    359 	regs2i_1 vqshlu vqshluq 0 .s64
    360 
    361 	.macro qrshift_imm op
    362 	regn3_1 \op 7 .s16
    363 	regn3_1 \op 15 .s32
    364 	regn3_1 \op 31 .s64
    365 	regn3_1 \op 7 .u16
    366 	regn3_1 \op 15 .u32
    367 	regn3_1 \op 31 .u64
    368 	.endm
    369 
    370 	.macro qrshiftu_imm op
    371 	regn3_1 \op 7 .s16
    372 	regn3_1 \op 15 .s32
    373 	regn3_1 \op 31 .s64
    374 	.endm
    375 
    376 	.macro qrshifti_imm op
    377 	regn3_1 \op 7 .i16
    378 	regn3_1 \op 15 .i32
    379 	regn3_1 \op 15 .s32
    380 	regn3_1 \op 15 .u32
    381 	regn3_1 \op 31 .i64
    382 	.endm
    383 
    384 	qrshift_imm vqshrn
    385 	qrshift_imm vqrshrn
    386 	qrshiftu_imm vqshrun
    387 	qrshiftu_imm vqrshrun
    388 
    389 	qrshifti_imm vshrn
    390 	qrshifti_imm vrshrn
    391 
    392 	regl3_1 vshll 1 .s8
    393 	regl3_1 vshll 1 .s16
    394 	regl3_1 vshll 1 .s32
    395 	regl3_1 vshll 1 .u8
    396 	regl3_1 vshll 1 .u16
    397 	regl3_1 vshll 1 .u32
    398 
    399 	regl3_1 vshll 8 .i8
    400 	regl3_1 vshll 16 .i16
    401 	regl3_1 vshll 32 .i32
    402 	regl3_1 vshll 32 .s32
    403 	regl3_1 vshll 32 .u32
    404 
    405 	.macro convert op opr arg="" t1=".s32.f32" t2=".u32.f32" t3=".f32.s32" t4=".f32.u32"
    406 	\op\t1 \opr,\opr\arg
    407 	\op\t2 \opr,\opr\arg
    408 	\op\t3 \opr,\opr\arg
    409 	\op\t4 \opr,\opr\arg
    410 	.endm
    411 
    412 	convert vcvt q0
    413 	convert vcvtq q0
    414 	convert vcvt d0
    415 	convert vcvt q0 ",1"
    416 	convert vcvtq q0 ",1"
    417 	convert vcvt d0 ",1"
    418 
    419 	vmov q0,q0
    420 	vmov d0,d0
    421 	vmov.8 d0[0],r0
    422 	vmov.16 d0[0],r0
    423 	vmov.32 d0[0],r0
    424 	vmov d0,r0,r0
    425 	vmov.s8 r0,d0[0]
    426 	vmov.s16 r0,d0[0]
    427 	vmov.u8 r0,d0[0]
    428 	vmov.u16 r0,d0[0]
    429 	vmov.32 r0,d0[0]
    430 	vmov r0,r1,d0
    431 
    432 	.macro mov_imm op imm vtype
    433 	\op\vtype q0,\imm
    434 	\op\vtype d0,\imm
    435 	.endm
    436 
    437 	mov_imm vmov 0x00000077 .i32
    438 	mov_imm vmov 0x00000077 .s32
    439 	mov_imm vmov 0x00000077 .u32
    440 	mov_imm vmvn 0x00000077 .i32
    441 	mov_imm vmvn 0x00000077 .s32
    442 	mov_imm vmvn 0x00000077 .u32
    443 	mov_imm vmov 0x00007700 .i32
    444 	mov_imm vmvn 0x00007700 .i32
    445 	mov_imm vmov 0x00770000 .i32
    446 	mov_imm vmvn 0x00770000 .i32
    447 	mov_imm vmov 0x77000000 .i32
    448 	mov_imm vmvn 0x77000000 .i32
    449 	mov_imm vmov 0x0077 .i16
    450 	mov_imm vmvn 0x0077 .i16
    451 	mov_imm vmov 0x7700 .i16
    452 	mov_imm vmvn 0x7700 .i16
    453 	mov_imm vmov 0x000077ff .i32
    454 	mov_imm vmvn 0x000077ff .i32
    455 	mov_imm vmov 0x0077ffff .i32
    456 	mov_imm vmvn 0x0077ffff .i32
    457 	mov_imm vmov 0x77 .i8
    458 	mov_imm vmov 0xff0000ff000000ff .i64
    459 	mov_imm vmov 4.25 .f32
    460 
    461 	mov_imm vmov 0xa5a5 .i16
    462 	mov_imm vmvn 0xa5a5 .i16
    463 	mov_imm vmov 0xa5a5a5a5 .i32
    464 	mov_imm vmvn 0xa5a5a5a5 .i32
    465 	mov_imm vmov 0x00a500a5 .i32
    466 	mov_imm vmov 0xa500a500 .i32
    467 	mov_imm vmov 0xa5a5a5a5a5a5a5a5 .i64
    468 	mov_imm vmvn 0xa5a5a5a5a5a5a5a5 .i64
    469 	mov_imm vmov 0x00a500a500a500a5 .i64
    470 	mov_imm vmov 0xa500a500a500a500 .i64
    471 	mov_imm vmov 0x000000a5000000a5 .i64
    472 	mov_imm vmov 0x0000a5000000a500 .i64
    473 	mov_imm vmov 0x00a5000000a50000 .i64
    474 	mov_imm vmov 0xa5000000a5000000 .i64
    475 	mov_imm vmov 0x0000a5ff0000a5ff .i64
    476 	mov_imm vmov 0x00a5ffff00a5ffff .i64
    477 	mov_imm vmov 0xa5ffffffa5ffffff .i64
    478 
    479 	vmvn q0,q0
    480 	vmvnq q0,q0
    481 	vmvn d0,d0
    482 
    483 	.macro long_ops op
    484 	regl3_1 \op d0 .s8
    485 	regl3_1 \op d0 .s16
    486 	regl3_1 \op d0 .s32
    487 	regl3_1 \op d0 .u8
    488 	regl3_1 \op d0 .u16
    489 	regl3_1 \op d0 .u32
    490 	.endm
    491 
    492 	long_ops vabal
    493 	long_ops vabdl
    494 	long_ops vaddl
    495 	long_ops vsubl
    496 
    497 	.macro long_mac op
    498 	regl3_1 \op d0 .s8
    499 	regl3_1 \op d0 .s16
    500 	regl3_1 \op d0 .s32
    501 	regl3_1 \op d0 .u8
    502 	regl3_1 \op d0 .u16
    503 	regl3_1 \op d0 .u32
    504 	regl3_1 \op "d0[0]" .s16
    505 	regl3_1 \op "d0[0]" .s32
    506 	regl3_1 \op "d0[0]" .u16
    507 	regl3_1 \op "d0[0]" .u32
    508 	.endm
    509 
    510 	long_mac vmlal
    511 	long_mac vmlsl
    512 
    513 	.macro wide_ops op
    514 	regw3_1 \op d0 .s8
    515 	regw3_1 \op d0 .s16
    516 	regw3_1 \op d0 .s32
    517 	regw3_1 \op d0 .u8
    518 	regw3_1 \op d0 .u16
    519 	regw3_1 \op d0 .u32
    520 	.endm
    521 
    522 	wide_ops vaddw
    523 	wide_ops vsubw
    524 
    525 	.macro narr_ops op
    526 	regn3_1 \op q0 .i16
    527 	regn3_1 \op q0 .i32
    528 	regn3_1 \op q0 .s32
    529 	regn3_1 \op q0 .u32
    530 	regn3_1 \op q0 .i64
    531 	.endm
    532 
    533 	narr_ops vaddhn
    534 	narr_ops vraddhn
    535 	narr_ops vsubhn
    536 	narr_ops vrsubhn
    537 
    538 	.macro long_dmac op
    539 	regl3_1 \op d0 .s16
    540 	regl3_1 \op d0 .s32
    541 	regl3_1 \op "d0[0]" .s16
    542 	regl3_1 \op "d0[0]" .s32
    543 	.endm
    544 
    545 	long_dmac vqdmlal
    546 	long_dmac vqdmlsl
    547 	long_dmac vqdmull
    548 
    549 	regl3_1 vmull d0 .s8
    550 	regl3_1 vmull d0 .s16
    551 	regl3_1 vmull d0 .s32
    552 	regl3_1 vmull d0 .u8
    553 	regl3_1 vmull d0 .u16
    554 	regl3_1 vmull d0 .u32
    555 	regl3_1 vmull d0 .p8
    556 	regl3_1 vmull "d0[0]" .s16
    557 	regl3_1 vmull "d0[0]" .s32
    558 	regl3_1 vmull "d0[0]" .u16
    559 	regl3_1 vmull "d0[0]" .u32
    560 
    561 	vext.8 q0,q0,q0,0
    562 	vextq.8 q0,q0,q0,0
    563 	vext.8 d0,d0,d0,0
    564 	vext.8 q0,q0,q0,8
    565 
    566 	.macro revs op opq vtype
    567 	\op\vtype q0,q0
    568 	\opq\vtype q0,q0
    569 	\op\vtype d0,d0
    570 	.endm
    571 
    572 	revs vrev64 vrev64q .8
    573 	revs vrev64 vrev64q .16
    574 	revs vrev64 vrev64q .32
    575 	revs vrev32 vrev32q .8
    576 	revs vrev32 vrev32q .16
    577 	revs vrev16 vrev16q .8
    578 
    579 	.macro dups op opq vtype
    580 	\op\vtype q0,r0
    581 	\opq\vtype q0,r0
    582 	\op\vtype d0,r0
    583 	\op\vtype q0,d0[0]
    584 	\opq\vtype q0,d0[0]
    585 	\op\vtype d0,d0[0]
    586 	.endm
    587 
    588 	dups vdup vdupq .8
    589 	dups vdup vdupq .16
    590 	dups vdup vdupq .32
    591 
    592 	.macro binop_3typ op op1 op2 t1 t2 t3
    593 	\op\t1 \op1,\op2
    594 	\op\t2 \op1,\op2
    595 	\op\t3 \op1,\op2
    596 	.endm
    597 
    598 	binop_3typ vmovl q0 d0 .s8 .s16 .s32
    599 	binop_3typ vmovl q0 d0 .u8 .u16 .u32
    600 	binop_3typ vmovn d0 q0 .i16 .i32 .i64
    601 	vmovn.s32 d0, q0
    602 	vmovn.u32 d0, q0
    603 	binop_3typ vqmovn d0 q0 .s16 .s32 .s64
    604 	binop_3typ vqmovn d0 q0 .u16 .u32 .u64
    605 	binop_3typ vqmovun d0 q0 .s16 .s32 .s64
    606 
    607 	.macro binops op opq vtype="" rhs="0"
    608 	\op\vtype q0,q\rhs
    609 	\opq\vtype q0,q\rhs
    610 	\op\vtype d0,d\rhs
    611 	.endm
    612 
    613 	.macro regs2_sz_32 op opq
    614 	binops \op \opq .8 1
    615 	binops \op \opq .16 1
    616 	binops \op \opq .32 1
    617 	.endm
    618 
    619 	regs2_sz_32 vzip vzipq
    620 	regs2_sz_32 vuzp vuzpq
    621 
    622 	.macro regs2_s_32 op opq
    623 	binops \op \opq .s8
    624 	binops \op \opq .s16
    625 	binops \op \opq .s32
    626 	.endm
    627 
    628 	regs2_s_32 vqabs vqabsq
    629 	regs2_s_32 vqneg vqnegq
    630 
    631 	.macro regs2_su_32 op opq
    632 	regs2_s_32 \op \opq
    633 	binops \op \opq .u8
    634 	binops \op \opq .u16
    635 	binops \op \opq .u32
    636 	.endm
    637 
    638 	regs2_su_32 vpadal vpadalq
    639 	regs2_su_32 vpaddl vpaddlq
    640 
    641 	binops vrecpe vrecpeq .u32
    642 	binops vrecpe vrecpeq .f32
    643 	binops vrsqrte vrsqrteq .u32
    644 	binops vrsqrte vrsqrteq .f32
    645 
    646 	regs2_s_32 vcls vclsq
    647 
    648 	.macro regs2_i_32 op opq
    649 	binops \op \opq .i8
    650 	binops \op \opq .i16
    651 	binops \op \opq .i32
    652 	binops \op \opq .s32
    653 	binops \op \opq .u32
    654 	.endm
    655 
    656 	regs2_i_32 vclz vclzq
    657 
    658 	binops vcnt vcntq .8
    659 
    660 	binops vswp vswpq "" 1
    661 
    662 	regs2_sz_32 vtrn vtrnq
    663 
    664 	vtbl.8 d0,{d0},d0
    665 	vtbx.8 d0,{d0},d0
    666 
    667