Merging r258273:
[oota-llvm.git] / test / MC / AArch64 / neon-simd-misc.s
1 // RUN: llvm-mc -triple=arm64 -mattr=+neon,+fullfp16 -show-encoding < %s | FileCheck %s
2
3 // Check that the assembler can handle the documented syntax for AArch64
4
5
6 //------------------------------------------------------------------------------
7 // Element reverse
8 //------------------------------------------------------------------------------
9          rev64 v0.16b, v31.16b
10          rev64 v2.8h, v4.8h
11          rev64 v6.4s, v8.4s
12          rev64 v1.8b, v9.8b
13          rev64 v13.4h, v21.4h
14          rev64 v4.2s, v0.2s
15
16 // CHECK:       rev64   v0.16b, v31.16b         // encoding: [0xe0,0x0b,0x20,0x4e]
17 // CHECK:       rev64   v2.8h, v4.8h            // encoding: [0x82,0x08,0x60,0x4e]
18 // CHECK:       rev64   v6.4s, v8.4s            // encoding: [0x06,0x09,0xa0,0x4e]
19 // CHECK:       rev64   v1.8b, v9.8b            // encoding: [0x21,0x09,0x20,0x0e]
20 // CHECK:       rev64   v13.4h, v21.4h          // encoding: [0xad,0x0a,0x60,0x0e]
21 // CHECK:       rev64   v4.2s, v0.2s            // encoding: [0x04,0x08,0xa0,0x0e]
22
23          rev32 v30.16b, v31.16b
24          rev32 v4.8h, v7.8h
25          rev32 v21.8b, v1.8b
26          rev32 v0.4h, v9.4h
27
28 // CHECK:       rev32   v30.16b, v31.16b        // encoding: [0xfe,0x0b,0x20,0x6e]
29 // CHECK:       rev32   v4.8h, v7.8h            // encoding: [0xe4,0x08,0x60,0x6e]
30 // CHECK:       rev32   v21.8b, v1.8b           // encoding: [0x35,0x08,0x20,0x2e]
31 // CHECK:       rev32   v0.4h, v9.4h            // encoding: [0x20,0x09,0x60,0x2e]
32
33          rev16 v30.16b, v31.16b
34          rev16 v21.8b, v1.8b
35
36 // CHECK:       rev16   v30.16b, v31.16b        // encoding: [0xfe,0x1b,0x20,0x4e]
37 // CHECK:       rev16   v21.8b, v1.8b           // encoding: [0x35,0x18,0x20,0x0e]
38
39 //------------------------------------------------------------------------------
40 // Signed integer pairwise add long
41 //------------------------------------------------------------------------------
42
43          saddlp v3.8h, v21.16b
44          saddlp v8.4h, v5.8b
45          saddlp v9.4s, v1.8h
46          saddlp v0.2s, v1.4h
47          saddlp v12.2d, v4.4s
48          saddlp v17.1d, v28.2s
49
50 // CHECK:       saddlp  v3.8h, v21.16b          // encoding: [0xa3,0x2a,0x20,0x4e]
51 // CHECK:       saddlp  v8.4h, v5.8b            // encoding: [0xa8,0x28,0x20,0x0e]
52 // CHECK:       saddlp  v9.4s, v1.8h            // encoding: [0x29,0x28,0x60,0x4e]
53 // CHECK:       saddlp  v0.2s, v1.4h            // encoding: [0x20,0x28,0x60,0x0e]
54 // CHECK:       saddlp  v12.2d, v4.4s           // encoding: [0x8c,0x28,0xa0,0x4e]
55 // CHECK:       saddlp  v17.1d, v28.2s          // encoding: [0x91,0x2b,0xa0,0x0e]
56
57 //------------------------------------------------------------------------------
58 // Unsigned integer pairwise add long
59 //------------------------------------------------------------------------------
60
61          uaddlp v3.8h, v21.16b
62          uaddlp v8.4h, v5.8b
63          uaddlp v9.4s, v1.8h
64          uaddlp v0.2s, v1.4h
65          uaddlp v12.2d, v4.4s
66          uaddlp v17.1d, v28.2s
67
68 // CHECK:       uaddlp  v3.8h, v21.16b          // encoding: [0xa3,0x2a,0x20,0x6e]
69 // CHECK:       uaddlp  v8.4h, v5.8b            // encoding: [0xa8,0x28,0x20,0x2e]
70 // CHECK:       uaddlp  v9.4s, v1.8h            // encoding: [0x29,0x28,0x60,0x6e]
71 // CHECK:       uaddlp  v0.2s, v1.4h            // encoding: [0x20,0x28,0x60,0x2e]
72 // CHECK:       uaddlp  v12.2d, v4.4s           // encoding: [0x8c,0x28,0xa0,0x6e]
73 // CHECK:       uaddlp  v17.1d, v28.2s          // encoding: [0x91,0x2b,0xa0,0x2e]
74
75 //------------------------------------------------------------------------------
76 // Signed integer pairwise add and accumulate long
77 //------------------------------------------------------------------------------
78
79          sadalp v3.8h, v21.16b
80          sadalp v8.4h, v5.8b
81          sadalp v9.4s, v1.8h
82          sadalp v0.2s, v1.4h
83          sadalp v12.2d, v4.4s
84          sadalp v17.1d, v28.2s
85
86 // CHECK:       sadalp  v3.8h, v21.16b          // encoding: [0xa3,0x6a,0x20,0x4e]
87 // CHECK:       sadalp  v8.4h, v5.8b            // encoding: [0xa8,0x68,0x20,0x0e]
88 // CHECK:       sadalp  v9.4s, v1.8h            // encoding: [0x29,0x68,0x60,0x4e]
89 // CHECK:       sadalp  v0.2s, v1.4h            // encoding: [0x20,0x68,0x60,0x0e]
90 // CHECK:       sadalp  v12.2d, v4.4s           // encoding: [0x8c,0x68,0xa0,0x4e]
91 // CHECK:       sadalp  v17.1d, v28.2s          // encoding: [0x91,0x6b,0xa0,0x0e]
92
93 //------------------------------------------------------------------------------
94 // Unsigned integer pairwise add and accumulate long
95 //------------------------------------------------------------------------------
96
97          uadalp v3.8h, v21.16b
98          uadalp v8.4h, v5.8b
99          uadalp v9.4s, v1.8h
100          uadalp v0.2s, v1.4h
101          uadalp v12.2d, v4.4s
102          uadalp v17.1d, v28.2s
103
104 // CHECK:       uadalp  v3.8h, v21.16b          // encoding: [0xa3,0x6a,0x20,0x6e]
105 // CHECK:       uadalp  v8.4h, v5.8b            // encoding: [0xa8,0x68,0x20,0x2e]
106 // CHECK:       uadalp  v9.4s, v1.8h            // encoding: [0x29,0x68,0x60,0x6e]
107 // CHECK:       uadalp  v0.2s, v1.4h            // encoding: [0x20,0x68,0x60,0x2e]
108 // CHECK:       uadalp  v12.2d, v4.4s           // encoding: [0x8c,0x68,0xa0,0x6e]
109 // CHECK:       uadalp  v17.1d, v28.2s          // encoding: [0x91,0x6b,0xa0,0x2e]
110
111 //------------------------------------------------------------------------------
112 // Signed integer saturating accumulate of unsigned value
113 //------------------------------------------------------------------------------
114
115          suqadd v0.16b, v31.16b
116          suqadd v2.8h, v4.8h
117          suqadd v6.4s, v8.4s
118          suqadd v6.2d, v8.2d
119          suqadd v1.8b, v9.8b
120          suqadd v13.4h, v21.4h
121          suqadd v4.2s, v0.2s
122
123 // CHECK:       suqadd  v0.16b, v31.16b         // encoding: [0xe0,0x3b,0x20,0x4e]
124 // CHECK:       suqadd  v2.8h, v4.8h            // encoding: [0x82,0x38,0x60,0x4e]
125 // CHECK:       suqadd  v6.4s, v8.4s            // encoding: [0x06,0x39,0xa0,0x4e]
126 // CHECK:       suqadd  v6.2d, v8.2d            // encoding: [0x06,0x39,0xe0,0x4e]
127 // CHECK:       suqadd  v1.8b, v9.8b            // encoding: [0x21,0x39,0x20,0x0e]
128 // CHECK:       suqadd  v13.4h, v21.4h          // encoding: [0xad,0x3a,0x60,0x0e]
129 // CHECK:       suqadd  v4.2s, v0.2s            // encoding: [0x04,0x38,0xa0,0x0e]
130
131 //------------------------------------------------------------------------------
132 // Unsigned integer saturating accumulate of signed value
133 //------------------------------------------------------------------------------
134
135          usqadd v0.16b, v31.16b
136          usqadd v2.8h, v4.8h
137          usqadd v6.4s, v8.4s
138          usqadd v6.2d, v8.2d
139          usqadd v1.8b, v9.8b
140          usqadd v13.4h, v21.4h
141          usqadd v4.2s, v0.2s
142
143 // CHECK:       usqadd  v0.16b, v31.16b         // encoding: [0xe0,0x3b,0x20,0x6e]
144 // CHECK:       usqadd  v2.8h, v4.8h            // encoding: [0x82,0x38,0x60,0x6e]
145 // CHECK:       usqadd  v6.4s, v8.4s            // encoding: [0x06,0x39,0xa0,0x6e]
146 // CHECK:       usqadd  v6.2d, v8.2d            // encoding: [0x06,0x39,0xe0,0x6e]
147 // CHECK:       usqadd  v1.8b, v9.8b            // encoding: [0x21,0x39,0x20,0x2e]
148 // CHECK:       usqadd  v13.4h, v21.4h          // encoding: [0xad,0x3a,0x60,0x2e]
149 // CHECK:       usqadd  v4.2s, v0.2s            // encoding: [0x04,0x38,0xa0,0x2e]
150
151 //------------------------------------------------------------------------------
152 // Integer saturating absolute
153 //------------------------------------------------------------------------------
154
155          sqabs v0.16b, v31.16b
156          sqabs v2.8h, v4.8h
157          sqabs v6.4s, v8.4s
158          sqabs v6.2d, v8.2d
159          sqabs v1.8b, v9.8b
160          sqabs v13.4h, v21.4h
161          sqabs v4.2s, v0.2s
162
163 // CHECK:       sqabs   v0.16b, v31.16b         // encoding: [0xe0,0x7b,0x20,0x4e]
164 // CHECK:       sqabs   v2.8h, v4.8h            // encoding: [0x82,0x78,0x60,0x4e]
165 // CHECK:       sqabs   v6.4s, v8.4s            // encoding: [0x06,0x79,0xa0,0x4e]
166 // CHECK:       sqabs   v6.2d, v8.2d            // encoding: [0x06,0x79,0xe0,0x4e]
167 // CHECK:       sqabs   v1.8b, v9.8b            // encoding: [0x21,0x79,0x20,0x0e]
168 // CHECK:       sqabs   v13.4h, v21.4h          // encoding: [0xad,0x7a,0x60,0x0e]
169 // CHECK:       sqabs   v4.2s, v0.2s            // encoding: [0x04,0x78,0xa0,0x0e]
170
171 //------------------------------------------------------------------------------
172 // Signed integer saturating negate
173 //------------------------------------------------------------------------------
174
175          sqneg v0.16b, v31.16b
176          sqneg v2.8h, v4.8h
177          sqneg v6.4s, v8.4s
178          sqneg v6.2d, v8.2d
179          sqneg v1.8b, v9.8b
180          sqneg v13.4h, v21.4h
181          sqneg v4.2s, v0.2s
182
183 // CHECK:       sqneg   v0.16b, v31.16b         // encoding: [0xe0,0x7b,0x20,0x6e]
184 // CHECK:       sqneg   v2.8h, v4.8h            // encoding: [0x82,0x78,0x60,0x6e]
185 // CHECK:       sqneg   v6.4s, v8.4s            // encoding: [0x06,0x79,0xa0,0x6e]
186 // CHECK:       sqneg   v6.2d, v8.2d            // encoding: [0x06,0x79,0xe0,0x6e]
187 // CHECK:       sqneg   v1.8b, v9.8b            // encoding: [0x21,0x79,0x20,0x2e]
188 // CHECK:       sqneg   v13.4h, v21.4h          // encoding: [0xad,0x7a,0x60,0x2e]
189 // CHECK:       sqneg   v4.2s, v0.2s            // encoding: [0x04,0x78,0xa0,0x2e]
190
191 //------------------------------------------------------------------------------
192 // Integer absolute
193 //------------------------------------------------------------------------------
194
195          abs v0.16b, v31.16b
196          abs v2.8h, v4.8h
197          abs v6.4s, v8.4s
198          abs v6.2d, v8.2d
199          abs v1.8b, v9.8b
200          abs v13.4h, v21.4h
201          abs v4.2s, v0.2s
202
203 // CHECK:       abs     v0.16b, v31.16b         // encoding: [0xe0,0xbb,0x20,0x4e]
204 // CHECK:       abs     v2.8h, v4.8h            // encoding: [0x82,0xb8,0x60,0x4e]
205 // CHECK:       abs     v6.4s, v8.4s            // encoding: [0x06,0xb9,0xa0,0x4e]
206 // CHECK:       abs     v6.2d, v8.2d            // encoding: [0x06,0xb9,0xe0,0x4e]
207 // CHECK:       abs     v1.8b, v9.8b            // encoding: [0x21,0xb9,0x20,0x0e]
208 // CHECK:       abs     v13.4h, v21.4h          // encoding: [0xad,0xba,0x60,0x0e]
209 // CHECK:       abs     v4.2s, v0.2s            // encoding: [0x04,0xb8,0xa0,0x0e]
210
211 //------------------------------------------------------------------------------
212 // Integer negate
213 //------------------------------------------------------------------------------
214
215          neg v0.16b, v31.16b
216          neg v2.8h, v4.8h
217          neg v6.4s, v8.4s
218          neg v6.2d, v8.2d
219          neg v1.8b, v9.8b
220          neg v13.4h, v21.4h
221          neg v4.2s, v0.2s
222
223 // CHECK:       neg     v0.16b, v31.16b         // encoding: [0xe0,0xbb,0x20,0x6e]
224 // CHECK:       neg     v2.8h, v4.8h            // encoding: [0x82,0xb8,0x60,0x6e]
225 // CHECK:       neg     v6.4s, v8.4s            // encoding: [0x06,0xb9,0xa0,0x6e]
226 // CHECK:       neg     v6.2d, v8.2d            // encoding: [0x06,0xb9,0xe0,0x6e]
227 // CHECK:       neg     v1.8b, v9.8b            // encoding: [0x21,0xb9,0x20,0x2e]
228 // CHECK:       neg     v13.4h, v21.4h          // encoding: [0xad,0xba,0x60,0x2e]
229 // CHECK:       neg     v4.2s, v0.2s            // encoding: [0x04,0xb8,0xa0,0x2e]
230
231 //------------------------------------------------------------------------------
232 // Integer count leading sign bits
233 //------------------------------------------------------------------------------
234
235          cls v0.16b, v31.16b
236          cls v2.8h, v4.8h
237          cls v6.4s, v8.4s
238          cls v1.8b, v9.8b
239          cls v13.4h, v21.4h
240          cls v4.2s, v0.2s
241
242 // CHECK:       cls     v0.16b, v31.16b         // encoding: [0xe0,0x4b,0x20,0x4e]
243 // CHECK:       cls     v2.8h, v4.8h            // encoding: [0x82,0x48,0x60,0x4e]
244 // CHECK:       cls     v6.4s, v8.4s            // encoding: [0x06,0x49,0xa0,0x4e]
245 // CHECK:       cls     v1.8b, v9.8b            // encoding: [0x21,0x49,0x20,0x0e]
246 // CHECK:       cls     v13.4h, v21.4h          // encoding: [0xad,0x4a,0x60,0x0e]
247 // CHECK:       cls     v4.2s, v0.2s            // encoding: [0x04,0x48,0xa0,0x0e]
248
249 //------------------------------------------------------------------------------
250 // Integer count leading zeros
251 //------------------------------------------------------------------------------
252
253          clz v0.16b, v31.16b
254          clz v2.8h, v4.8h
255          clz v6.4s, v8.4s
256          clz v1.8b, v9.8b
257          clz v13.4h, v21.4h
258          clz v4.2s, v0.2s
259
260 // CHECK:       clz     v0.16b, v31.16b         // encoding: [0xe0,0x4b,0x20,0x6e]
261 // CHECK:       clz     v2.8h, v4.8h            // encoding: [0x82,0x48,0x60,0x6e]
262 // CHECK:       clz     v6.4s, v8.4s            // encoding: [0x06,0x49,0xa0,0x6e]
263 // CHECK:       clz     v1.8b, v9.8b            // encoding: [0x21,0x49,0x20,0x2e]
264 // CHECK:       clz     v13.4h, v21.4h          // encoding: [0xad,0x4a,0x60,0x2e]
265 // CHECK:       clz     v4.2s, v0.2s            // encoding: [0x04,0x48,0xa0,0x2e]
266
267 //------------------------------------------------------------------------------
268 // Population count
269 //------------------------------------------------------------------------------
270
271          cnt v0.16b, v31.16b
272          cnt v1.8b, v9.8b
273
274 // CHECK:       cnt     v0.16b, v31.16b         // encoding: [0xe0,0x5b,0x20,0x4e]
275 // CHECK:       cnt     v1.8b, v9.8b            // encoding: [0x21,0x59,0x20,0x0e]
276
277 //------------------------------------------------------------------------------
278 // Bitwise NOT
279 //------------------------------------------------------------------------------
280
281          not v0.16b, v31.16b
282          not v1.8b, v9.8b
283
284 // CHECK: {{mvn|not}} v0.16b, v31.16b         // encoding: [0xe0,0x5b,0x20,0x6e]
285 // CHECK: {{mvn|not}} v1.8b, v9.8b            // encoding: [0x21,0x59,0x20,0x2e]
286
287 //------------------------------------------------------------------------------
288 // Bitwise reverse
289 //------------------------------------------------------------------------------
290
291          rbit v0.16b, v31.16b
292          rbit v1.8b, v9.8b
293
294 // CHECK:       rbit    v0.16b, v31.16b         // encoding: [0xe0,0x5b,0x60,0x6e]
295 // CHECK:       rbit    v1.8b, v9.8b            // encoding: [0x21,0x59,0x60,0x2e]
296
297 //------------------------------------------------------------------------------
298 // Floating-point absolute
299 //------------------------------------------------------------------------------
300
301          fabs v4.4h, v0.4h
302          fabs v6.8h, v8.8h
303          fabs v6.4s, v8.4s
304          fabs v6.2d, v8.2d
305          fabs v4.2s, v0.2s
306
307 // CHECK: fabs    v4.4h, v0.4h            // encoding: [0x04,0xf8,0xf8,0x0e]
308 // CHECK: fabs    v6.8h, v8.8h            // encoding: [0x06,0xf9,0xf8,0x4e]
309 // CHECK:       fabs    v6.4s, v8.4s            // encoding: [0x06,0xf9,0xa0,0x4e]
310 // CHECK:       fabs    v6.2d, v8.2d            // encoding: [0x06,0xf9,0xe0,0x4e]
311 // CHECK:       fabs    v4.2s, v0.2s            // encoding: [0x04,0xf8,0xa0,0x0e]
312
313 //------------------------------------------------------------------------------
314 // Floating-point negate
315 //------------------------------------------------------------------------------
316
317          fneg v4.4h, v0.4h
318          fneg v6.8h, v8.8h
319          fneg v6.4s, v8.4s
320          fneg v6.2d, v8.2d
321          fneg v4.2s, v0.2s
322
323 // CHECK: fneg    v4.4h, v0.4h            // encoding: [0x04,0xf8,0xf8,0x2e]
324 // CHECK: fneg    v6.8h, v8.8h            // encoding: [0x06,0xf9,0xf8,0x6e]
325 // CHECK:       fneg    v6.4s, v8.4s            // encoding: [0x06,0xf9,0xa0,0x6e]
326 // CHECK:       fneg    v6.2d, v8.2d            // encoding: [0x06,0xf9,0xe0,0x6e]
327 // CHECK:       fneg    v4.2s, v0.2s            // encoding: [0x04,0xf8,0xa0,0x2e]
328
329 //------------------------------------------------------------------------------
330 // Integer extract and narrow
331 //------------------------------------------------------------------------------
332
333          xtn2 v0.16b, v31.8h
334          xtn2 v2.8h, v4.4s
335          xtn2 v6.4s, v8.2d
336          xtn v1.8b, v9.8h
337          xtn v13.4h, v21.4s
338          xtn v4.2s, v0.2d
339
340 // CHECK:       xtn2    v0.16b, v31.8h          // encoding: [0xe0,0x2b,0x21,0x4e]
341 // CHECK:       xtn2    v2.8h, v4.4s            // encoding: [0x82,0x28,0x61,0x4e]
342 // CHECK:       xtn2    v6.4s, v8.2d            // encoding: [0x06,0x29,0xa1,0x4e]
343 // CHECK:       xtn     v1.8b, v9.8h            // encoding: [0x21,0x29,0x21,0x0e]
344 // CHECK:       xtn     v13.4h, v21.4s          // encoding: [0xad,0x2a,0x61,0x0e]
345 // CHECK:       xtn     v4.2s, v0.2d            // encoding: [0x04,0x28,0xa1,0x0e]
346
347 //------------------------------------------------------------------------------
348 // Signed integer saturating extract and unsigned narrow
349 //------------------------------------------------------------------------------
350
351          sqxtun2 v0.16b, v31.8h
352          sqxtun2 v2.8h, v4.4s
353          sqxtun2 v6.4s, v8.2d
354          sqxtun v1.8b, v9.8h
355          sqxtun v13.4h, v21.4s
356          sqxtun v4.2s, v0.2d
357
358 // CHECK:       sqxtun2 v0.16b, v31.8h          // encoding: [0xe0,0x2b,0x21,0x6e]
359 // CHECK:       sqxtun2 v2.8h, v4.4s            // encoding: [0x82,0x28,0x61,0x6e]
360 // CHECK:       sqxtun2 v6.4s, v8.2d            // encoding: [0x06,0x29,0xa1,0x6e]
361 // CHECK:       sqxtun  v1.8b, v9.8h            // encoding: [0x21,0x29,0x21,0x2e]
362 // CHECK:       sqxtun  v13.4h, v21.4s          // encoding: [0xad,0x2a,0x61,0x2e]
363 // CHECK:       sqxtun  v4.2s, v0.2d            // encoding: [0x04,0x28,0xa1,0x2e]
364
365 //------------------------------------------------------------------------------
366 // Signed integer saturating extract and narrow
367 //------------------------------------------------------------------------------
368
369          sqxtn2 v0.16b, v31.8h
370          sqxtn2 v2.8h, v4.4s
371          sqxtn2 v6.4s, v8.2d
372          sqxtn v1.8b, v9.8h
373          sqxtn v13.4h, v21.4s
374          sqxtn v4.2s, v0.2d
375
376 // CHECK:       sqxtn2  v0.16b, v31.8h          // encoding: [0xe0,0x4b,0x21,0x4e]
377 // CHECK:       sqxtn2  v2.8h, v4.4s            // encoding: [0x82,0x48,0x61,0x4e]
378 // CHECK:       sqxtn2  v6.4s, v8.2d            // encoding: [0x06,0x49,0xa1,0x4e]
379 // CHECK:       sqxtn   v1.8b, v9.8h            // encoding: [0x21,0x49,0x21,0x0e]
380 // CHECK:       sqxtn   v13.4h, v21.4s          // encoding: [0xad,0x4a,0x61,0x0e]
381 // CHECK:       sqxtn   v4.2s, v0.2d            // encoding: [0x04,0x48,0xa1,0x0e]
382
383 //------------------------------------------------------------------------------
384 // Unsigned integer saturating extract and narrow
385 //------------------------------------------------------------------------------
386
387          uqxtn2 v0.16b, v31.8h
388          uqxtn2 v2.8h, v4.4s
389          uqxtn2 v6.4s, v8.2d
390          uqxtn v1.8b, v9.8h
391          uqxtn v13.4h, v21.4s
392          uqxtn v4.2s, v0.2d
393
394 // CHECK:       uqxtn2  v0.16b, v31.8h          // encoding: [0xe0,0x4b,0x21,0x6e]
395 // CHECK:       uqxtn2  v2.8h, v4.4s            // encoding: [0x82,0x48,0x61,0x6e]
396 // CHECK:       uqxtn2  v6.4s, v8.2d            // encoding: [0x06,0x49,0xa1,0x6e]
397 // CHECK:       uqxtn   v1.8b, v9.8h            // encoding: [0x21,0x49,0x21,0x2e]
398 // CHECK:       uqxtn   v13.4h, v21.4s          // encoding: [0xad,0x4a,0x61,0x2e]
399 // CHECK:       uqxtn   v4.2s, v0.2d            // encoding: [0x04,0x48,0xa1,0x2e]
400
401 //------------------------------------------------------------------------------
402 // Integer shift left long
403 //------------------------------------------------------------------------------
404
405          shll2 v2.8h, v4.16b, #8
406          shll2 v6.4s, v8.8h, #16
407          shll2 v6.2d, v8.4s, #32
408          shll v2.8h, v4.8b, #8
409          shll v6.4s, v8.4h, #16
410          shll v6.2d, v8.2s, #32
411
412 // CHECK:       shll2   v2.8h, v4.16b, #8      // encoding: [0x82,0x38,0x21,0x6e]
413 // CHECK:       shll2   v6.4s, v8.8h, #16      // encoding: [0x06,0x39,0x61,0x6e]
414 // CHECK:       shll2   v6.2d, v8.4s, #32      // encoding: [0x06,0x39,0xa1,0x6e]
415 // CHECK:       shll    v2.8h, v4.8b, #8       // encoding: [0x82,0x38,0x21,0x2e]
416 // CHECK:       shll    v6.4s, v8.4h, #16      // encoding: [0x06,0x39,0x61,0x2e]
417 // CHECK:       shll    v6.2d, v8.2s, #32      // encoding: [0x06,0x39,0xa1,0x2e]
418
419 //------------------------------------------------------------------------------
420 // Floating-point convert downsize
421 //------------------------------------------------------------------------------
422
423          fcvtn2 v2.8h, v4.4s
424          fcvtn2 v6.4s, v8.2d
425          fcvtn v13.4h, v21.4s
426          fcvtn v4.2s, v0.2d
427
428 // CHECK:       fcvtn2  v2.8h, v4.4s            // encoding: [0x82,0x68,0x21,0x4e]
429 // CHECK:       fcvtn2  v6.4s, v8.2d            // encoding: [0x06,0x69,0x61,0x4e]
430 // CHECK:       fcvtn   v13.4h, v21.4s          // encoding: [0xad,0x6a,0x21,0x0e]
431 // CHECK:       fcvtn   v4.2s, v0.2d            // encoding: [0x04,0x68,0x61,0x0e]
432
433 //------------------------------------------------------------------------------
434 // Floating-point convert downsize with inexact
435 //------------------------------------------------------------------------------
436
437          fcvtxn2 v6.4s, v8.2d
438          fcvtxn v4.2s, v0.2d
439
440 // CHECK:       fcvtxn2 v6.4s, v8.2d            // encoding: [0x06,0x69,0x61,0x6e]
441 // CHECK:       fcvtxn  v4.2s, v0.2d            // encoding: [0x04,0x68,0x61,0x2e]
442
443 //------------------------------------------------------------------------------
444 // Floating-point convert upsize
445 //------------------------------------------------------------------------------
446
447          fcvtl v9.4s, v1.4h
448          fcvtl v0.2d, v1.2s
449          fcvtl2 v12.4s, v4.8h
450          fcvtl2 v17.2d, v28.4s
451
452 // CHECK:       fcvtl   v9.4s, v1.4h            // encoding: [0x29,0x78,0x21,0x0e]
453 // CHECK:       fcvtl   v0.2d, v1.2s            // encoding: [0x20,0x78,0x61,0x0e]
454 // CHECK:       fcvtl2  v12.4s, v4.8h           // encoding: [0x8c,0x78,0x21,0x4e]
455 // CHECK:       fcvtl2  v17.2d, v28.4s          // encoding: [0x91,0x7b,0x61,0x4e]
456
457 //------------------------------------------------------------------------------
458 // Floating-point round to integral
459 //------------------------------------------------------------------------------
460
461          frintn v4.4h, v0.4h
462          frintn v6.8h, v8.8h
463          frintn v6.4s, v8.4s
464          frintn v6.2d, v8.2d
465          frintn v4.2s, v0.2s
466
467 // CHECK: frintn  v4.4h, v0.4h            // encoding: [0x04,0x88,0x79,0x0e]
468 // CHECK: frintn  v6.8h, v8.8h            // encoding: [0x06,0x89,0x79,0x4e]
469 // CHECK:       frintn  v6.4s, v8.4s            // encoding: [0x06,0x89,0x21,0x4e]
470 // CHECK:       frintn  v6.2d, v8.2d            // encoding: [0x06,0x89,0x61,0x4e]
471 // CHECK:       frintn  v4.2s, v0.2s            // encoding: [0x04,0x88,0x21,0x0e]
472
473          frinta v4.4h, v0.4h
474          frinta v6.8h, v8.8h
475          frinta v6.4s, v8.4s
476          frinta v6.2d, v8.2d
477          frinta v4.2s, v0.2s
478
479 // CHECK: frinta  v4.4h, v0.4h            // encoding: [0x04,0x88,0x79,0x2e]
480 // CHECK: frinta  v6.8h, v8.8h            // encoding: [0x06,0x89,0x79,0x6e]
481 // CHECK:       frinta  v6.4s, v8.4s            // encoding: [0x06,0x89,0x21,0x6e]
482 // CHECK:       frinta  v6.2d, v8.2d            // encoding: [0x06,0x89,0x61,0x6e]
483 // CHECK:       frinta  v4.2s, v0.2s            // encoding: [0x04,0x88,0x21,0x2e]
484
485          frintp v4.4h, v0.4h
486          frintp v6.8h, v8.8h
487          frintp v6.4s, v8.4s
488          frintp v6.2d, v8.2d
489          frintp v4.2s, v0.2s
490
491 // CHECK: frintp  v4.4h, v0.4h            // encoding: [0x04,0x88,0xf9,0x0e]
492 // CHECK: frintp  v6.8h, v8.8h            // encoding: [0x06,0x89,0xf9,0x4e]
493 // CHECK:       frintp  v6.4s, v8.4s            // encoding: [0x06,0x89,0xa1,0x4e]
494 // CHECK:       frintp  v6.2d, v8.2d            // encoding: [0x06,0x89,0xe1,0x4e]
495 // CHECK:       frintp  v4.2s, v0.2s            // encoding: [0x04,0x88,0xa1,0x0e]
496
497          frintm v4.4h, v0.4h
498          frintm v6.8h, v8.8h
499          frintm v6.4s, v8.4s
500          frintm v6.2d, v8.2d
501          frintm v4.2s, v0.2s
502
503 // CHECK: frintm  v4.4h, v0.4h            // encoding: [0x04,0x98,0x79,0x0e]
504 // CHECK: frintm  v6.8h, v8.8h            // encoding: [0x06,0x99,0x79,0x4e]
505 // CHECK:       frintm  v6.4s, v8.4s            // encoding: [0x06,0x99,0x21,0x4e]
506 // CHECK:       frintm  v6.2d, v8.2d            // encoding: [0x06,0x99,0x61,0x4e]
507 // CHECK:       frintm  v4.2s, v0.2s            // encoding: [0x04,0x98,0x21,0x0e]
508
509          frintx v4.4h, v0.4h
510          frintx v6.8h, v8.8h
511          frintx v6.4s, v8.4s
512          frintx v6.2d, v8.2d
513          frintx v4.2s, v0.2s
514
515 // CHECK: frintx  v4.4h, v0.4h            // encoding: [0x04,0x98,0x79,0x2e]
516 // CHECK: frintx  v6.8h, v8.8h            // encoding: [0x06,0x99,0x79,0x6e]
517 // CHECK:       frintx  v6.4s, v8.4s            // encoding: [0x06,0x99,0x21,0x6e]
518 // CHECK:       frintx  v6.2d, v8.2d            // encoding: [0x06,0x99,0x61,0x6e]
519 // CHECK:       frintx  v4.2s, v0.2s            // encoding: [0x04,0x98,0x21,0x2e]
520
521          frintz v4.4h, v0.4h
522          frintz v6.8h, v8.8h
523          frintz v6.4s, v8.4s
524          frintz v6.2d, v8.2d
525          frintz v4.2s, v0.2s
526
527 // CHECK: frintz  v4.4h, v0.4h            // encoding: [0x04,0x98,0xf9,0x0e]
528 // CHECK: frintz  v6.8h, v8.8h            // encoding: [0x06,0x99,0xf9,0x4e]
529 // CHECK:       frintz  v6.4s, v8.4s            // encoding: [0x06,0x99,0xa1,0x4e]
530 // CHECK:       frintz  v6.2d, v8.2d            // encoding: [0x06,0x99,0xe1,0x4e]
531 // CHECK:       frintz  v4.2s, v0.2s            // encoding: [0x04,0x98,0xa1,0x0e]
532
533          frinti v4.4h, v0.4h
534          frinti v6.8h, v8.8h
535          frinti v6.4s, v8.4s
536          frinti v6.2d, v8.2d
537          frinti v4.2s, v0.2s
538
539 // CHECK: frinti  v4.4h, v0.4h            // encoding: [0x04,0x98,0xf9,0x2e]
540 // CHECK: frinti  v6.8h, v8.8h            // encoding: [0x06,0x99,0xf9,0x6e]
541 // CHECK:       frinti  v6.4s, v8.4s            // encoding: [0x06,0x99,0xa1,0x6e]
542 // CHECK:       frinti  v6.2d, v8.2d            // encoding: [0x06,0x99,0xe1,0x6e]
543 // CHECK:       frinti  v4.2s, v0.2s            // encoding: [0x04,0x98,0xa1,0x2e]
544
545 //------------------------------------------------------------------------------
546 // Floating-point convert to integer
547 //------------------------------------------------------------------------------
548
549          fcvtns v4.4h, v0.4h
550          fcvtns v6.8h, v8.8h
551          fcvtns v6.4s, v8.4s
552          fcvtns v6.2d, v8.2d
553          fcvtns v4.2s, v0.2s
554
555 // CHECK: fcvtns  v4.4h, v0.4h            // encoding: [0x04,0xa8,0x79,0x0e]
556 // CHECK: fcvtns  v6.8h, v8.8h            // encoding: [0x06,0xa9,0x79,0x4e]
557 // CHECK:       fcvtns  v6.4s, v8.4s            // encoding: [0x06,0xa9,0x21,0x4e]
558 // CHECK:       fcvtns  v6.2d, v8.2d            // encoding: [0x06,0xa9,0x61,0x4e]
559 // CHECK:       fcvtns  v4.2s, v0.2s            // encoding: [0x04,0xa8,0x21,0x0e]
560
561          fcvtnu v4.4h, v0.4h
562          fcvtnu v6.8h, v8.8h
563          fcvtnu v6.4s, v8.4s
564          fcvtnu v6.2d, v8.2d
565          fcvtnu v4.2s, v0.2s
566
567 // CHECK: fcvtnu  v4.4h, v0.4h            // encoding: [0x04,0xa8,0x79,0x2e]
568 // CHECK: fcvtnu  v6.8h, v8.8h            // encoding: [0x06,0xa9,0x79,0x6e]
569 // CHECK:       fcvtnu  v6.4s, v8.4s            // encoding: [0x06,0xa9,0x21,0x6e]
570 // CHECK:       fcvtnu  v6.2d, v8.2d            // encoding: [0x06,0xa9,0x61,0x6e]
571 // CHECK:       fcvtnu  v4.2s, v0.2s            // encoding: [0x04,0xa8,0x21,0x2e]
572
573          fcvtps v4.4h, v0.4h
574          fcvtps v6.8h, v8.8h
575          fcvtps v6.4s, v8.4s
576          fcvtps v6.2d, v8.2d
577          fcvtps v4.2s, v0.2s
578
579 // CHECK: fcvtps  v4.4h, v0.4h            // encoding: [0x04,0xa8,0xf9,0x0e]
580 // CHECK: fcvtps  v6.8h, v8.8h            // encoding: [0x06,0xa9,0xf9,0x4e]
581 // CHECK:       fcvtps  v6.4s, v8.4s            // encoding: [0x06,0xa9,0xa1,0x4e]
582 // CHECK:       fcvtps  v6.2d, v8.2d            // encoding: [0x06,0xa9,0xe1,0x4e]
583 // CHECK:       fcvtps  v4.2s, v0.2s            // encoding: [0x04,0xa8,0xa1,0x0e]
584
585          fcvtpu v4.4h, v0.4h
586          fcvtpu v6.8h, v8.8h
587          fcvtpu v6.4s, v8.4s
588          fcvtpu v6.2d, v8.2d
589          fcvtpu v4.2s, v0.2s
590
591 // CHECK: fcvtpu  v4.4h, v0.4h            // encoding: [0x04,0xa8,0xf9,0x2e]
592 // CHECK: fcvtpu  v6.8h, v8.8h            // encoding: [0x06,0xa9,0xf9,0x6e]
593 // CHECK:       fcvtpu  v6.4s, v8.4s            // encoding: [0x06,0xa9,0xa1,0x6e]
594 // CHECK:       fcvtpu  v6.2d, v8.2d            // encoding: [0x06,0xa9,0xe1,0x6e]
595 // CHECK:       fcvtpu  v4.2s, v0.2s            // encoding: [0x04,0xa8,0xa1,0x2e]
596
597          fcvtms v4.4h, v0.4h
598          fcvtms v6.8h, v8.8h
599          fcvtms v6.4s, v8.4s
600          fcvtms v6.2d, v8.2d
601          fcvtms v4.2s, v0.2s
602
603 // CHECK: fcvtms  v4.4h, v0.4h            // encoding: [0x04,0xb8,0x79,0x0e]
604 // CHECK: fcvtms  v6.8h, v8.8h            // encoding: [0x06,0xb9,0x79,0x4e]
605 // CHECK:       fcvtms  v6.4s, v8.4s            // encoding: [0x06,0xb9,0x21,0x4e]
606 // CHECK:       fcvtms  v6.2d, v8.2d            // encoding: [0x06,0xb9,0x61,0x4e]
607 // CHECK:       fcvtms  v4.2s, v0.2s            // encoding: [0x04,0xb8,0x21,0x0e]
608
609          fcvtmu v4.4h, v0.4h
610          fcvtmu v6.8h, v8.8h
611          fcvtmu v6.4s, v8.4s
612          fcvtmu v6.2d, v8.2d
613          fcvtmu v4.2s, v0.2s
614
615 // CHECK: fcvtmu  v4.4h, v0.4h            // encoding: [0x04,0xb8,0x79,0x2e]
616 // CHECK: fcvtmu  v6.8h, v8.8h            // encoding: [0x06,0xb9,0x79,0x6e]
617 // CHECK:       fcvtmu  v6.4s, v8.4s            // encoding: [0x06,0xb9,0x21,0x6e]
618 // CHECK:       fcvtmu  v6.2d, v8.2d            // encoding: [0x06,0xb9,0x61,0x6e]
619 // CHECK:       fcvtmu  v4.2s, v0.2s            // encoding: [0x04,0xb8,0x21,0x2e]
620
621          fcvtzs v4.4h, v0.4h
622          fcvtzs v6.8h, v8.8h
623          fcvtzs v6.4s, v8.4s
624          fcvtzs v6.2d, v8.2d
625          fcvtzs v4.2s, v0.2s
626
627 // CHECK: fcvtzs  v4.4h, v0.4h            // encoding: [0x04,0xb8,0xf9,0x0e]
628 // CHECK: fcvtzs  v6.8h, v8.8h            // encoding: [0x06,0xb9,0xf9,0x4e]
629 // CHECK:       fcvtzs  v6.4s, v8.4s            // encoding: [0x06,0xb9,0xa1,0x4e]
630 // CHECK:       fcvtzs  v6.2d, v8.2d            // encoding: [0x06,0xb9,0xe1,0x4e]
631 // CHECK:       fcvtzs  v4.2s, v0.2s            // encoding: [0x04,0xb8,0xa1,0x0e]
632
633
634          fcvtzu v4.4h, v0.4h
635          fcvtzu v6.8h, v8.8h
636          fcvtzu v6.4s, v8.4s
637          fcvtzu v6.2d, v8.2d
638          fcvtzu v4.2s, v0.2s
639
640 // CHECK: fcvtzu  v4.4h, v0.4h            // encoding: [0x04,0xb8,0xf9,0x2e]
641 // CHECK: fcvtzu  v6.8h, v8.8h            // encoding: [0x06,0xb9,0xf9,0x6e]
642 // CHECK:       fcvtzu  v6.4s, v8.4s            // encoding: [0x06,0xb9,0xa1,0x6e]
643 // CHECK:       fcvtzu  v6.2d, v8.2d            // encoding: [0x06,0xb9,0xe1,0x6e]
644 // CHECK:       fcvtzu  v4.2s, v0.2s            // encoding: [0x04,0xb8,0xa1,0x2e]
645
646          fcvtas v4.4h, v0.4h
647          fcvtas v6.8h, v8.8h
648          fcvtas v6.4s, v8.4s
649          fcvtas v6.2d, v8.2d
650          fcvtas v4.2s, v0.2s
651
652 // CHECK: fcvtas  v4.4h, v0.4h            // encoding: [0x04,0xc8,0x79,0x0e]
653 // CHECK: fcvtas  v6.8h, v8.8h            // encoding: [0x06,0xc9,0x79,0x4e]
654 // CHECK:       fcvtas  v6.4s, v8.4s            // encoding: [0x06,0xc9,0x21,0x4e]
655 // CHECK:       fcvtas  v6.2d, v8.2d            // encoding: [0x06,0xc9,0x61,0x4e]
656 // CHECK:       fcvtas  v4.2s, v0.2s            // encoding: [0x04,0xc8,0x21,0x0e]
657
658          fcvtau v4.4h, v0.4h
659          fcvtau v6.8h, v8.8h
660          fcvtau v6.4s, v8.4s
661          fcvtau v6.2d, v8.2d
662          fcvtau v4.2s, v0.2s
663
664 // CHECK: fcvtau  v4.4h, v0.4h            // encoding: [0x04,0xc8,0x79,0x2e]
665 // CHECK: fcvtau  v6.8h, v8.8h            // encoding: [0x06,0xc9,0x79,0x6e]
666 // CHECK:       fcvtau  v6.4s, v8.4s            // encoding: [0x06,0xc9,0x21,0x6e]
667 // CHECK:       fcvtau  v6.2d, v8.2d            // encoding: [0x06,0xc9,0x61,0x6e]
668 // CHECK:       fcvtau  v4.2s, v0.2s            // encoding: [0x04,0xc8,0x21,0x2e]
669
670          urecpe v6.4s, v8.4s
671          urecpe v4.2s, v0.2s
672
673 // CHECK:       urecpe  v6.4s, v8.4s            // encoding: [0x06,0xc9,0xa1,0x4e]
674 // CHECK:       urecpe  v4.2s, v0.2s            // encoding: [0x04,0xc8,0xa1,0x0e]
675
676          ursqrte v6.4s, v8.4s
677          ursqrte v4.2s, v0.2s
678
679 // CHECK:       ursqrte v6.4s, v8.4s            // encoding: [0x06,0xc9,0xa1,0x6e]
680 // CHECK:       ursqrte v4.2s, v0.2s            // encoding: [0x04,0xc8,0xa1,0x2e]
681
682          scvtf v4.4h, v0.4h
683          scvtf v6.8h, v8.8h
684          scvtf v6.4s, v8.4s
685          scvtf v6.2d, v8.2d
686          scvtf v4.2s, v0.2s
687
688 // CHECK: scvtf   v4.4h, v0.4h            // encoding: [0x04,0xd8,0x79,0x0e]
689 // CHECK: scvtf   v6.8h, v8.8h            // encoding: [0x06,0xd9,0x79,0x4e]
690 // CHECK:       scvtf   v6.4s, v8.4s            // encoding: [0x06,0xd9,0x21,0x4e]
691 // CHECK:       scvtf   v6.2d, v8.2d            // encoding: [0x06,0xd9,0x61,0x4e]
692 // CHECK:       scvtf   v4.2s, v0.2s            // encoding: [0x04,0xd8,0x21,0x0e]
693
694          ucvtf v4.4h, v0.4h
695          ucvtf v6.8h, v8.8h
696          ucvtf v6.4s, v8.4s
697          ucvtf v6.2d, v8.2d
698          ucvtf v4.2s, v0.2s
699
700 // CHECK: ucvtf   v4.4h, v0.4h            // encoding: [0x04,0xd8,0x79,0x2e]
701 // CHECK: ucvtf   v6.8h, v8.8h            // encoding: [0x06,0xd9,0x79,0x6e]
702 // CHECK:       ucvtf   v6.4s, v8.4s            // encoding: [0x06,0xd9,0x21,0x6e]
703 // CHECK:       ucvtf   v6.2d, v8.2d            // encoding: [0x06,0xd9,0x61,0x6e]
704 // CHECK:       ucvtf   v4.2s, v0.2s            // encoding: [0x04,0xd8,0x21,0x2e]
705
706          frecpe v4.4h, v0.4h
707          frecpe v6.8h, v8.8h
708          frecpe v6.4s, v8.4s
709          frecpe v6.2d, v8.2d
710          frecpe v4.2s, v0.2s
711
712 // CHECK: frecpe  v4.4h, v0.4h            // encoding: [0x04,0xd8,0xf9,0x0e]
713 // CHECK: frecpe  v6.8h, v8.8h            // encoding: [0x06,0xd9,0xf9,0x4e]
714 // CHECK:       frecpe  v6.4s, v8.4s            // encoding: [0x06,0xd9,0xa1,0x4e]
715 // CHECK:       frecpe  v6.2d, v8.2d            // encoding: [0x06,0xd9,0xe1,0x4e]
716 // CHECK:       frecpe  v4.2s, v0.2s            // encoding: [0x04,0xd8,0xa1,0x0e]
717
718          frsqrte v4.4h, v0.4h
719          frsqrte v6.8h, v8.8h
720          frsqrte v6.4s, v8.4s
721          frsqrte v6.2d, v8.2d
722          frsqrte v4.2s, v0.2s
723
724 // CHECK: frsqrte v4.4h, v0.4h            // encoding: [0x04,0xd8,0xf9,0x2e]
725 // CHECK: frsqrte v6.8h, v8.8h            // encoding: [0x06,0xd9,0xf9,0x6e]
726 // CHECK:       frsqrte v6.4s, v8.4s            // encoding: [0x06,0xd9,0xa1,0x6e]
727 // CHECK:       frsqrte v6.2d, v8.2d            // encoding: [0x06,0xd9,0xe1,0x6e]
728 // CHECK:       frsqrte v4.2s, v0.2s            // encoding: [0x04,0xd8,0xa1,0x2e]
729
730          fsqrt v4.4h, v0.4h
731          fsqrt v6.8h, v8.8h
732          fsqrt v6.4s, v8.4s
733          fsqrt v6.2d, v8.2d
734          fsqrt v4.2s, v0.2s
735
736 // CHECK: fsqrt   v4.4h, v0.4h            // encoding: [0x04,0xf8,0xf9,0x2e]
737 // CHECK: fsqrt   v6.8h, v8.8h            // encoding: [0x06,0xf9,0xf9,0x6e]
738 // CHECK:       fsqrt   v6.4s, v8.4s            // encoding: [0x06,0xf9,0xa1,0x6e]
739 // CHECK:       fsqrt   v6.2d, v8.2d            // encoding: [0x06,0xf9,0xe1,0x6e]
740 // CHECK:       fsqrt   v4.2s, v0.2s            // encoding: [0x04,0xf8,0xa1,0x2e]
741
742