~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gas/testsuite/gas/arm/neon-cov.s

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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