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