[AArch64] Add ARMv8.2-A FP16 vector instructions
[oota-llvm.git] / test / MC / AArch64 / neon-diagnostics.s
1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+neon < %s 2> %t
2 // RUN: FileCheck --check-prefix=CHECK-ERROR < %t %s
3
4 //------------------------------------------------------------------------------
5 // Vector Integer Add/sub
6 //------------------------------------------------------------------------------
7
8         // Mismatched vector types
9         add v0.16b, v1.8b, v2.8b
10         sub v0.2d, v1.2d, v2.2s
11
12 // CHECK-ERROR: error: invalid operand for instruction
13 // CHECK-ERROR:         add v0.16b, v1.8b, v2.8b
14 // CHECK-ERROR:                        ^
15 // CHECK-ERROR: error: invalid operand for instruction
16 // CHECK-ERROR:         sub v0.2d, v1.2d, v2.2s
17 // CHECK-ERROR:                              ^
18
19 //------------------------------------------------------------------------------
20 // Vector Floating-Point Add/sub
21 //------------------------------------------------------------------------------
22
23         // Mismatched and invalid vector types
24         fadd v0.2d, v1.2s, v2.2s
25         fsub v0.4s, v1.2s, v2.4s
26         fsub v0.8b, v1.8b, v2.8b
27
28 // CHECK-ERROR: error: invalid operand for instruction
29 // CHECK-ERROR:         fadd v0.2d, v1.2s, v2.2s
30 // CHECK-ERROR:                        ^
31 // CHECK-ERROR: error: invalid operand for instruction
32 // CHECK-ERROR:         fsub v0.4s, v1.2s, v2.4s
33 // CHECK-ERROR:                        ^
34 // CHECK-ERROR: error: invalid operand for instruction
35 // CHECK-ERROR:         fsub v0.8b, v1.8b, v2.8b
36 // CHECK-ERROR:                  ^
37
38 //----------------------------------------------------------------------
39 // Vector Integer Mul
40 //----------------------------------------------------------------------
41
42         // Mismatched and invalid vector types
43         mul v0.16b, v1.8b, v2.8b
44         mul v0.2d, v1.2d, v2.2d
45
46 // CHECK-ERROR: error: invalid operand for instruction
47 // CHECK-ERROR:         mul v0.16b, v1.8b, v2.8b
48 // CHECK-ERROR:                        ^
49 // CHECK-ERROR: error: invalid operand for instruction
50 // CHECK-ERROR:         mul v0.2d, v1.2d, v2.2d
51 // CHECK-ERROR:                ^
52
53 //----------------------------------------------------------------------
54 // Vector Floating-Point Mul/Div
55 //----------------------------------------------------------------------
56         // Mismatched vector types
57         fmul v0.16b, v1.8b, v2.8b
58         fdiv v0.2s, v1.2d, v2.2d
59
60 // CHECK-ERROR: error: invalid operand for instruction
61 // CHECK-ERROR:         fmul v0.16b, v1.8b, v2.8b
62 // CHECK-ERROR:                         ^
63 // CHECK-ERROR: error: invalid operand for instruction
64 // CHECK-ERROR:         fdiv v0.2s, v1.2d, v2.2d
65 // CHECK-ERROR:                        ^
66
67 //----------------------------------------------------------------------
68 // Vector And Orr Eor Bsl Bit Bif, Orn, Bic,
69 //----------------------------------------------------------------------
70         // Mismatched and invalid vector types
71         and v0.8b, v1.16b, v2.8b
72         orr v0.4h, v1.4h, v2.4h
73         eor v0.2s, v1.2s, v2.2s
74         bsl v0.8b, v1.16b, v2.8b
75         bsl v0.2s, v1.2s, v2.2s
76         bit v0.2d, v1.2d, v2.2d
77         bif v0.4h, v1.4h, v2.4h
78         orn v0.8b, v1.16b, v2.16b
79         bic v0.2d, v1.2d, v2.2d
80
81 // CHECK-ERROR: error: invalid operand for instruction
82 // CHECK-ERROR:         and v0.8b, v1.16b, v2.8b
83 // CHECK-ERROR:                       ^
84 // CHECK-ERROR: error: invalid operand for instruction
85 // CHECK-ERROR:         orr v0.4h, v1.4h, v2.4h
86 // CHECK-ERROR:                ^
87 // CHECK-ERROR: error: invalid operand for instruction
88 // CHECK-ERROR:         eor v0.2s, v1.2s, v2.2s
89 // CHECK-ERROR:                ^
90 // CHECK-ERROR: error: invalid operand for instruction
91 // CHECK-ERROR:         bsl v0.8b, v1.16b, v2.8b
92 // CHECK-ERROR:                       ^
93 // CHECK-ERROR: error: invalid operand for instruction
94 // CHECK-ERROR:         bsl v0.2s, v1.2s, v2.2s
95 // CHECK-ERROR:                ^
96 // CHECK-ERROR: error: invalid operand for instruction
97 // CHECK-ERROR:         bit v0.2d, v1.2d, v2.2d
98 // CHECK-ERROR:                ^
99 // CHECK-ERROR: error: invalid operand for instruction
100 // CHECK-ERROR:         bif v0.4h, v1.4h, v2.4h
101 // CHECK-ERROR:                ^
102 // CHECK-ERROR: error: invalid operand for instruction
103 // CHECK-ERROR:         orn v0.8b, v1.16b, v2.16b
104 // CHECK-ERROR:                        ^
105 // CHECK-ERROR: error: invalid operand for instruction
106 // CHECK-ERROR:         bic v0.2d, v1.2d, v2.2d
107 // CHECK-ERROR:                ^
108
109 //----------------------------------------------------------------------
110 // Vector Integer Multiply-accumulate and Multiply-subtract
111 //----------------------------------------------------------------------
112
113         // Mismatched and invalid vector types
114         mla v0.16b, v1.8b, v2.8b
115         mls v0.2d, v1.2d, v2.2d
116
117 // CHECK-ERROR: error: invalid operand for instruction
118 // CHECK-ERROR:         mla v0.16b, v1.8b, v2.8b
119 // CHECK-ERROR:                        ^
120 // CHECK-ERROR: error: invalid operand for instruction
121 // CHECK-ERROR:         mls v0.2d, v1.2d, v2.2d
122 // CHECK-ERROR:                ^
123
124 //----------------------------------------------------------------------
125 // Vector Floating-Point Multiply-accumulate and Multiply-subtract
126 //----------------------------------------------------------------------
127         // Mismatched vector types
128         fmla v0.2s, v1.2d, v2.2d
129         fmls v0.16b, v1.8b, v2.8b
130
131 // CHECK-ERROR: error: invalid operand for instruction
132 // CHECK-ERROR:         fmla v0.2s, v1.2d, v2.2d
133 // CHECK-ERROR:                        ^
134 // CHECK-ERROR: error: invalid operand for instruction
135 // CHECK-ERROR:         fmls v0.16b, v1.8b, v2.8b
136 // CHECK-ERROR:                         ^
137
138
139 //----------------------------------------------------------------------
140 // Vector Move Immediate Shifted
141 // Vector Move Inverted Immediate Shifted
142 // Vector Bitwise Bit Clear (AND NOT) - immediate
143 // Vector Bitwise OR - immedidate
144 //----------------------------------------------------------------------
145       // out of range immediate (0 to 0xff)
146       movi v0.2s, #-1
147       mvni v1.4s, #256
148       // out of range shift (0, 8, 16, 24 and 0, 8)
149       bic v15.4h, #1, lsl #7
150       orr v31.2s, #1, lsl #25
151       movi v5.4h, #10, lsl #16
152       // invalid vector type (2s, 4s, 4h, 8h)
153       movi v5.8b, #1, lsl #8
154
155 // CHECK-ERROR: error: invalid operand for instruction
156 // CHECK-ERROR:          movi v0.2s, #-1
157 // CHECK-ERROR:                      ^
158 // CHECK-ERROR: error: invalid operand for instruction
159 // CHECK-ERROR:         mvni v1.4s, #256
160 // CHECK-ERROR:                     ^
161 // CHECK-ERROR: error: invalid operand for instruction
162 // CHECK-ERROR:         bic v15.4h, #1, lsl #7
163 // CHECK-ERROR:                         ^
164 // CHECK-ERROR: error: invalid operand for instruction
165 // CHECK-ERROR:         orr v31.2s, #1, lsl #25
166 // CHECK-ERROR:                         ^
167 // CHECK-ERROR: error: invalid operand for instruction
168 // CHECK-ERROR:         movi v5.4h, #10, lsl #16
169 // CHECK-ERROR:                          ^
170 // CHECK-ERROR: error: invalid operand for instruction
171 // CHECK-ERROR:         movi v5.8b, #1, lsl #8
172 // CHECK-ERROR:                         ^
173 //----------------------------------------------------------------------
174 // Vector Move Immediate Masked
175 // Vector Move Inverted Immediate Masked
176 //----------------------------------------------------------------------
177       // out of range immediate (0 to 0xff)
178       movi v0.2s, #-1, msl #8
179       mvni v7.4s, #256, msl #16
180       // out of range shift (8, 16)
181       movi v3.2s, #1, msl #0
182       mvni v17.4s, #255, msl #32
183       // invalid vector type (2s, 4s)
184       movi v5.4h, #31, msl #8
185
186 // CHECK-ERROR: error: invalid operand for instruction
187 // CHECK-ERROR:         movi v0.2s, #-1, msl #8
188 // CHECK-ERROR:                     ^
189 // CHECK-ERROR: error: invalid operand for instruction
190 // CHECK-ERROR:         mvni v7.4s, #256, msl #16
191 // CHECK-ERROR:                     ^
192 // CHECK-ERROR: error: invalid operand for instruction
193 // CHECK-ERROR:         movi v3.2s, #1, msl #0
194 // CHECK-ERROR:                         ^
195 // CHECK-ERROR: error: invalid operand for instruction
196 // CHECK-ERROR:         mvni v17.4s, #255, msl #32
197 // CHECK-ERROR:                            ^
198 // CHECK-ERROR: error: invalid operand for instruction
199 // CHECK-ERROR:         movi v5.4h, #31, msl #8
200 // CHECK-ERROR:                          ^
201
202 //----------------------------------------------------------------------
203 // Vector Immediate - per byte
204 //----------------------------------------------------------------------
205         // out of range immediate (0 to 0xff)
206         movi v0.8b, #-1
207         movi v1.16b, #256
208
209 // CHECK-ERROR: error: invalid operand for instruction
210 // CHECK-ERROR:         movi v0.8b, #-1
211 // CHECK-ERROR:                     ^
212 // CHECK-ERROR: error: invalid operand for instruction
213 // CHECK-ERROR:         movi v1.16b, #256
214 // CHECK-ERROR:                      ^
215
216 //----------------------------------------------------------------------
217 // Scalar Floating-point Reciprocal Estimate
218 //----------------------------------------------------------------------
219
220     frecpe s19, h14
221     frecpe d13, s13
222
223 // CHECK-ERROR: error: invalid operand for instruction
224 // CHECK-ERROR:        frecpe s19, h14
225 // CHECK-ERROR:                    ^
226 // CHECK-ERROR: error: invalid operand for instruction
227 // CHECK-ERROR:        frecpe d13, s13
228 // CHECK-ERROR:                    ^
229
230 //----------------------------------------------------------------------
231 // Scalar Floating-point Reciprocal Exponent
232 //----------------------------------------------------------------------
233
234     frecpx s18, h10
235     frecpx d16, s19
236
237 // CHECK-ERROR: error: invalid operand for instruction
238 // CHECK-ERROR:        frecpx s18, h10
239 // CHECK-ERROR:                    ^
240 // CHECK-ERROR: error: invalid operand for instruction
241 // CHECK-ERROR:        frecpx d16, s19
242 // CHECK-ERROR:                    ^
243
244 //----------------------------------------------------------------------
245 // Scalar Floating-point Reciprocal Square Root Estimate
246 //----------------------------------------------------------------------
247
248     frsqrte s22, h13
249     frsqrte d21, s12
250
251 // CHECK-ERROR: error: invalid operand for instruction
252 // CHECK-ERROR:        frsqrte s22, h13
253 // CHECK-ERROR:                     ^
254 // CHECK-ERROR: error: invalid operand for instruction
255 // CHECK-ERROR:        frsqrte d21, s12
256 // CHECK-ERROR:                     ^
257
258 //----------------------------------------------------------------------
259 // Vector Move Immediate - bytemask, per doubleword
260 //---------------------------------------------------------------------
261         // invalid bytemask (0x00 or 0xff)
262         movi v0.2d, #0x10ff00ff00ff00ff
263
264 // CHECK:ERROR: error: invalid operand for instruction
265 // CHECK:ERROR:         movi v0.2d, #0x10ff00ff00ff00ff
266 // CHECK:ERROR:                     ^
267
268 //----------------------------------------------------------------------
269 // Vector Move Immediate - bytemask, one doubleword
270 //----------------------------------------------------------------------
271         // invalid bytemask (0x00 or 0xff)
272         movi v0.2d, #0xffff00ff001f00ff
273
274 // CHECK:ERROR: error: invalid operand for instruction
275 // CHECK:ERROR:         movi v0.2d, #0xffff00ff001f00ff
276 // CHECK:ERROR:                     ^
277 //----------------------------------------------------------------------
278 // Vector Floating Point Move Immediate
279 //----------------------------------------------------------------------
280         // invalid vector type (2s, 4s, 2d)
281          fmov v0.4h, #1.0
282
283 // CHECK:ERROR: error: invalid operand for instruction
284 // CHECK:ERROR:         fmov v0.4h, #1.0
285 // CHECK:ERROR:              ^
286
287 //----------------------------------------------------------------------
288 // Vector Move -  register
289 //----------------------------------------------------------------------
290       // invalid vector type (8b, 16b)
291       mov v0.2s, v31.8b
292 // CHECK:ERROR: error: invalid operand for instruction
293 // CHECK:ERROR:         mov v0.2s, v31.8b
294 // CHECK:ERROR:                ^
295
296 //----------------------------------------------------------------------
297 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
298 //----------------------------------------------------------------------
299
300         // Mismatched and invalid vector types (2d)
301         saba v0.16b, v1.8b, v2.8b
302         uaba v0.2d, v1.2d, v2.2d
303
304 // CHECK-ERROR: error: invalid operand for instruction
305 // CHECK-ERROR:         saba v0.16b, v1.8b, v2.8b
306 // CHECK-ERROR:                        ^
307 // CHECK-ERROR: error: invalid operand for instruction
308 // CHECK-ERROR:         uaba v0.2d, v1.2d, v2.2d
309 // CHECK-ERROR:                ^
310
311 //----------------------------------------------------------------------
312 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
313 // Vector Absolute Difference (Signed, Unsigned)
314
315         // Mismatched and invalid vector types (2d)
316         uaba v0.16b, v1.8b, v2.8b
317         saba v0.2d, v1.2d, v2.2d
318         uabd v0.4s, v1.2s, v2.2s
319         sabd v0.4h, v1.8h, v8.8h
320
321 // CHECK-ERROR: error: invalid operand for instruction
322 // CHECK-ERROR:         uaba v0.16b, v1.8b, v2.8b
323 // CHECK-ERROR:                        ^
324 // CHECK-ERROR: error: invalid operand for instruction
325 // CHECK-ERROR:         saba v0.2d, v1.2d, v2.2d
326 // CHECK-ERROR:                ^
327 // CHECK-ERROR: error: invalid operand for instruction
328 // CHECK-ERROR:         uabd v0.4s, v1.2s, v2.2s
329 // CHECK-ERROR:                        ^
330 // CHECK-ERROR: error: invalid operand for instruction
331 // CHECK-ERROR:         sabd v0.4h, v1.8h, v8.8h
332 // CHECK-ERROR:                        ^
333
334 //----------------------------------------------------------------------
335 // Vector Absolute Difference (Floating Point)
336 //----------------------------------------------------------------------
337         // Mismatched and invalid vector types
338         fabd v0.2s, v1.4s, v2.2d
339         fabd v0.4h, v1.4h, v2.4h
340
341 // CHECK-ERROR: error: invalid operand for instruction
342 // CHECK-ERROR:         fabd v0.2s, v1.4s, v2.2d
343 // CHECK-ERROR:                        ^
344 // CHECK-ERROR: error: instruction requires: fullfp16
345 // CHECK-ERROR:         fabd v0.4h, v1.4h, v2.4h
346 // CHECK-ERROR:                 ^
347 //----------------------------------------------------------------------
348 // Vector Multiply (Polynomial)
349 //----------------------------------------------------------------------
350
351         // Mismatched and invalid vector types
352          pmul v0.8b, v1.8b, v2.16b
353          pmul v0.2s, v1.2s, v2.2s
354
355 // CHECK-ERROR: error: invalid operand for instruction
356 // CHECK-ERROR:         pmul v0.8b, v1.8b, v2.16b
357 // CHECK-ERROR:                               ^
358 // CHECK-ERROR: error: invalid operand for instruction
359 // CHECK-ERROR:         pmul v0.2s, v1.2s, v2.2s
360 // CHECK-ERROR:                 ^
361
362 //----------------------------------------------------------------------
363 // Scalar Integer Add and Sub
364 //----------------------------------------------------------------------
365
366       // Mismatched registers
367          add d0, s1, d2
368          sub s1, d1, d2
369
370 // CHECK-ERROR: error: invalid operand for instruction
371 // CHECK-ERROR:         add d0, s1, d2
372 // CHECK-ERROR:                 ^
373 // CHECK-ERROR: error: invalid operand for instruction
374 // CHECK-ERROR:         sub s1, d1, d2
375 // CHECK-ERROR:             ^
376
377 //----------------------------------------------------------------------
378 // Vector Reciprocal Step (Floating Point)
379 //----------------------------------------------------------------------
380
381         // Mismatched and invalid vector types
382          frecps v0.4s, v1.2d, v2.4s
383          frecps v0.8h, v1.8h, v2.8h
384
385 // CHECK-ERROR: error: invalid operand for instruction
386 // CHECK-ERROR:        frecps v0.4s, v1.2d, v2.4s
387 // CHECK-ERROR:                         ^
388 // CHECK-ERROR: error: instruction requires: fullfp16
389 // CHECK-ERROR:        frecps v0.8h, v1.8h, v2.8h
390 // CHECK-ERROR:                  ^
391
392 //----------------------------------------------------------------------
393 // Vector Reciprocal Square Root Step (Floating Point)
394 //----------------------------------------------------------------------
395
396         // Mismatched and invalid vector types
397          frsqrts v0.2d, v1.2d, v2.2s
398          frsqrts v0.4h, v1.4h, v2.4h
399
400 // CHECK-ERROR: error: invalid operand for instruction
401 // CHECK-ERROR:        frsqrts v0.2d, v1.2d, v2.2s
402 // CHECK-ERROR:                                 ^
403 // CHECK-ERROR: error: instruction requires: fullfp16
404 // CHECK-ERROR:        frsqrts v0.4h, v1.4h, v2.4h
405 // CHECK-ERROR:                   ^
406
407
408 //----------------------------------------------------------------------
409 // Vector Absolute Compare Mask Less Than Or Equal (Floating Point)
410 //----------------------------------------------------------------------
411
412         // Mismatched and invalid vector types
413         facge v0.2d, v1.2s, v2.2d
414         facge v0.4h, v1.4h, v2.4h
415         facle v0.8h, v1.4h, v2.4h
416
417 // CHECK-ERROR: error: invalid operand for instruction
418 // CHECK-ERROR:        facge v0.2d, v1.2s, v2.2d
419 // CHECK-ERROR:                        ^
420 // CHECK-ERROR: error: instruction requires: fullfp16
421 // CHECK-ERROR:        facge v0.4h, v1.4h, v2.4h
422 // CHECK-ERROR:                 ^
423 // CHECK-ERROR: error: invalid operand for instruction
424 // CHECK-ERROR:        facle v0.8h, v1.4h, v2.4h
425 // CHECK-ERROR:                 ^
426 //----------------------------------------------------------------------
427 // Vector Absolute Compare Mask Less Than (Floating Point)
428 //----------------------------------------------------------------------
429
430         // Mismatched and invalid vector types
431         facgt v0.2d, v1.2d, v2.4s
432         facgt v0.8h, v1.8h, v2.8h
433         faclt v0.8b, v1.8b, v2.8b
434
435 // CHECK-ERROR: error: invalid operand for instruction
436 // CHECK-ERROR:        facgt v0.2d, v1.2d, v2.4s
437 // CHECK-ERROR:                               ^
438 // CHECK-ERROR: error: instruction requires: fullfp16
439 // CHECK-ERROR:        facgt v0.8h, v1.8h, v2.8h
440 // CHECK-ERROR:                 ^
441 // CHECK-ERROR: error: invalid operand for instruction
442 // CHECK-ERROR:        faclt v0.8b, v1.8b, v2.8b
443 // CHECK-ERROR:                 ^
444
445
446 //----------------------------------------------------------------------
447 // Vector Compare Mask Equal (Integer)
448 //----------------------------------------------------------------------
449
450          // Mismatched vector types
451          cmeq c0.2d, v1.2d, v2.2s
452
453 // CHECK-ERROR: error: invalid operand for instruction
454 // CHECK-ERROR:        cmeq c0.2d, v1.2d, v2.2s
455 // CHECK-ERROR:                              ^
456
457 //----------------------------------------------------------------------
458 // Vector Compare Mask Higher or Same (Unsigned Integer)
459 // Vector Compare Mask Less or Same (Unsigned Integer)
460 // CMLS is alias for CMHS with operands reversed.
461 //----------------------------------------------------------------------
462
463          // Mismatched vector types
464          cmhs c0.4h, v1.8b, v2.8b
465          cmls c0.16b, v1.16b, v2.2d
466
467 // CHECK-ERROR: error: invalid operand for instruction
468 // CHECK-ERROR:        cmhs c0.4h, v1.8b, v2.8b
469 // CHECK-ERROR:                       ^
470 // CHECK-ERROR: error: invalid operand for instruction
471 // CHECK-ERROR:        cmls c0.16b, v1.16b, v2.2d
472 // CHECK-ERROR:                                ^
473
474 //----------------------------------------------------------------------
475 // Vector Compare Mask Greater Than or Equal (Integer)
476 // Vector Compare Mask Less Than or Equal (Integer)
477 // CMLE is alias for CMGE with operands reversed.
478 //----------------------------------------------------------------------
479
480          // Mismatched vector types
481          cmge c0.8h, v1.8b, v2.8b
482          cmle c0.4h, v1.2s, v2.2s
483
484 // CHECK-ERROR: error: invalid operand for instruction
485 // CHECK-ERROR:        cmge c0.8h, v1.8b, v2.8b
486 // CHECK-ERROR:                       ^
487 // CHECK-ERROR: error: invalid operand for instruction
488 // CHECK-ERROR:         cmle c0.4h, v1.2s, v2.2s
489 // CHECK-ERROR:                        ^
490
491 //----------------------------------------------------------------------
492 // Vector Compare Mask Higher (Unsigned Integer)
493 // Vector Compare Mask Lower (Unsigned Integer)
494 // CMLO is alias for CMHI with operands reversed.
495 //----------------------------------------------------------------------
496
497          // Mismatched vector types
498          cmhi c0.4s, v1.4s, v2.16b
499          cmlo c0.8b, v1.8b, v2.2s
500
501 // CHECK-ERROR: error: invalid operand for instruction
502 // CHECK-ERROR:        cmhi c0.4s, v1.4s, v2.16b
503 // CHECK-ERROR:                              ^
504 // CHECK-ERROR: error: invalid operand for instruction
505 // CHECK-ERROR:         cmlo c0.8b, v1.8b, v2.2s
506 // CHECK-ERROR:                               ^
507
508 //----------------------------------------------------------------------
509 // Vector Compare Mask Greater Than (Integer)
510 // Vector Compare Mask Less Than (Integer)
511 // CMLT is alias for CMGT with operands reversed.
512 //----------------------------------------------------------------------
513
514          // Mismatched vector types
515          cmgt c0.8b, v1.4s, v2.16b
516          cmlt c0.8h, v1.16b, v2.4s
517
518 // CHECK-ERROR: error: invalid operand for instruction
519 // CHECK-ERROR:         cmgt c0.8b, v1.4s, v2.16b
520 // CHECK-ERROR:                        ^
521 // CHECK-ERROR: error: invalid operand for instruction
522 // CHECK-ERROR:         cmlt c0.8h, v1.16b, v2.4s
523 // CHECK-ERROR:                        ^
524
525 //----------------------------------------------------------------------
526 // Vector Compare Mask Bitwise Test (Integer)
527 //----------------------------------------------------------------------
528
529          // Mismatched vector types
530          cmtst c0.16b, v1.16b, v2.4s
531
532 // CHECK-ERROR: error: invalid operand for instruction
533 // CHECK-ERROR:         cmtst c0.16b, v1.16b, v2.4s
534 // CHECK-ERROR:                                  ^
535
536 //----------------------------------------------------------------------
537 // Vector Compare Mask Equal (Floating Point)
538 //----------------------------------------------------------------------
539
540         // Mismatched and invalid vector types
541         fcmeq v0.2d, v1.2s, v2.2d
542         fcmeq v0.16b, v1.16b, v2.16b
543         fcmeq v0.8b, v1.4h, v2.4h
544
545 // CHECK-ERROR: error: invalid operand for instruction
546 // CHECK-ERROR:        fcmeq v0.2d, v1.2s, v2.2d
547 // CHECK-ERROR:                        ^
548 // CHECK-ERROR: error: invalid operand for instruction
549 // CHECK-ERROR:        fcmeq v0.16b, v1.16b, v2.16b
550 // CHECK-ERROR:                 ^
551 // CHECK-ERROR: error: invalid operand for instruction
552 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, v2.4h
553 // CHECK-ERROR:                 ^
554
555 //----------------------------------------------------------------------
556 // Vector Compare Mask Greater Than Or Equal (Floating Point)
557 // Vector Compare Mask Less Than Or Equal (Floating Point)
558 // FCMLE is alias for FCMGE with operands reversed.
559 //----------------------------------------------------------------------
560
561         // Mismatched and invalid vector types
562          fcmge v31.4s, v29.2s, v28.4s
563          fcmge v3.8b, v8.2s, v12.2s
564          fcmle v17.8h, v15.2d, v13.2d
565
566 // CHECK-ERROR: error: invalid operand for instruction
567 // CHECK-ERROR:        fcmge v31.4s, v29.2s, v28.4s
568 // CHECK-ERROR:                          ^
569 // CHECK-ERROR: error: invalid operand for instruction
570 // CHECK-ERROR:        fcmge v3.8b, v8.2s, v12.2s
571 // CHECK-ERROR:                 ^
572 // CHECK-ERROR: error: invalid operand for instruction
573 // CHECK-ERROR:        fcmle v17.8h, v15.2d, v13.2d
574 // CHECK-ERROR:                 ^
575
576 //----------------------------------------------------------------------
577 // Vector Compare Mask Greater Than (Floating Point)
578 // Vector Compare Mask Less Than (Floating Point)
579 // FCMLT is alias for FCMGT with operands reversed.
580 //----------------------------------------------------------------------
581
582         // Mismatched and invalid vector types
583          fcmgt v0.2d, v31.2s, v16.2s
584          fcmgt v4.4s, v7.4s, v15.4h
585          fcmlt v29.2d, v5.2d, v2.16b
586
587 // CHECK-ERROR: error: invalid operand for instruction
588 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, v16.2s
589 // CHECK-ERROR:                         ^
590
591 // CHECK-ERROR: error: invalid operand for instruction
592 // CHECK-ERROR:        fcmgt v4.4s, v7.4s, v15.4h
593 // CHECK-ERROR:                                ^
594 // CHECK-ERROR: error: invalid operand for instruction
595 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, v2.16b
596 // CHECK-ERROR:                                ^
597
598 //----------------------------------------------------------------------
599 // Vector Compare Mask Equal to Zero (Integer)
600 //----------------------------------------------------------------------
601         // Mismatched vector types and invalid imm
602          // Mismatched vector types
603          cmeq c0.2d, v1.2s, #0
604          cmeq c0.2d, v1.2d, #1
605
606 // CHECK-ERROR: error: invalid operand for instruction
607 // CHECK-ERROR:        cmeq c0.2d, v1.2s, #0
608 // CHECK-ERROR:                       ^
609 // CHECK-ERROR: error: invalid operand for instruction
610 // CHECK-ERROR:        cmeq c0.2d, v1.2d, #1
611 // CHECK-ERROR:                            ^
612
613 //----------------------------------------------------------------------
614 // Vector Compare Mask Greater Than or Equal to Zero (Signed Integer)
615 //----------------------------------------------------------------------
616         // Mismatched vector types and invalid imm
617          cmge c0.8h, v1.8b, #0
618          cmge c0.4s, v1.4s, #-1
619
620 // CHECK-ERROR: error: invalid operand for instruction
621 // CHECK-ERROR:        cmge c0.8h, v1.8b, #0
622 // CHECK-ERROR:                       ^
623 // CHECK-ERROR: error: invalid operand for instruction
624 // CHECK-ERROR:         cmge c0.4s, v1.4s, #-1
625 // CHECK-ERROR:                             ^
626
627 //----------------------------------------------------------------------
628 // Vector Compare Mask Greater Than Zero (Signed Integer)
629 //----------------------------------------------------------------------
630         // Mismatched vector types and invalid imm
631          cmgt c0.8b, v1.4s, #0
632          cmgt c0.8b, v1.8b, #-255
633
634 // CHECK-ERROR: error: invalid operand for instruction
635 // CHECK-ERROR:         cmgt c0.8b, v1.4s, #0
636 // CHECK-ERROR:                        ^
637 // CHECK-ERROR: error: invalid operand for instruction
638 // CHECK-ERROR:         cmgt c0.8b, v1.8b, #-255
639 // CHECK-ERROR:                             ^
640
641 //----------------------------------------------------------------------
642 // Vector Compare Mask Less Than or Equal To Zero (Signed Integer)
643 //----------------------------------------------------------------------
644         // Mismatched vector types and invalid imm
645          cmle c0.4h, v1.2s, #0
646          cmle c0.16b, v1.16b, #16
647
648 // CHECK-ERROR: error: invalid operand for instruction
649 // CHECK-ERROR:        cmle c0.4h, v1.2s, #0
650 // CHECK-ERROR:                       ^
651 // CHECK-ERROR: error: invalid operand for instruction
652 // CHECK-ERROR:         cmle c0.16b, v1.16b, #16
653 // CHECK-ERROR:                               ^
654 //----------------------------------------------------------------------
655 // Vector Compare Mask Less Than Zero (Signed Integer)
656 //----------------------------------------------------------------------
657         // Mismatched vector types and invalid imm
658          cmlt c0.8h, v1.16b, #0
659          cmlt c0.8h, v1.8h, #-15
660
661 // CHECK-ERROR: error: invalid operand for instruction
662 // CHECK-ERROR:         cmlt c0.8h, v1.16b, #0
663 // CHECK-ERROR:                        ^
664 // CHECK-ERROR: error: invalid operand for instruction
665 // CHECK-ERROR:         cmlt c0.8h, v1.8h, #-15
666 // CHECK-ERROR:                             ^
667
668 //----------------------------------------------------------------------
669 // Vector Compare Mask Equal to Zero (Floating Point)
670 //----------------------------------------------------------------------
671
672         // Mismatched and invalid vector types, invalid imm
673         fcmeq v0.2d, v1.2s, #0.0
674         fcmeq v0.16b, v1.16b, #0.0
675         fcmeq v0.8b, v1.4h, #1.0
676         fcmeq v0.8b, v1.4h, #1
677
678 // CHECK-ERROR: error: invalid operand for instruction
679 // CHECK-ERROR:        fcmeq v0.2d, v1.2s, #0.0
680 // CHECK-ERROR:                        ^
681 // CHECK-ERROR: error: invalid operand for instruction
682 // CHECK-ERROR:        fcmeq v0.16b, v1.16b, #0.0
683 // CHECK-ERROR:                 ^
684
685
686 // CHECK-ERROR: error: expected floating-point constant #0.0
687 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1.0
688 // CHECK-ERROR:                             ^
689 // CHECK-ERROR: error: invalid operand for instruction
690 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1
691 // CHECK-ERROR:                             ^
692
693 //----------------------------------------------------------------------
694 // Vector Compare Mask Greater Than or Equal to Zero (Floating Point)
695 //----------------------------------------------------------------------
696
697         // Mismatched and invalid vector types, invalid imm
698          fcmge v31.4s, v29.2s, #0.0
699          fcmge v3.8b, v8.2s, #0.0
700          fcmle v17.8h, v15.2d, #-1.0
701          fcmle v17.8h, v15.2d, #2
702
703 // CHECK-ERROR: error: invalid operand for instruction
704 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
705 // CHECK-ERROR:                          ^
706 // CHECK-ERROR: error: invalid operand for instruction
707 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
708 // CHECK-ERROR:                 ^
709
710
711 // CHECK-ERROR: error: expected floating-point constant #0.0
712 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #-1.0
713 // CHECK-ERROR:                               ^
714 // CHECK-ERROR: error: invalid operand for instruction
715 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #2
716 // CHECK-ERROR:                               ^
717
718 //----------------------------------------------------------------------
719 // Vector Compare Mask Greater Than Zero (Floating Point)
720 //----------------------------------------------------------------------
721         // Mismatched and invalid vector types, invalid imm
722          fcmgt v0.2d, v31.2s, #0.0
723          fcmgt v4.4s, v7.4h, #0.0
724          fcmlt v29.2d, v5.2d, #255.0
725          fcmlt v29.2d, v5.2d, #255
726
727 // CHECK-ERROR: error: invalid operand for instruction
728 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
729 // CHECK-ERROR:                         ^
730 // CHECK-ERROR: error: invalid operand for instruction
731 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
732 // CHECK-ERROR:                        ^
733
734
735 // CHECK-ERROR: error: expected floating-point constant #0.0
736 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255.0
737 // CHECK-ERROR:                              ^
738 // CHECK-ERROR: error: invalid operand for instruction
739 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255
740 // CHECK-ERROR:                              ^
741
742 //----------------------------------------------------------------------
743 // Vector Compare Mask Less Than or Equal To Zero (Floating Point)
744 //----------------------------------------------------------------------
745         // Mismatched and invalid vector types, invalid imm
746          fcmge v31.4s, v29.2s, #0.0
747          fcmge v3.8b, v8.2s, #0.0
748          fcmle v17.2d, v15.2d, #15.0
749          fcmle v17.2d, v15.2d, #15
750
751 // CHECK-ERROR: error: invalid operand for instruction
752 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
753 // CHECK-ERROR:                          ^
754 // CHECK-ERROR: error: invalid operand for instruction
755 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
756 // CHECK-ERROR:                 ^
757
758
759 // CHECK-ERROR: error: expected floating-point constant #0.0
760 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15.0
761 // CHECK-ERROR:                               ^
762 // CHECK-ERROR: error: invalid operand for instruction
763 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15
764 // CHECK-ERROR:                              ^
765
766 //----------------------------------------------------------------------
767 // Vector Compare Mask Less Than Zero (Floating Point)
768 //----------------------------------------------------------------------
769         // Mismatched and invalid vector types, invalid imm
770          fcmgt v0.2d, v31.2s, #0.0
771          fcmgt v4.4s, v7.4h, #0.0
772          fcmlt v29.2d, v5.2d, #16.0
773          fcmlt v29.2d, v5.2d, #2
774
775 // CHECK-ERROR: error: invalid operand for instruction
776 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
777 // CHECK-ERROR:                         ^
778 // CHECK-ERROR: error: invalid operand for instruction
779 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
780 // CHECK-ERROR:                        ^
781
782
783 // CHECK-ERROR: error: expected floating-point constant #0.0
784 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #16.0
785 // CHECK-ERROR:                              ^
786 // CHECK-ERROR: error: invalid operand for instruction
787 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #2
788 // CHECK-ERROR:                              ^
789
790 /-----------------------------------------------------------------------
791 // Vector Integer Halving Add (Signed)
792 // Vector Integer Halving Add (Unsigned)
793 // Vector Integer Halving Sub (Signed)
794 // Vector Integer Halving Sub (Unsigned)
795 //----------------------------------------------------------------------
796         // Mismatched and invalid vector types (2d)
797         shadd v0.2d, v1.2d, v2.2d
798         uhadd v4.2s, v5.2s, v5.4h
799         shsub v11.4h, v12.8h, v13.4h
800         uhsub v31.16b, v29.8b, v28.8b
801
802 // CHECK-ERROR: error: invalid operand for instruction
803 // CHECK-ERROR:        shadd v0.2d, v1.2d, v2.2d
804 // CHECK-ERROR:                 ^
805 // CHECK-ERROR: error: invalid operand for instruction
806 // CHECK-ERROR:        uhadd v4.2s, v5.2s, v5.4h
807 // CHECK-ERROR:                               ^
808 // CHECK-ERROR: error: invalid operand for instruction
809 // CHECK-ERROR:        shsub v11.4h, v12.8h, v13.4h
810 // CHECK-ERROR:                          ^
811 // CHECK-ERROR: error: invalid operand for instruction
812 // CHECK-ERROR:        uhsub v31.16b, v29.8b, v28.8b
813 // CHECK-ERROR:                          ^
814
815 //----------------------------------------------------------------------
816 // Vector Integer Rouding Halving Add (Signed)
817 // Vector Integer Rouding Halving Add (Unsigned)
818 //----------------------------------------------------------------------
819
820         // Mismatched and invalid vector types (2d)
821         srhadd v0.2s, v1.2s, v2.2d
822         urhadd v0.16b, v1.16b, v2.8h
823
824 // CHECK-ERROR: error: invalid operand for instruction
825 // CHECK-ERROR:        srhadd v0.2s, v1.2s, v2.2d
826 // CHECK-ERROR:                                ^
827 // CHECK-ERROR: error: invalid operand for instruction
828 // CHECK-ERROR:        urhadd v0.16b, v1.16b, v2.8h
829 // CHECK-ERROR:                                  ^
830
831 //----------------------------------------------------------------------
832 // Vector Integer Saturating Add (Signed)
833 // Vector Integer Saturating Add (Unsigned)
834 // Vector Integer Saturating Sub (Signed)
835 // Vector Integer Saturating Sub (Unsigned)
836 //----------------------------------------------------------------------
837
838         // Mismatched vector types
839         sqadd v0.2s, v1.2s, v2.2d
840         uqadd v31.8h, v1.4h, v2.4h
841         sqsub v10.8h, v1.16b, v2.16b
842         uqsub v31.8b, v1.8b, v2.4s
843
844 // CHECK-ERROR: error: invalid operand for instruction
845 // CHECK-ERROR:        sqadd v0.2s, v1.2s, v2.2d
846 // CHECK-ERROR:                               ^
847 // CHECK-ERROR: error: invalid operand for instruction
848 // CHECK-ERROR:        uqadd v31.8h, v1.4h, v2.4h
849 // CHECK-ERROR:                         ^
850 // CHECK-ERROR: error: invalid operand for instruction
851 // CHECK-ERROR:        sqsub v10.8h, v1.16b, v2.16b
852 // CHECK-ERROR:                         ^
853 // CHECK-ERROR: error: invalid operand for instruction
854 // CHECK-ERROR:        uqsub v31.8b, v1.8b, v2.4s
855 // CHECK-ERROR:                                ^
856
857 //----------------------------------------------------------------------
858 // Scalar Integer Saturating Add (Signed)
859 // Scalar Integer Saturating Add (Unsigned)
860 // Scalar Integer Saturating Sub (Signed)
861 // Scalar Integer Saturating Sub (Unsigned)
862 //----------------------------------------------------------------------
863
864       // Mismatched registers
865          sqadd d0, s31, d2
866          uqadd s0, s1, d2
867          sqsub b0, b2, s18
868          uqsub h1, h2, d2
869
870 // CHECK-ERROR: error: invalid operand for instruction
871 // CHECK-ERROR:        sqadd d0, s31, d2
872 // CHECK-ERROR:                  ^
873 // CHECK-ERROR: error: invalid operand for instruction
874 // CHECK-ERROR:        uqadd s0, s1, d2
875 // CHECK-ERROR:                      ^
876 // CHECK-ERROR: error: invalid operand for instruction
877 // CHECK-ERROR:        sqsub b0, b2, s18
878 // CHECK-ERROR:                      ^
879 // CHECK-ERROR: error: invalid operand for instruction
880 // CHECK-ERROR:        uqsub h1, h2, d2
881 // CHECK-ERROR:                      ^
882
883 //----------------------------------------------------------------------
884 // Scalar Integer Saturating Doubling Multiply Half High (Signed)
885 //----------------------------------------------------------------------
886
887     sqdmulh h10, s11, h12
888     sqdmulh s20, h21, s2
889
890 // CHECK-ERROR: error: invalid operand for instruction
891 // CHECK-ERROR:        sqdmulh h10, s11, h12
892 // CHECK-ERROR:                     ^
893 // CHECK-ERROR: error: invalid operand for instruction
894 // CHECK-ERROR:        sqdmulh s20, h21, s2
895 // CHECK-ERROR:                     ^
896
897 //------------------------------------------------------------------------
898 // Scalar Integer Saturating Rounding Doubling Multiply Half High (Signed)
899 //------------------------------------------------------------------------
900
901     sqrdmulh h10, s11, h12
902     sqrdmulh s20, h21, s2
903
904 // CHECK-ERROR: error: invalid operand for instruction
905 // CHECK-ERROR:        sqrdmulh h10, s11, h12
906 // CHECK-ERROR:                      ^
907 // CHECK-ERROR: error: invalid operand for instruction
908 // CHECK-ERROR:        sqrdmulh s20, h21, s2
909 // CHECK-ERROR:                      ^
910
911 //----------------------------------------------------------------------
912 // Vector Shift Left (Signed and Unsigned Integer)
913 //----------------------------------------------------------------------
914         // Mismatched vector types
915         sshl v0.4s, v15.2s, v16.2s
916         ushl v1.16b, v25.16b, v6.8h
917
918 // CHECK-ERROR: error: invalid operand for instruction
919 // CHECK-ERROR:        sshl v0.4s, v15.2s, v16.2s
920 // CHECK-ERROR:                        ^
921 // CHECK-ERROR: error: invalid operand for instruction
922 // CHECK-ERROR:        ushl v1.16b, v25.16b, v6.8h
923 // CHECK-ERROR:                                 ^
924
925 //----------------------------------------------------------------------
926 // Vector Saturating Shift Left (Signed and Unsigned Integer)
927 //----------------------------------------------------------------------
928         // Mismatched vector types
929         sqshl v0.2s, v15.4s, v16.2d
930         uqshl v1.8b, v25.4h, v6.8h
931
932 // CHECK-ERROR: error: invalid operand for instruction
933 // CHECK-ERROR:        sqshl v0.2s, v15.4s, v16.2d 
934 // CHECK-ERROR:                         ^
935 // CHECK-ERROR: error: invalid operand for instruction
936 // CHECK-ERROR:        uqshl v1.8b, v25.4h, v6.8h
937 // CHECK-ERROR:                         ^
938
939 //----------------------------------------------------------------------
940 // Vector Rouding Shift Left (Signed and Unsigned Integer)
941 //----------------------------------------------------------------------
942         // Mismatched vector types
943         srshl v0.8h, v15.8h, v16.16b
944         urshl v1.2d, v25.2d, v6.4s
945
946 // CHECK-ERROR: error: invalid operand for instruction
947 // CHECK-ERROR:        srshl v0.8h, v15.8h, v16.16b
948 // CHECK-ERROR:                                 ^
949 // CHECK-ERROR: error: invalid operand for instruction
950 // CHECK-ERROR:        urshl v1.2d, v25.2d, v6.4s
951 // CHECK-ERROR:                                ^
952
953 //----------------------------------------------------------------------
954 // Vector Saturating Rouding Shift Left (Signed and Unsigned Integer)
955 //----------------------------------------------------------------------
956         // Mismatched vector types
957         sqrshl v0.2s, v15.8h, v16.16b
958         uqrshl v1.4h, v25.4h,  v6.2d
959
960 // CHECK-ERROR: error: invalid operand for instruction
961 // CHECK-ERROR:        sqrshl v0.2s, v15.8h, v16.16b
962 // CHECK-ERROR:                          ^
963 // CHECK-ERROR: error: invalid operand for instruction
964 // CHECK-ERROR:        uqrshl v1.4h, v25.4h,  v6.2d
965 // CHECK-ERROR:                                  ^
966
967 //----------------------------------------------------------------------
968 // Scalar Integer Shift Left (Signed, Unsigned)
969 //----------------------------------------------------------------------
970         // Mismatched and invalid vector types
971         sshl d0, d1, s2
972         ushl b2, b0, b1
973
974 // CHECK-ERROR: error: invalid operand for instruction
975 // CHECK-ERROR:        sshl d0, d1, s2
976 // CHECK-ERROR:                     ^
977 // CHECK-ERROR: error: invalid operand for instruction
978 // CHECK-ERROR:        ushl b2, b0, b1
979 // CHECK-ERROR:             ^
980
981 //----------------------------------------------------------------------
982 // Scalar Integer Saturating Shift Left (Signed, Unsigned)
983 //----------------------------------------------------------------------
984
985         // Mismatched vector types
986         sqshl b0, s1, b0
987         uqshl h0, b1, h0
988         sqshl s0, h1, s0
989         uqshl d0, b1, d0
990
991 // CHECK-ERROR: error: invalid operand for instruction
992 // CHECK-ERROR:        sqshl b0, s1, b0
993 // CHECK-ERROR:                  ^
994 // CHECK-ERROR: error: invalid operand for instruction
995 // CHECK-ERROR:        uqshl h0, b1, h0
996 // CHECK-ERROR:                  ^
997 // CHECK-ERROR: error: invalid operand for instruction
998 // CHECK-ERROR:        sqshl s0, h1, s0
999 // CHECK-ERROR:                  ^
1000 // CHECK-ERROR: error: invalid operand for instruction
1001 // CHECK-ERROR:        uqshl d0, b1, d0
1002 // CHECK-ERROR:                  ^
1003
1004 //----------------------------------------------------------------------
1005 // Scalar Integer Rouding Shift Left (Signed, Unsigned)
1006 //----------------------------------------------------------------------
1007         // Mismatched and invalid vector types
1008         srshl h0, h1, h2
1009         urshl s0, s1, s2
1010
1011 // CHECK-ERROR: error: invalid operand for instruction
1012 // CHECK-ERROR:        srshl h0, h1, h2
1013 // CHECK-ERROR:              ^
1014 // CHECK-ERROR: error: invalid operand for instruction
1015 // CHECK-ERROR:        urshl s0, s1, s2
1016 // CHECK-ERROR:              ^
1017
1018
1019 //----------------------------------------------------------------------
1020 // Scalar Integer Saturating Rounding Shift Left (Signed, Unsigned)
1021 //----------------------------------------------------------------------
1022
1023         // Mismatched vector types
1024         sqrshl b0, b1, s0
1025         uqrshl h0, h1, b0
1026         sqrshl s0, s1, h0
1027         uqrshl d0, d1, b0
1028
1029 // CHECK-ERROR: error: invalid operand for instruction
1030 // CHECK-ERROR:        sqrshl b0, b1, s0
1031 // CHECK-ERROR:                       ^
1032 // CHECK-ERROR: error: invalid operand for instruction
1033 // CHECK-ERROR:        uqrshl h0, h1, b0
1034 // CHECK-ERROR:                       ^
1035 // CHECK-ERROR: error: invalid operand for instruction
1036 // CHECK-ERROR:        sqrshl s0, s1, h0
1037 // CHECK-ERROR:                       ^
1038 // CHECK-ERROR: error: invalid operand for instruction
1039 // CHECK-ERROR:        uqrshl d0, d1, b0
1040 // CHECK-ERROR:                       ^
1041
1042
1043 //----------------------------------------------------------------------
1044 // Vector Maximum (Signed, Unsigned)
1045 //----------------------------------------------------------------------
1046         // Mismatched and invalid vector types
1047         smax v0.2d, v1.2d, v2.2d
1048         umax v0.4h, v1.4h, v2.2s
1049
1050 // CHECK-ERROR: error: invalid operand for instruction
1051 // CHECK-ERROR:        smax v0.2d, v1.2d, v2.2d
1052 // CHECK-ERROR:                ^
1053 // CHECK-ERROR: error: invalid operand for instruction
1054 // CHECK-ERROR:        umax v0.4h, v1.4h, v2.2s
1055 // CHECK-ERROR:                              ^
1056
1057 //----------------------------------------------------------------------
1058 // Vector Minimum (Signed, Unsigned)
1059 //----------------------------------------------------------------------
1060         // Mismatched and invalid vector types
1061         smin v0.2d, v1.2d, v2.2d
1062         umin v0.2s, v1.2s, v2.8b
1063
1064 // CHECK-ERROR: error: invalid operand for instruction
1065 // CHECK-ERROR:        smin v0.2d, v1.2d, v2.2d
1066 // CHECK-ERROR:                ^
1067 // CHECK-ERROR: error: invalid operand for instruction
1068 // CHECK-ERROR:        umin v0.2s, v1.2s, v2.8b
1069 // CHECK-ERROR:                             ^
1070
1071
1072 //----------------------------------------------------------------------
1073 // Vector Maximum (Floating Point)
1074 //----------------------------------------------------------------------
1075         // Mismatched and invalid vector types
1076         fmax v0.2s, v1.2s, v2.4s
1077         fmax v0.8b, v1.8b, v2.8b
1078
1079 // CHECK-ERROR: error: invalid operand for instruction
1080 // CHECK-ERROR:        fmax v0.2s, v1.2s, v2.4s
1081 // CHECK-ERROR:                              ^
1082 // CHECK-ERROR: error: invalid operand for instruction
1083 // CHECK-ERROR:        fmax v0.8b, v1.8b, v2.8b
1084 // CHECK-ERROR:                ^
1085 //----------------------------------------------------------------------
1086 // Vector Minimum (Floating Point)
1087 //----------------------------------------------------------------------
1088         // Mismatched and invalid vector types
1089         fmin v0.4s, v1.4s, v2.2d
1090         fmin v0.8h, v1.8h, v2.8h
1091
1092 // CHECK-ERROR: error: invalid operand for instruction
1093 // CHECK-ERROR:        fmin v0.4s, v1.4s, v2.2d
1094 // CHECK-ERROR:                              ^
1095 // CHECK-ERROR: error: instruction requires: fullfp16
1096 // CHECK-ERROR:        fmin v0.8h, v1.8h, v2.8h
1097 // CHECK-ERROR:                ^
1098
1099 //----------------------------------------------------------------------
1100 // Vector maxNum (Floating Point)
1101 //----------------------------------------------------------------------
1102         // Mismatched and invalid vector types
1103         fmaxnm v0.2s, v1.2s, v2.2d
1104         fmaxnm v0.4h, v1.8h, v2.4h
1105
1106 // CHECK-ERROR: error: invalid operand for instruction
1107 // CHECK-ERROR:        fmaxnm v0.2s, v1.2s, v2.2d
1108 // CHECK-ERROR:                                ^
1109 // CHECK-ERROR: error: invalid operand for instruction
1110 // CHECK-ERROR:        fmaxnm v0.4h, v1.8h, v2.4h
1111 // CHECK-ERROR:                  ^
1112
1113 //----------------------------------------------------------------------
1114 // Vector minNum (Floating Point)
1115 //----------------------------------------------------------------------
1116         // Mismatched and invalid vector types
1117         fminnm v0.4s, v1.2s, v2.4s
1118         fminnm v0.16b, v0.16b, v0.16b
1119
1120 // CHECK-ERROR: error: invalid operand for instruction
1121 // CHECK-ERROR:        fminnm v0.4s, v1.2s, v2.4s
1122 // CHECK-ERROR:                         ^
1123 // CHECK-ERROR: error: invalid operand for instruction
1124 // CHECK-ERROR:        fminnm v0.16b, v0.16b, v0.16b
1125 // CHECK-ERROR:                  ^
1126
1127
1128 //----------------------------------------------------------------------
1129 // Vector Maximum Pairwise (Signed, Unsigned)
1130 //----------------------------------------------------------------------
1131         // Mismatched and invalid vector types
1132         smaxp v0.2d, v1.2d, v2.2d
1133         umaxp v0.4h, v1.4h, v2.2s
1134
1135 // CHECK-ERROR: error: invalid operand for instruction
1136 // CHECK-ERROR:        smaxp v0.2d, v1.2d, v2.2d
1137 // CHECK-ERROR:                 ^
1138 // CHECK-ERROR: error: invalid operand for instruction
1139 // CHECK-ERROR:        umaxp v0.4h, v1.4h, v2.2s
1140 // CHECK-ERROR:                               ^
1141
1142 //----------------------------------------------------------------------
1143 // Vector Minimum Pairwise (Signed, Unsigned)
1144 //----------------------------------------------------------------------
1145         // Mismatched and invalid vector types
1146         sminp v0.2d, v1.2d, v2.2d
1147         uminp v0.2s, v1.2s, v2.8b
1148
1149 // CHECK-ERROR: error: invalid operand for instruction
1150 // CHECK-ERROR:        sminp v0.2d, v1.2d, v2.2d
1151 // CHECK-ERROR:                 ^
1152 // CHECK-ERROR: error: invalid operand for instruction
1153 // CHECK-ERROR:        uminp v0.2s, v1.2s, v2.8b
1154 // CHECK-ERROR:                               ^
1155
1156
1157 //----------------------------------------------------------------------
1158 // Vector Maximum Pairwise (Floating Point)
1159 //----------------------------------------------------------------------
1160         // Mismatched and invalid vector types
1161         fmaxp v0.2s, v1.2s, v2.4s
1162         fmaxp v0.8b, v1.8b, v2.8b
1163
1164 // CHECK-ERROR: error: invalid operand for instruction
1165 // CHECK-ERROR:        fmaxp v0.2s, v1.2s, v2.4s
1166 // CHECK-ERROR:                               ^
1167 // CHECK-ERROR: error: invalid operand for instruction
1168 // CHECK-ERROR:        fmaxp v0.8b, v1.8b, v2.8b
1169 // CHECK-ERROR:                 ^
1170 //----------------------------------------------------------------------
1171 // Vector Minimum Pairwise (Floating Point)
1172 //----------------------------------------------------------------------
1173         // Mismatched and invalid vector types
1174         fminp v0.4s, v1.4s, v2.2d
1175         fminp v0.8h, v1.8h, v2.8h
1176
1177 // CHECK-ERROR: error: invalid operand for instruction
1178 // CHECK-ERROR:        fminp v0.4s, v1.4s, v2.2d
1179 // CHECK-ERROR:                               ^
1180 // CHECK-ERROR: error: instruction requires: fullfp16
1181 // CHECK-ERROR:        fminp v0.8h, v1.8h, v2.8h
1182 // CHECK-ERROR:                 ^
1183
1184 //----------------------------------------------------------------------
1185 // Vector maxNum Pairwise (Floating Point)
1186 //----------------------------------------------------------------------
1187         // Mismatched and invalid vector types
1188         fmaxnmp v0.2s, v1.2s, v2.2d
1189         fmaxnmp v0.4h, v1.8h, v2.4h
1190
1191 // CHECK-ERROR: error: invalid operand for instruction
1192 // CHECK-ERROR:        fmaxnmp v0.2s, v1.2s, v2.2d
1193 // CHECK-ERROR:                                 ^
1194 // CHECK-ERROR: error: invalid operand for instruction
1195 // CHECK-ERROR:        fmaxnmp v0.4h, v1.8h, v2.4h
1196 // CHECK-ERROR:                   ^
1197
1198 //----------------------------------------------------------------------
1199 // Vector minNum Pairwise (Floating Point)
1200 //----------------------------------------------------------------------
1201         // Mismatched and invalid vector types
1202         fminnmp v0.4s, v1.2s, v2.4s
1203         fminnmp v0.16b, v0.16b, v0.16b
1204
1205 // CHECK-ERROR: error: invalid operand for instruction
1206 // CHECK-ERROR:        fminnmp v0.4s, v1.2s, v2.4s
1207 // CHECK-ERROR:                          ^
1208 // CHECK-ERROR: error: invalid operand for instruction
1209 // CHECK-ERROR:        fminnmp v0.16b, v0.16b, v0.16b
1210 // CHECK-ERROR:                   ^
1211
1212
1213 //----------------------------------------------------------------------
1214 // Vector Add Pairwise (Integer)
1215 //----------------------------------------------------------------------
1216
1217         // Mismatched vector types
1218         addp v0.16b, v1.8b, v2.8b
1219
1220 // CHECK-ERROR: error: invalid operand for instruction
1221 // CHECK-ERROR:         addp v0.16b, v1.8b, v2.8b
1222 // CHECK-ERROR:                         ^
1223
1224 //----------------------------------------------------------------------
1225 // Vector Add Pairwise (Floating Point)
1226 //----------------------------------------------------------------------
1227         // Mismatched and invalid vector types
1228         faddp v0.16b, v1.8b, v2.8b
1229         faddp v0.2d, v1.2d, v2.8h
1230
1231 // CHECK-ERROR: error: invalid operand for instruction
1232 // CHECK-ERROR:         faddp v0.16b, v1.8b, v2.8b
1233 // CHECK-ERROR:                  ^
1234 // CHECK-ERROR: error: invalid operand for instruction
1235 // CHECK-ERROR:         faddp v0.2d, v1.2d, v2.8h
1236 // CHECK-ERROR:                                ^
1237
1238
1239 //----------------------------------------------------------------------
1240 // Vector Saturating Doubling Multiply High
1241 //----------------------------------------------------------------------
1242          // Mismatched and invalid vector types
1243          sqdmulh v2.4h, v25.8h, v3.4h
1244          sqdmulh v12.2d, v5.2d, v13.2d
1245          sqdmulh v3.8b, v1.8b, v30.8b
1246
1247 // CHECK-ERROR: error: invalid operand for instruction
1248 // CHECK-ERROR:         sqdmulh v2.4h, v25.8h, v3.4h
1249 // CHECK-ERROR:                            ^
1250 // CHECK-ERROR: error: invalid operand for instruction
1251 // CHECK-ERROR:         sqdmulh v12.2d, v5.2d, v13.2d
1252 // CHECK-ERROR:                     ^
1253 // CHECK-ERROR: error: invalid operand for instruction
1254 // CHECK-ERROR:         sqdmulh v3.8b, v1.8b, v30.8b
1255 // CHECK-ERROR:                    ^
1256
1257 //----------------------------------------------------------------------
1258 // Vector Saturating Rouding Doubling Multiply High
1259 //----------------------------------------------------------------------
1260          // Mismatched and invalid vector types
1261          sqrdmulh v2.2s, v25.4s, v3.4s
1262          sqrdmulh v12.16b, v5.16b, v13.16b
1263          sqrdmulh v3.4h, v1.4h, v30.2d
1264
1265
1266 // CHECK-ERROR: error: invalid operand for instruction
1267 // CHECK-ERROR:         sqrdmulh v2.2s, v25.4s, v3.4s
1268 // CHECK-ERROR:                             ^
1269 // CHECK-ERROR: error: invalid operand for instruction
1270 // CHECK-ERROR:         sqrdmulh v12.16b, v5.16b, v13.16b
1271 // CHECK-ERROR:                       ^
1272 // CHECK-ERROR: error: invalid operand for instruction
1273 // CHECK-ERROR:         sqrdmulh v3.4h, v1.4h, v30.2d
1274 // CHECK-ERROR:                                    ^
1275
1276 //----------------------------------------------------------------------
1277 // Vector Multiply Extended
1278 //----------------------------------------------------------------------
1279          // Mismatched and invalid vector types
1280       fmulx v21.2s, v5.2s, v13.2d
1281       fmulx v1.4h, v25.4h, v3.4h
1282
1283 // CHECK-ERROR: error: invalid operand for instruction
1284 // CHECK-ERROR:         fmulx v21.2s, v5.2s, v13.2d
1285 // CHECK-ERROR:                                  ^
1286 // CHECK-ERROR: error: instruction requires: fullfp16
1287 // CHECK-ERROR:         fmulx v1.4h, v25.4h, v3.4h
1288 // CHECK-ERROR:                  ^
1289
1290 //------------------------------------------------------------------------------
1291 // Vector Shift Left by Immediate
1292 //------------------------------------------------------------------------------
1293          // Mismatched vector types and out of range
1294          shl v0.4s, v15,2s, #3
1295          shl v0.2d, v17.4s, #3
1296          shl v0.8b, v31.8b, #-1
1297          shl v0.8b, v31.8b, #8
1298          shl v0.4s, v21.4s, #32
1299          shl v0.2d, v1.2d, #64
1300
1301
1302 // CHECK-ERROR: error: unexpected token in argument list
1303 // CHECK-ERROR:         shl v0.4s, v15,2s, #3
1304 // CHECK-ERROR:                         ^
1305
1306 // CHECK-ERROR: error: invalid operand for instruction
1307 // CHECK-ERROR:         shl v0.2d, v17.4s, #3
1308 // CHECK-ERROR:                        ^
1309 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1310 // CHECK-ERROR:         shl v0.8b, v31.8b, #-1
1311 // CHECK-ERROR:                            ^
1312 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1313 // CHECK-ERROR:         shl v0.8b, v31.8b, #8
1314 // CHECK-ERROR:                            ^
1315 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1316 // CHECK-ERROR:         shl v0.4s, v21.4s, #32
1317 // CHECK-ERROR:                            ^
1318 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
1319 // CHECK-ERROR:         shl v0.2d, v1.2d, #64
1320 // CHECK-ERROR:                           ^
1321
1322 //----------------------------------------------------------------------
1323 // Vector Shift Left Long by Immediate
1324 //----------------------------------------------------------------------
1325         // Mismatched vector types
1326         sshll v0.4s, v15.2s, #3
1327         ushll v1.16b, v25.16b, #6
1328         sshll2 v0.2d, v3.8s, #15
1329         ushll2 v1.4s, v25.4s, #7
1330
1331         // Out of range 
1332         sshll v0.8h, v1.8b, #-1
1333         sshll v0.8h, v1.8b, #9
1334         ushll v0.4s, v1.4h, #17
1335         ushll v0.2d, v1.2s, #33
1336         sshll2 v0.8h, v1.16b, #9
1337         sshll2 v0.4s, v1.8h, #17
1338         ushll2 v0.2d, v1.4s, #33
1339
1340 // CHECK-ERROR: error: invalid operand for instruction
1341 // CHECK-ERROR:        sshll v0.4s, v15.2s, #3
1342 // CHECK-ERROR:                         ^
1343 // CHECK-ERROR: error: invalid operand for instruction
1344 // CHECK-ERROR:        ushll v1.16b, v25.16b, #6
1345 // CHECK-ERROR:                 ^
1346 // CHECK-ERROR: error: invalid operand for instruction
1347 // CHECK-ERROR:        sshll2 v0.2d, v3.8s, #15
1348 // CHECK-ERROR:                      ^
1349 // CHECK-ERROR: error: invalid operand for instruction
1350 // CHECK-ERROR:        ushll2 v1.4s, v25.4s, #7
1351 // CHECK-ERROR:                          ^
1352 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1353 // CHECK-ERROR:        sshll v0.8h, v1.8b, #-1
1354 // CHECK-ERROR:                            ^
1355 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1356 // CHECK-ERROR:        sshll v0.8h, v1.8b, #9
1357 // CHECK-ERROR:                            ^
1358 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1359 // CHECK-ERROR:        ushll v0.4s, v1.4h, #17
1360 // CHECK-ERROR:                            ^
1361 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1362 // CHECK-ERROR:        ushll v0.2d, v1.2s, #33
1363 // CHECK-ERROR:                            ^
1364 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1365 // CHECK-ERROR:        sshll2 v0.8h, v1.16b, #9
1366 // CHECK-ERROR:                              ^
1367 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1368 // CHECK-ERROR:        sshll2 v0.4s, v1.8h, #17
1369 // CHECK-ERROR:                             ^
1370 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1371 // CHECK-ERROR:        ushll2 v0.2d, v1.4s, #33
1372 // CHECK-ERROR:                             ^
1373
1374
1375 //------------------------------------------------------------------------------
1376 // Vector shift right by immediate
1377 //------------------------------------------------------------------------------
1378          sshr v0.8b, v1.8h, #3
1379          sshr v0.4h, v1.4s, #3
1380          sshr v0.2s, v1.2d, #3
1381          sshr v0.16b, v1.16b, #9
1382          sshr v0.8h, v1.8h, #17
1383          sshr v0.4s, v1.4s, #33
1384          sshr v0.2d, v1.2d, #65
1385
1386 // CHECK-ERROR: error: invalid operand for instruction
1387 // CHECK-ERROR:         sshr v0.8b, v1.8h, #3
1388 // CHECK-ERROR:                        ^
1389 // CHECK-ERROR: error: invalid operand for instruction
1390 // CHECK-ERROR:         sshr v0.4h, v1.4s, #3
1391 // CHECK-ERROR:                        ^
1392 // CHECK-ERROR: error: invalid operand for instruction
1393 // CHECK-ERROR:         sshr v0.2s, v1.2d, #3
1394 // CHECK-ERROR:                        ^
1395 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1396 // CHECK-ERROR:         sshr v0.16b, v1.16b, #9
1397 // CHECK-ERROR:                              ^
1398 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1399 // CHECK-ERROR:         sshr v0.8h, v1.8h, #17
1400 // CHECK-ERROR:                            ^
1401 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1402 // CHECK-ERROR:         sshr v0.4s, v1.4s, #33
1403 // CHECK-ERROR:                            ^
1404 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1405 // CHECK-ERROR:         sshr v0.2d, v1.2d, #65
1406 // CHECK-ERROR:                            ^
1407
1408 //------------------------------------------------------------------------------
1409 // Vector  shift right by immediate
1410 //------------------------------------------------------------------------------
1411          ushr v0.8b, v1.8h, #3
1412          ushr v0.4h, v1.4s, #3
1413          ushr v0.2s, v1.2d, #3
1414          ushr v0.16b, v1.16b, #9
1415          ushr v0.8h, v1.8h, #17
1416          ushr v0.4s, v1.4s, #33
1417          ushr v0.2d, v1.2d, #65
1418
1419 // CHECK-ERROR: error: invalid operand for instruction
1420 // CHECK-ERROR:         ushr v0.8b, v1.8h, #3
1421 // CHECK-ERROR:                        ^
1422 // CHECK-ERROR: error: invalid operand for instruction
1423 // CHECK-ERROR:         ushr v0.4h, v1.4s, #3
1424 // CHECK-ERROR:                        ^
1425 // CHECK-ERROR: error: invalid operand for instruction
1426 // CHECK-ERROR:         ushr v0.2s, v1.2d, #3
1427 // CHECK-ERROR:                        ^
1428 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1429 // CHECK-ERROR:         ushr v0.16b, v1.16b, #9
1430 // CHECK-ERROR:                              ^
1431 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1432 // CHECK-ERROR:         ushr v0.8h, v1.8h, #17
1433 // CHECK-ERROR:                            ^
1434 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1435 // CHECK-ERROR:         ushr v0.4s, v1.4s, #33
1436 // CHECK-ERROR:                            ^
1437 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1438 // CHECK-ERROR:         ushr v0.2d, v1.2d, #65
1439 // CHECK-ERROR:                            ^
1440
1441 //------------------------------------------------------------------------------
1442 // Vector shift right and accumulate by immediate
1443 //------------------------------------------------------------------------------
1444          ssra v0.8b, v1.8h, #3
1445          ssra v0.4h, v1.4s, #3
1446          ssra v0.2s, v1.2d, #3
1447          ssra v0.16b, v1.16b, #9
1448          ssra v0.8h, v1.8h, #17
1449          ssra v0.4s, v1.4s, #33
1450          ssra v0.2d, v1.2d, #65
1451
1452 // CHECK-ERROR: error: invalid operand for instruction
1453 // CHECK-ERROR:         ssra v0.8b, v1.8h, #3
1454 // CHECK-ERROR:                        ^
1455 // CHECK-ERROR: error: invalid operand for instruction
1456 // CHECK-ERROR:         ssra v0.4h, v1.4s, #3
1457 // CHECK-ERROR:                        ^
1458 // CHECK-ERROR: error: invalid operand for instruction
1459 // CHECK-ERROR:         ssra v0.2s, v1.2d, #3
1460 // CHECK-ERROR:                        ^
1461 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1462 // CHECK-ERROR:         ssra v0.16b, v1.16b, #9
1463 // CHECK-ERROR:                              ^
1464 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1465 // CHECK-ERROR:         ssra v0.8h, v1.8h, #17
1466 // CHECK-ERROR:                            ^
1467 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1468 // CHECK-ERROR:         ssra v0.4s, v1.4s, #33
1469 // CHECK-ERROR:                            ^
1470 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1471 // CHECK-ERROR:         ssra v0.2d, v1.2d, #65
1472 // CHECK-ERROR:                            ^
1473
1474 //------------------------------------------------------------------------------
1475 // Vector  shift right and accumulate by immediate
1476 //------------------------------------------------------------------------------
1477          usra v0.8b, v1.8h, #3
1478          usra v0.4h, v1.4s, #3
1479          usra v0.2s, v1.2d, #3
1480          usra v0.16b, v1.16b, #9
1481          usra v0.8h, v1.8h, #17
1482          usra v0.4s, v1.4s, #33
1483          usra v0.2d, v1.2d, #65
1484
1485 // CHECK-ERROR: error: invalid operand for instruction
1486 // CHECK-ERROR:         usra v0.8b, v1.8h, #3
1487 // CHECK-ERROR:                        ^
1488 // CHECK-ERROR: error: invalid operand for instruction
1489 // CHECK-ERROR:         usra v0.4h, v1.4s, #3
1490 // CHECK-ERROR:                        ^
1491 // CHECK-ERROR: error: invalid operand for instruction
1492 // CHECK-ERROR:         usra v0.2s, v1.2d, #3
1493 // CHECK-ERROR:                        ^
1494 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1495 // CHECK-ERROR:         usra v0.16b, v1.16b, #9
1496 // CHECK-ERROR:                              ^
1497 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1498 // CHECK-ERROR:         usra v0.8h, v1.8h, #17
1499 // CHECK-ERROR:                            ^
1500 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1501 // CHECK-ERROR:         usra v0.4s, v1.4s, #33
1502 // CHECK-ERROR:                            ^
1503 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1504 // CHECK-ERROR:         usra v0.2d, v1.2d, #65
1505 // CHECK-ERROR:                            ^
1506
1507 //------------------------------------------------------------------------------
1508 // Vector rounding shift right by immediate
1509 //------------------------------------------------------------------------------
1510          srshr v0.8b, v1.8h, #3
1511          srshr v0.4h, v1.4s, #3
1512          srshr v0.2s, v1.2d, #3
1513          srshr v0.16b, v1.16b, #9
1514          srshr v0.8h, v1.8h, #17
1515          srshr v0.4s, v1.4s, #33
1516          srshr v0.2d, v1.2d, #65
1517
1518 // CHECK-ERROR: error: invalid operand for instruction
1519 // CHECK-ERROR:         srshr v0.8b, v1.8h, #3
1520 // CHECK-ERROR:                         ^
1521 // CHECK-ERROR: error: invalid operand for instruction
1522 // CHECK-ERROR:         srshr v0.4h, v1.4s, #3
1523 // CHECK-ERROR:                         ^
1524 // CHECK-ERROR: error: invalid operand for instruction
1525 // CHECK-ERROR:         srshr v0.2s, v1.2d, #3
1526 // CHECK-ERROR:                         ^
1527 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1528 // CHECK-ERROR:         srshr v0.16b, v1.16b, #9
1529 // CHECK-ERROR:                               ^
1530 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1531 // CHECK-ERROR:         srshr v0.8h, v1.8h, #17
1532 // CHECK-ERROR:                             ^
1533 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1534 // CHECK-ERROR:         srshr v0.4s, v1.4s, #33
1535 // CHECK-ERROR:                             ^
1536 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1537 // CHECK-ERROR:         srshr v0.2d, v1.2d, #65
1538 // CHECK-ERROR:                             ^
1539
1540 //------------------------------------------------------------------------------
1541 // Vecotr rounding shift right by immediate
1542 //------------------------------------------------------------------------------
1543          urshr v0.8b, v1.8h, #3
1544          urshr v0.4h, v1.4s, #3
1545          urshr v0.2s, v1.2d, #3
1546          urshr v0.16b, v1.16b, #9
1547          urshr v0.8h, v1.8h, #17
1548          urshr v0.4s, v1.4s, #33
1549          urshr v0.2d, v1.2d, #65
1550
1551 // CHECK-ERROR: error: invalid operand for instruction
1552 // CHECK-ERROR:         urshr v0.8b, v1.8h, #3
1553 // CHECK-ERROR:                         ^
1554 // CHECK-ERROR: error: invalid operand for instruction
1555 // CHECK-ERROR:         urshr v0.4h, v1.4s, #3
1556 // CHECK-ERROR:                         ^
1557 // CHECK-ERROR: error: invalid operand for instruction
1558 // CHECK-ERROR:         urshr v0.2s, v1.2d, #3
1559 // CHECK-ERROR:                         ^
1560 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1561 // CHECK-ERROR:         urshr v0.16b, v1.16b, #9
1562 // CHECK-ERROR:                               ^
1563 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1564 // CHECK-ERROR:         urshr v0.8h, v1.8h, #17
1565 // CHECK-ERROR:                             ^
1566 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1567 // CHECK-ERROR:         urshr v0.4s, v1.4s, #33
1568 // CHECK-ERROR:                             ^
1569 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1570 // CHECK-ERROR:         urshr v0.2d, v1.2d, #65
1571 // CHECK-ERROR:                             ^
1572
1573 //------------------------------------------------------------------------------
1574 // Vector rounding shift right and accumulate by immediate
1575 //------------------------------------------------------------------------------
1576          srsra v0.8b, v1.8h, #3
1577          srsra v0.4h, v1.4s, #3
1578          srsra v0.2s, v1.2d, #3
1579          srsra v0.16b, v1.16b, #9
1580          srsra v0.8h, v1.8h, #17
1581          srsra v0.4s, v1.4s, #33
1582          srsra v0.2d, v1.2d, #65
1583
1584 // CHECK-ERROR: error: invalid operand for instruction
1585 // CHECK-ERROR:         srsra v0.8b, v1.8h, #3
1586 // CHECK-ERROR:                         ^
1587 // CHECK-ERROR: error: invalid operand for instruction
1588 // CHECK-ERROR:         srsra v0.4h, v1.4s, #3
1589 // CHECK-ERROR:                         ^
1590 // CHECK-ERROR: error: invalid operand for instruction
1591 // CHECK-ERROR:         srsra v0.2s, v1.2d, #3
1592 // CHECK-ERROR:                         ^
1593 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1594 // CHECK-ERROR:         srsra v0.16b, v1.16b, #9
1595 // CHECK-ERROR:                               ^
1596 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1597 // CHECK-ERROR:         srsra v0.8h, v1.8h, #17
1598 // CHECK-ERROR:                             ^
1599 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1600 // CHECK-ERROR:         srsra v0.4s, v1.4s, #33
1601 // CHECK-ERROR:                             ^
1602 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1603 // CHECK-ERROR:         srsra v0.2d, v1.2d, #65
1604 // CHECK-ERROR:                             ^
1605
1606 //------------------------------------------------------------------------------
1607 // Vector rounding shift right and accumulate by immediate
1608 //------------------------------------------------------------------------------
1609          ursra v0.8b, v1.8h, #3
1610          ursra v0.4h, v1.4s, #3
1611          ursra v0.2s, v1.2d, #3
1612          ursra v0.16b, v1.16b, #9
1613          ursra v0.8h, v1.8h, #17
1614          ursra v0.4s, v1.4s, #33
1615          ursra v0.2d, v1.2d, #65
1616
1617 // CHECK-ERROR: error: invalid operand for instruction
1618 // CHECK-ERROR:         ursra v0.8b, v1.8h, #3
1619 // CHECK-ERROR:                         ^
1620 // CHECK-ERROR: error: invalid operand for instruction
1621 // CHECK-ERROR:         ursra v0.4h, v1.4s, #3
1622 // CHECK-ERROR:                         ^
1623 // CHECK-ERROR: error: invalid operand for instruction
1624 // CHECK-ERROR:         ursra v0.2s, v1.2d, #3
1625 // CHECK-ERROR:                         ^
1626 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1627 // CHECK-ERROR:         ursra v0.16b, v1.16b, #9
1628 // CHECK-ERROR:                               ^
1629 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1630 // CHECK-ERROR:         ursra v0.8h, v1.8h, #17
1631 // CHECK-ERROR:                             ^
1632 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1633 // CHECK-ERROR:         ursra v0.4s, v1.4s, #33
1634 // CHECK-ERROR:                             ^
1635 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1636 // CHECK-ERROR:         ursra v0.2d, v1.2d, #65
1637 // CHECK-ERROR:                             ^
1638
1639 //------------------------------------------------------------------------------
1640 // Vector shift right and insert by immediate
1641 //------------------------------------------------------------------------------
1642          sri v0.8b, v1.8h, #3
1643          sri v0.4h, v1.4s, #3
1644          sri v0.2s, v1.2d, #3
1645          sri v0.16b, v1.16b, #9
1646          sri v0.8h, v1.8h, #17
1647          sri v0.4s, v1.4s, #33
1648          sri v0.2d, v1.2d, #65
1649
1650 // CHECK-ERROR: error: invalid operand for instruction
1651 // CHECK-ERROR:         sri v0.8b, v1.8h, #3
1652 // CHECK-ERROR:                       ^
1653 // CHECK-ERROR: error: invalid operand for instruction
1654 // CHECK-ERROR:         sri v0.4h, v1.4s, #3
1655 // CHECK-ERROR:                       ^
1656 // CHECK-ERROR: error: invalid operand for instruction
1657 // CHECK-ERROR:         sri v0.2s, v1.2d, #3
1658 // CHECK-ERROR:                       ^
1659 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1660 // CHECK-ERROR:         sri v0.16b, v1.16b, #9
1661 // CHECK-ERROR:                             ^
1662 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1663 // CHECK-ERROR:         sri v0.8h, v1.8h, #17
1664 // CHECK-ERROR:                           ^
1665 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1666 // CHECK-ERROR:         sri v0.4s, v1.4s, #33
1667 // CHECK-ERROR:                           ^
1668 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
1669 // CHECK-ERROR:         sri v0.2d, v1.2d, #65
1670 // CHECK-ERROR:                           ^
1671
1672 //------------------------------------------------------------------------------
1673 // Vector shift left and insert by immediate
1674 //------------------------------------------------------------------------------
1675          sli v0.8b, v1.8h, #3
1676          sli v0.4h, v1.4s, #3
1677          sli v0.2s, v1.2d, #3
1678          sli v0.16b, v1.16b, #8
1679          sli v0.8h, v1.8h, #16
1680          sli v0.4s, v1.4s, #32
1681          sli v0.2d, v1.2d, #64
1682
1683 // CHECK-ERROR: error: invalid operand for instruction
1684 // CHECK-ERROR:         sli v0.8b, v1.8h, #3
1685 // CHECK-ERROR:                       ^
1686 // CHECK-ERROR: error: invalid operand for instruction
1687 // CHECK-ERROR:         sli v0.4h, v1.4s, #3
1688 // CHECK-ERROR:                       ^
1689 // CHECK-ERROR: error: invalid operand for instruction
1690 // CHECK-ERROR:         sli v0.2s, v1.2d, #3
1691 // CHECK-ERROR:                       ^
1692 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1693 // CHECK-ERROR:         sli v0.16b, v1.16b, #8
1694 // CHECK-ERROR:                             ^
1695 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1696 // CHECK-ERROR:         sli v0.8h, v1.8h, #16
1697 // CHECK-ERROR:                           ^
1698 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1699 // CHECK-ERROR:         sli v0.4s, v1.4s, #32
1700 // CHECK-ERROR:                           ^
1701 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
1702 // CHECK-ERROR:         sli v0.2d, v1.2d, #64
1703 // CHECK-ERROR:                           ^
1704
1705 //------------------------------------------------------------------------------
1706 // Vector saturating shift left unsigned by immediate
1707 //------------------------------------------------------------------------------
1708          sqshlu v0.8b, v1.8h, #3
1709          sqshlu v0.4h, v1.4s, #3
1710          sqshlu v0.2s, v1.2d, #3
1711          sqshlu v0.16b, v1.16b, #8
1712          sqshlu v0.8h, v1.8h, #16
1713          sqshlu v0.4s, v1.4s, #32
1714          sqshlu v0.2d, v1.2d, #64
1715
1716 // CHECK-ERROR: error: invalid operand for instruction
1717 // CHECK-ERROR:         sqshlu v0.8b, v1.8h, #3
1718 // CHECK-ERROR:                          ^
1719 // CHECK-ERROR: error: invalid operand for instruction
1720 // CHECK-ERROR:         sqshlu v0.4h, v1.4s, #3
1721 // CHECK-ERROR:                          ^
1722 // CHECK-ERROR: error: invalid operand for instruction
1723 // CHECK-ERROR:         sqshlu v0.2s, v1.2d, #3
1724 // CHECK-ERROR:                          ^
1725 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1726 // CHECK-ERROR:         sqshlu v0.16b, v1.16b, #8
1727 // CHECK-ERROR:                                ^
1728 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1729 // CHECK-ERROR:         sqshlu v0.8h, v1.8h, #16
1730 // CHECK-ERROR:                              ^
1731 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1732 // CHECK-ERROR:         sqshlu v0.4s, v1.4s, #32
1733 // CHECK-ERROR:                              ^
1734 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
1735 // CHECK-ERROR:         sqshlu v0.2d, v1.2d, #64
1736 // CHECK-ERROR:                              ^
1737
1738 //------------------------------------------------------------------------------
1739 // Vector saturating shift left by immediate
1740 //------------------------------------------------------------------------------
1741          sqshl v0.8b, v1.8h, #3
1742          sqshl v0.4h, v1.4s, #3
1743          sqshl v0.2s, v1.2d, #3
1744          sqshl v0.16b, v1.16b, #8
1745          sqshl v0.8h, v1.8h, #16
1746          sqshl v0.4s, v1.4s, #32
1747          sqshl v0.2d, v1.2d, #64
1748
1749 // CHECK-ERROR: error: invalid operand for instruction
1750 // CHECK-ERROR:         sqshl v0.8b, v1.8h, #3
1751 // CHECK-ERROR:                         ^
1752 // CHECK-ERROR: error: invalid operand for instruction
1753 // CHECK-ERROR:         sqshl v0.4h, v1.4s, #3
1754 // CHECK-ERROR:                         ^
1755 // CHECK-ERROR: error: invalid operand for instruction
1756 // CHECK-ERROR:         sqshl v0.2s, v1.2d, #3
1757 // CHECK-ERROR:                         ^
1758 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1759 // CHECK-ERROR:         sqshl v0.16b, v1.16b, #8
1760 // CHECK-ERROR:                               ^
1761 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1762 // CHECK-ERROR:         sqshl v0.8h, v1.8h, #16
1763 // CHECK-ERROR:                             ^
1764 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1765 // CHECK-ERROR:         sqshl v0.4s, v1.4s, #32
1766 // CHECK-ERROR:                             ^
1767 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
1768 // CHECK-ERROR:         sqshl v0.2d, v1.2d, #64
1769 // CHECK-ERROR:                             ^
1770
1771 //------------------------------------------------------------------------------
1772 // Vector saturating shift left by immediate
1773 //------------------------------------------------------------------------------
1774          uqshl v0.8b, v1.8h, #3
1775          uqshl v0.4h, v1.4s, #3
1776          uqshl v0.2s, v1.2d, #3
1777          uqshl v0.16b, v1.16b, #8
1778          uqshl v0.8h, v1.8h, #16
1779          uqshl v0.4s, v1.4s, #32
1780          uqshl v0.2d, v1.2d, #64
1781
1782 // CHECK-ERROR: error: invalid operand for instruction
1783 // CHECK-ERROR:         uqshl v0.8b, v1.8h, #3
1784 // CHECK-ERROR:                         ^
1785 // CHECK-ERROR: error: invalid operand for instruction
1786 // CHECK-ERROR:         uqshl v0.4h, v1.4s, #3
1787 // CHECK-ERROR:                         ^
1788 // CHECK-ERROR: error: invalid operand for instruction
1789 // CHECK-ERROR:         uqshl v0.2s, v1.2d, #3
1790 // CHECK-ERROR:                         ^
1791 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
1792 // CHECK-ERROR:         uqshl v0.16b, v1.16b, #8
1793 // CHECK-ERROR:                               ^
1794 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
1795 // CHECK-ERROR:         uqshl v0.8h, v1.8h, #16
1796 // CHECK-ERROR:                             ^
1797 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
1798 // CHECK-ERROR:         uqshl v0.4s, v1.4s, #32
1799 // CHECK-ERROR:                             ^
1800 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
1801 // CHECK-ERROR:         uqshl v0.2d, v1.2d, #64
1802 // CHECK-ERROR:                             ^
1803
1804 //------------------------------------------------------------------------------
1805 // Vector shift right narrow by immediate
1806 //------------------------------------------------------------------------------
1807          shrn v0.8b, v1.8b, #3
1808          shrn v0.4h, v1.4h, #3
1809          shrn v0.2s, v1.2s, #3
1810          shrn2 v0.16b, v1.8h, #17
1811          shrn2 v0.8h, v1.4s, #33
1812          shrn2 v0.4s, v1.2d, #65
1813
1814 // CHECK-ERROR: error: invalid operand for instruction
1815 // CHECK-ERROR:         shrn v0.8b, v1.8b, #3
1816 // CHECK-ERROR:                        ^
1817 // CHECK-ERROR: error: invalid operand for instruction
1818 // CHECK-ERROR:         shrn v0.4h, v1.4h, #3
1819 // CHECK-ERROR:                        ^
1820 // CHECK-ERROR: error: invalid operand for instruction
1821 // CHECK-ERROR:         shrn v0.2s, v1.2s, #3
1822 // CHECK-ERROR:                        ^
1823 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1824 // CHECK-ERROR:         shrn2 v0.16b, v1.8h, #17
1825 // CHECK-ERROR:                              ^
1826 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1827 // CHECK-ERROR:         shrn2 v0.8h, v1.4s, #33
1828 // CHECK-ERROR:                             ^
1829 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1830 // CHECK-ERROR:         shrn2 v0.4s, v1.2d, #65
1831 // CHECK-ERROR:                             ^
1832
1833 //------------------------------------------------------------------------------
1834 // Vector saturating shift right unsigned narrow by immediate
1835 //------------------------------------------------------------------------------
1836          sqshrun v0.8b, v1.8b, #3
1837          sqshrun v0.4h, v1.4h, #3
1838          sqshrun v0.2s, v1.2s, #3
1839          sqshrun2 v0.16b, v1.8h, #17
1840          sqshrun2 v0.8h, v1.4s, #33
1841          sqshrun2 v0.4s, v1.2d, #65
1842
1843 // CHECK-ERROR: error: invalid operand for instruction
1844 // CHECK-ERROR:         sqshrun v0.8b, v1.8b, #3
1845 // CHECK-ERROR:                           ^
1846 // CHECK-ERROR: error: invalid operand for instruction
1847 // CHECK-ERROR:         sqshrun v0.4h, v1.4h, #3
1848 // CHECK-ERROR:                           ^
1849 // CHECK-ERROR: error: invalid operand for instruction
1850 // CHECK-ERROR:         sqshrun v0.2s, v1.2s, #3
1851 // CHECK-ERROR:                           ^
1852 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1853 // CHECK-ERROR:         sqshrun2 v0.16b, v1.8h, #17
1854 // CHECK-ERROR:                                 ^
1855 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1856 // CHECK-ERROR:         sqshrun2 v0.8h, v1.4s, #33
1857 // CHECK-ERROR:                                ^
1858 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1859 // CHECK-ERROR:         sqshrun2 v0.4s, v1.2d, #65
1860 // CHECK-ERROR:                                ^
1861
1862 //------------------------------------------------------------------------------
1863 // Vector rounding shift right narrow by immediate
1864 //------------------------------------------------------------------------------
1865          rshrn v0.8b, v1.8b, #3
1866          rshrn v0.4h, v1.4h, #3
1867          rshrn v0.2s, v1.2s, #3
1868          rshrn2 v0.16b, v1.8h, #17
1869          rshrn2 v0.8h, v1.4s, #33
1870          rshrn2 v0.4s, v1.2d, #65
1871
1872 // CHECK-ERROR: error: invalid operand for instruction
1873 // CHECK-ERROR:         rshrn v0.8b, v1.8b, #3
1874 // CHECK-ERROR:                         ^
1875 // CHECK-ERROR: error: invalid operand for instruction
1876 // CHECK-ERROR:         rshrn v0.4h, v1.4h, #3
1877 // CHECK-ERROR:                         ^
1878 // CHECK-ERROR: error: invalid operand for instruction
1879 // CHECK-ERROR:         rshrn v0.2s, v1.2s, #3
1880 // CHECK-ERROR:                         ^
1881 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1882 // CHECK-ERROR:         rshrn2 v0.16b, v1.8h, #17
1883 // CHECK-ERROR:                               ^
1884 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1885 // CHECK-ERROR:         rshrn2 v0.8h, v1.4s, #33
1886 // CHECK-ERROR:                              ^
1887 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1888 // CHECK-ERROR:         rshrn2 v0.4s, v1.2d, #65
1889 // CHECK-ERROR:                              ^
1890
1891 //------------------------------------------------------------------------------
1892 // Vector saturating shift right rounded unsigned narrow by immediate
1893 //------------------------------------------------------------------------------
1894          sqrshrun v0.8b, v1.8b, #3
1895          sqrshrun v0.4h, v1.4h, #3
1896          sqrshrun v0.2s, v1.2s, #3
1897          sqrshrun2 v0.16b, v1.8h, #17
1898          sqrshrun2 v0.8h, v1.4s, #33
1899          sqrshrun2 v0.4s, v1.2d, #65
1900
1901 // CHECK-ERROR: error: invalid operand for instruction
1902 // CHECK-ERROR:         sqrshrun v0.8b, v1.8b, #3
1903 // CHECK-ERROR:                            ^
1904 // CHECK-ERROR: error: invalid operand for instruction
1905 // CHECK-ERROR:         sqrshrun v0.4h, v1.4h, #3
1906 // CHECK-ERROR:                            ^
1907 // CHECK-ERROR: error: invalid operand for instruction
1908 // CHECK-ERROR:         sqrshrun v0.2s, v1.2s, #3
1909 // CHECK-ERROR:                            ^
1910 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1911 // CHECK-ERROR:         sqrshrun2 v0.16b, v1.8h, #17
1912 // CHECK-ERROR:                                  ^
1913 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1914 // CHECK-ERROR:         sqrshrun2 v0.8h, v1.4s, #33
1915 // CHECK-ERROR:                                 ^
1916 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1917 // CHECK-ERROR:         sqrshrun2 v0.4s, v1.2d, #65
1918 // CHECK-ERROR:                                 ^
1919
1920 //------------------------------------------------------------------------------
1921 // Vector saturating shift right narrow by immediate
1922 //------------------------------------------------------------------------------
1923          sqshrn v0.8b, v1.8b, #3
1924          sqshrn v0.4h, v1.4h, #3
1925          sqshrn v0.2s, v1.2s, #3
1926          sqshrn2 v0.16b, v1.8h, #17
1927          sqshrn2 v0.8h, v1.4s, #33
1928          sqshrn2 v0.4s, v1.2d, #65
1929
1930 // CHECK-ERROR: error: invalid operand for instruction
1931 // CHECK-ERROR:         sqshrn v0.8b, v1.8b, #3
1932 // CHECK-ERROR:                          ^
1933 // CHECK-ERROR: error: invalid operand for instruction
1934 // CHECK-ERROR:         sqshrn v0.4h, v1.4h, #3
1935 // CHECK-ERROR:                          ^
1936 // CHECK-ERROR: error: invalid operand for instruction
1937 // CHECK-ERROR:         sqshrn v0.2s, v1.2s, #3
1938 // CHECK-ERROR:                          ^
1939 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1940 // CHECK-ERROR:         sqshrn2 v0.16b, v1.8h, #17
1941 // CHECK-ERROR:                                ^
1942 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1943 // CHECK-ERROR:         sqshrn2 v0.8h, v1.4s, #33
1944 // CHECK-ERROR:                               ^
1945 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1946 // CHECK-ERROR:         sqshrn2 v0.4s, v1.2d, #65
1947 // CHECK-ERROR:                               ^
1948
1949 //------------------------------------------------------------------------------
1950 // Vector saturating shift right narrow by immediate
1951 //------------------------------------------------------------------------------
1952          uqshrn v0.8b, v1.8b, #3
1953          uqshrn v0.4h, v1.4h, #3
1954          uqshrn v0.2s, v1.2s, #3
1955          uqshrn2 v0.16b, v1.8h, #17
1956          uqshrn2 v0.8h, v1.4s, #33
1957          uqshrn2 v0.4s, v1.2d, #65
1958
1959 // CHECK-ERROR: error: invalid operand for instruction
1960 // CHECK-ERROR:         uqshrn v0.8b, v1.8b, #3
1961 // CHECK-ERROR:                          ^
1962 // CHECK-ERROR: error: invalid operand for instruction
1963 // CHECK-ERROR:         uqshrn v0.4h, v1.4h, #3
1964 // CHECK-ERROR:                          ^
1965 // CHECK-ERROR: error: invalid operand for instruction
1966 // CHECK-ERROR:         uqshrn v0.2s, v1.2s, #3
1967 // CHECK-ERROR:                          ^
1968 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1969 // CHECK-ERROR:         uqshrn2 v0.16b, v1.8h, #17
1970 // CHECK-ERROR:                                ^
1971 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
1972 // CHECK-ERROR:         uqshrn2 v0.8h, v1.4s, #33
1973 // CHECK-ERROR:                               ^
1974 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
1975 // CHECK-ERROR:         uqshrn2 v0.4s, v1.2d, #65
1976 // CHECK-ERROR:                               ^
1977
1978 //------------------------------------------------------------------------------
1979 // Vector saturating shift right rounded narrow by immediate
1980 //------------------------------------------------------------------------------
1981          sqrshrn v0.8b, v1.8b, #3
1982          sqrshrn v0.4h, v1.4h, #3
1983          sqrshrn v0.2s, v1.2s, #3
1984          sqrshrn2 v0.16b, v1.8h, #17
1985          sqrshrn2 v0.8h, v1.4s, #33
1986          sqrshrn2 v0.4s, v1.2d, #65
1987
1988 // CHECK-ERROR: error: invalid operand for instruction
1989 // CHECK-ERROR:         sqrshrn v0.8b, v1.8b, #3
1990 // CHECK-ERROR:                           ^
1991 // CHECK-ERROR: error: invalid operand for instruction
1992 // CHECK-ERROR:         sqrshrn v0.4h, v1.4h, #3
1993 // CHECK-ERROR:                           ^
1994 // CHECK-ERROR: error: invalid operand for instruction
1995 // CHECK-ERROR:         sqrshrn v0.2s, v1.2s, #3
1996 // CHECK-ERROR:                           ^
1997 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
1998 // CHECK-ERROR:         sqrshrn2 v0.16b, v1.8h, #17
1999 // CHECK-ERROR:                                 ^
2000 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
2001 // CHECK-ERROR:         sqrshrn2 v0.8h, v1.4s, #33
2002 // CHECK-ERROR:                                ^
2003 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2004 // CHECK-ERROR:         sqrshrn2 v0.4s, v1.2d, #65
2005 // CHECK-ERROR:                                ^
2006
2007 //------------------------------------------------------------------------------
2008 // Vector saturating shift right rounded narrow by immediate
2009 //------------------------------------------------------------------------------
2010          uqrshrn v0.8b, v1.8b, #3
2011          uqrshrn v0.4h, v1.4h, #3
2012          uqrshrn v0.2s, v1.2s, #3
2013          uqrshrn2 v0.16b, v1.8h, #17
2014          uqrshrn2 v0.8h, v1.4s, #33
2015          uqrshrn2 v0.4s, v1.2d, #65
2016
2017 // CHECK-ERROR: error: invalid operand for instruction
2018 // CHECK-ERROR:         uqrshrn v0.8b, v1.8b, #3
2019 // CHECK-ERROR:                           ^
2020 // CHECK-ERROR: error: invalid operand for instruction
2021 // CHECK-ERROR:         uqrshrn v0.4h, v1.4h, #3
2022 // CHECK-ERROR:                           ^
2023 // CHECK-ERROR: error: invalid operand for instruction
2024 // CHECK-ERROR:         uqrshrn v0.2s, v1.2s, #3
2025 // CHECK-ERROR:                           ^
2026 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
2027 // CHECK-ERROR:         uqrshrn2 v0.16b, v1.8h, #17
2028 // CHECK-ERROR:                                 ^
2029 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
2030 // CHECK-ERROR:         uqrshrn2 v0.8h, v1.4s, #33
2031 // CHECK-ERROR:                                ^
2032 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2033 // CHECK-ERROR:         uqrshrn2 v0.4s, v1.2d, #65
2034 // CHECK-ERROR:                                ^
2035
2036 //------------------------------------------------------------------------------
2037 // Fixed-point convert to floating-point
2038 //------------------------------------------------------------------------------
2039          scvtf v0.2s, v1.2d, #3
2040          scvtf v0.4s, v1.4h, #3
2041          scvtf v0.2d, v1.2s, #3
2042          ucvtf v0.2s, v1.2s, #33
2043          ucvtf v0.4s, v1.4s, #33
2044          ucvtf v0.2d, v1.2d, #65
2045
2046 // CHECK-ERROR: error: invalid operand for instruction
2047 // CHECK-ERROR:         scvtf v0.2s, v1.2d, #3
2048 // CHECK-ERROR:                         ^
2049 // CHECK-ERROR: error: invalid operand for instruction
2050 // CHECK-ERROR:         scvtf v0.4s, v1.4h, #3
2051 // CHECK-ERROR:                         ^
2052 // CHECK-ERROR: error: invalid operand for instruction
2053 // CHECK-ERROR:         scvtf v0.2d, v1.2s, #3
2054 // CHECK-ERROR:                         ^
2055 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2056 // CHECK-ERROR:         ucvtf v0.2s, v1.2s, #33
2057 // CHECK-ERROR:                             ^
2058 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2059 // CHECK-ERROR:         ucvtf v0.4s, v1.4s, #33
2060 // CHECK-ERROR:                             ^
2061 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
2062 // CHECK-ERROR:         ucvtf v0.2d, v1.2d, #65
2063 // CHECK-ERROR:                             ^
2064
2065 //------------------------------------------------------------------------------
2066 // Floating-point convert to fixed-point
2067 //------------------------------------------------------------------------------
2068          fcvtzs v0.2s, v1.2d, #3
2069          fcvtzs v0.4s, v1.4h, #3
2070          fcvtzs v0.2d, v1.2s, #3
2071          fcvtzu v0.2s, v1.2s, #33
2072          fcvtzu v0.4s, v1.4s, #33
2073          fcvtzu v0.2d, v1.2d, #65
2074
2075 // CHECK-ERROR: error: invalid operand for instruction
2076 // CHECK-ERROR:         fcvtzs v0.2s, v1.2d, #3
2077 // CHECK-ERROR:                          ^
2078 // CHECK-ERROR: error: invalid operand for instruction
2079 // CHECK-ERROR:         fcvtzs v0.4s, v1.4h, #3
2080 // CHECK-ERROR:                          ^
2081 // CHECK-ERROR: error: invalid operand for instruction
2082 // CHECK-ERROR:         fcvtzs v0.2d, v1.2s, #3
2083 // CHECK-ERROR:                          ^
2084 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2085 // CHECK-ERROR:         fcvtzu v0.2s, v1.2s, #33
2086 // CHECK-ERROR:                              ^
2087 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
2088 // CHECK-ERROR:         fcvtzu v0.4s, v1.4s, #33
2089 // CHECK-ERROR:                              ^
2090 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
2091 // CHECK-ERROR:         fcvtzu v0.2d, v1.2d, #65
2092 // CHECK-ERROR:                              ^
2093
2094 //----------------------------------------------------------------------
2095 // Vector operation on 3 operands with different types
2096 //----------------------------------------------------------------------
2097
2098         // Mismatched and invalid vector types
2099         saddl v0.8h, v1.8h, v2.8b
2100         saddl v0.4s, v1.4s, v2.4h
2101         saddl v0.2d, v1.2d, v2.2s
2102
2103 // CHECK-ERROR: error: invalid operand for instruction
2104 // CHECK-ERROR:        saddl v0.8h, v1.8h, v2.8b
2105 // CHECK-ERROR:                        ^
2106 // CHECK-ERROR: error: invalid operand for instruction
2107 // CHECK-ERROR:        saddl v0.4s, v1.4s, v2.4h
2108 // CHECK-ERROR:                        ^
2109 // CHECK-ERROR: error: invalid operand for instruction
2110 // CHECK-ERROR:        saddl v0.2d, v1.2d, v2.2s
2111 // CHECK-ERROR:                        ^
2112
2113         saddl2 v0.4s, v1.8s, v2.8h
2114         saddl2 v0.8h, v1.16h, v2.16b
2115         saddl2 v0.2d, v1.4d, v2.4s
2116
2117 // CHECK-ERROR: error: invalid operand for instruction
2118 // CHECK-ERROR:        saddl2 v0.4s, v1.8s, v2.8h
2119 // CHECK-ERROR:                      ^
2120 // CHECK-ERROR: error: invalid operand for instruction
2121 // CHECK-ERROR:        saddl2 v0.8h, v1.16h, v2.16b
2122 // CHECK-ERROR:                      ^
2123 // CHECK-ERROR: error: invalid operand for instruction
2124 // CHECK-ERROR:        saddl2 v0.2d, v1.4d, v2.4s
2125 // CHECK-ERROR:                      ^
2126
2127         uaddl v0.8h, v1.8h, v2.8b
2128         uaddl v0.4s, v1.4s, v2.4h
2129         uaddl v0.2d, v1.2d, v2.2s
2130
2131 // CHECK-ERROR: error: invalid operand for instruction
2132 // CHECK-ERROR:        uaddl v0.8h, v1.8h, v2.8b
2133 // CHECK-ERROR:                        ^
2134 // CHECK-ERROR: error: invalid operand for instruction
2135 // CHECK-ERROR:        uaddl v0.4s, v1.4s, v2.4h
2136 // CHECK-ERROR:                        ^
2137 // CHECK-ERROR: error: invalid operand for instruction
2138 // CHECK-ERROR:        uaddl v0.2d, v1.2d, v2.2s
2139 // CHECK-ERROR:                        ^
2140
2141         uaddl2 v0.8h, v1.16h, v2.16b
2142         uaddl2 v0.4s, v1.8s, v2.8h
2143         uaddl2 v0.2d, v1.4d, v2.4s
2144
2145 // CHECK-ERROR: error: invalid operand for instruction
2146 // CHECK-ERROR:        uaddl2 v0.8h, v1.16h, v2.16b
2147 // CHECK-ERROR:                      ^
2148 // CHECK-ERROR: error: invalid operand for instruction
2149 // CHECK-ERROR:        uaddl2 v0.4s, v1.8s, v2.8h
2150 // CHECK-ERROR:                      ^
2151 // CHECK-ERROR: error: invalid operand for instruction
2152 // CHECK-ERROR:        uaddl2 v0.2d, v1.4d, v2.4s
2153 // CHECK-ERROR:                      ^
2154
2155         ssubl v0.8h, v1.8h, v2.8b
2156         ssubl v0.4s, v1.4s, v2.4h
2157         ssubl v0.2d, v1.2d, v2.2s
2158
2159 // CHECK-ERROR: error: invalid operand for instruction
2160 // CHECK-ERROR:        ssubl v0.8h, v1.8h, v2.8b
2161 // CHECK-ERROR:                        ^
2162 // CHECK-ERROR: error: invalid operand for instruction
2163 // CHECK-ERROR:        ssubl v0.4s, v1.4s, v2.4h
2164 // CHECK-ERROR:                        ^
2165 // CHECK-ERROR: error: invalid operand for instruction
2166 // CHECK-ERROR:        ssubl v0.2d, v1.2d, v2.2s
2167 // CHECK-ERROR:                        ^
2168
2169         ssubl2 v0.8h, v1.16h, v2.16b
2170         ssubl2 v0.4s, v1.8s, v2.8h
2171         ssubl2 v0.2d, v1.4d, v2.4s
2172
2173 // CHECK-ERROR: error: invalid operand for instruction
2174 // CHECK-ERROR:        ssubl2 v0.8h, v1.16h, v2.16b
2175 // CHECK-ERROR:                      ^
2176 // CHECK-ERROR: error: invalid operand for instruction
2177 // CHECK-ERROR:        ssubl2 v0.4s, v1.8s, v2.8h
2178 // CHECK-ERROR:                      ^
2179 // CHECK-ERROR: error: invalid operand for instruction
2180 // CHECK-ERROR:        ssubl2 v0.2d, v1.4d, v2.4s
2181 // CHECK-ERROR:                      ^
2182
2183         usubl v0.8h, v1.8h, v2.8b
2184         usubl v0.4s, v1.4s, v2.4h
2185         usubl v0.2d, v1.2d, v2.2s
2186
2187 // CHECK-ERROR: error: invalid operand for instruction
2188 // CHECK-ERROR:        usubl v0.8h, v1.8h, v2.8b
2189 // CHECK-ERROR:                        ^
2190 // CHECK-ERROR: error: invalid operand for instruction
2191 // CHECK-ERROR:        usubl v0.4s, v1.4s, v2.4h
2192 // CHECK-ERROR:                        ^
2193 // CHECK-ERROR: error: invalid operand for instruction
2194 // CHECK-ERROR:        usubl v0.2d, v1.2d, v2.2s
2195 // CHECK-ERROR:                        ^
2196
2197         usubl2 v0.8h, v1.16h, v2.16b
2198         usubl2 v0.4s, v1.8s, v2.8h
2199         usubl2 v0.2d, v1.4d, v2.4s
2200
2201 // CHECK-ERROR: error: invalid operand for instruction
2202 // CHECK-ERROR:        usubl2 v0.8h, v1.16h, v2.16b
2203 // CHECK-ERROR:                      ^
2204 // CHECK-ERROR: error: invalid operand for instruction
2205 // CHECK-ERROR:        usubl2 v0.4s, v1.8s, v2.8h
2206 // CHECK-ERROR:                      ^
2207 // CHECK-ERROR: error: invalid operand for instruction
2208 // CHECK-ERROR:        usubl2 v0.2d, v1.4d, v2.4s
2209 // CHECK-ERROR:                      ^
2210
2211         sabal v0.8h, v1.8h, v2.8b
2212         sabal v0.4s, v1.4s, v2.4h
2213         sabal v0.2d, v1.2d, v2.2s
2214
2215 // CHECK-ERROR: error: invalid operand for instruction
2216 // CHECK-ERROR:        sabal v0.8h, v1.8h, v2.8b
2217 // CHECK-ERROR:                        ^
2218 // CHECK-ERROR: error: invalid operand for instruction
2219 // CHECK-ERROR:        sabal v0.4s, v1.4s, v2.4h
2220 // CHECK-ERROR:                        ^
2221 // CHECK-ERROR: error: invalid operand for instruction
2222 // CHECK-ERROR:        sabal v0.2d, v1.2d, v2.2s
2223 // CHECK-ERROR:                        ^
2224
2225         sabal2 v0.8h, v1.16h, v2.16b
2226         sabal2 v0.4s, v1.8s, v2.8h
2227         sabal2 v0.2d, v1.4d, v2.4s
2228
2229 // CHECK-ERROR: error: invalid operand for instruction
2230 // CHECK-ERROR:        sabal2 v0.8h, v1.16h, v2.16b
2231 // CHECK-ERROR:                      ^
2232 // CHECK-ERROR: error: invalid operand for instruction
2233 // CHECK-ERROR:        sabal2 v0.4s, v1.8s, v2.8h
2234 // CHECK-ERROR:                      ^
2235 // CHECK-ERROR: error: invalid operand for instruction
2236 // CHECK-ERROR:        sabal2 v0.2d, v1.4d, v2.4s
2237 // CHECK-ERROR:                      ^
2238
2239         uabal v0.8h, v1.8h, v2.8b
2240         uabal v0.4s, v1.4s, v2.4h
2241         uabal v0.2d, v1.2d, v2.2s
2242
2243 // CHECK-ERROR: error: invalid operand for instruction
2244 // CHECK-ERROR:        uabal v0.8h, v1.8h, v2.8b
2245 // CHECK-ERROR:                        ^
2246 // CHECK-ERROR: error: invalid operand for instruction
2247 // CHECK-ERROR:        uabal v0.4s, v1.4s, v2.4h
2248 // CHECK-ERROR:                        ^
2249 // CHECK-ERROR: error: invalid operand for instruction
2250 // CHECK-ERROR:        uabal v0.2d, v1.2d, v2.2s
2251 // CHECK-ERROR:                        ^
2252
2253         uabal2 v0.8h, v1.16h, v2.16b
2254         uabal2 v0.4s, v1.8s, v2.8h
2255         uabal2 v0.2d, v1.4d, v2.4s
2256
2257 // CHECK-ERROR: error: invalid operand for instruction
2258 // CHECK-ERROR:        uabal2 v0.8h, v1.16h, v2.16b
2259 // CHECK-ERROR:                      ^
2260 // CHECK-ERROR: error: invalid operand for instruction
2261 // CHECK-ERROR:        uabal2 v0.4s, v1.8s, v2.8h
2262 // CHECK-ERROR:                      ^
2263 // CHECK-ERROR: error: invalid operand for instruction
2264 // CHECK-ERROR:        uabal2 v0.2d, v1.4d, v2.4s
2265 // CHECK-ERROR:                      ^
2266
2267         sabdl v0.8h, v1.8h, v2.8b
2268         sabdl v0.4s, v1.4s, v2.4h
2269         sabdl v0.2d, v1.2d, v2.2s
2270
2271 // CHECK-ERROR: error: invalid operand for instruction
2272 // CHECK-ERROR:        sabdl v0.8h, v1.8h, v2.8b
2273 // CHECK-ERROR:                        ^
2274 // CHECK-ERROR: error: invalid operand for instruction
2275 // CHECK-ERROR:        sabdl v0.4s, v1.4s, v2.4h
2276 // CHECK-ERROR:                        ^
2277 // CHECK-ERROR: error: invalid operand for instruction
2278 // CHECK-ERROR:        sabdl v0.2d, v1.2d, v2.2s
2279 // CHECK-ERROR:                        ^
2280
2281         sabdl2 v0.8h, v1.16h, v2.16b
2282         sabdl2 v0.4s, v1.8s, v2.8h
2283         sabdl2 v0.2d, v1.4d, v2.4s
2284
2285 // CHECK-ERROR: error: invalid operand for instruction
2286 // CHECK-ERROR:        sabdl2 v0.8h, v1.16h, v2.16b
2287 // CHECK-ERROR:                      ^
2288 // CHECK-ERROR: error: invalid operand for instruction
2289 // CHECK-ERROR:        sabdl2 v0.4s, v1.8s, v2.8h
2290 // CHECK-ERROR:                      ^
2291 // CHECK-ERROR: error: invalid operand for instruction
2292 // CHECK-ERROR:        sabdl2 v0.2d, v1.4d, v2.4s
2293 // CHECK-ERROR:                      ^
2294
2295         uabdl v0.8h, v1.8h, v2.8b
2296         uabdl v0.4s, v1.4s, v2.4h
2297         uabdl v0.2d, v1.2d, v2.2s
2298
2299 // CHECK-ERROR: error: invalid operand for instruction
2300 // CHECK-ERROR:        uabdl v0.8h, v1.8h, v2.8b
2301 // CHECK-ERROR:                        ^
2302 // CHECK-ERROR: error: invalid operand for instruction
2303 // CHECK-ERROR:        uabdl v0.4s, v1.4s, v2.4h
2304 // CHECK-ERROR:                        ^
2305 // CHECK-ERROR: error: invalid operand for instruction
2306 // CHECK-ERROR:        uabdl v0.2d, v1.2d, v2.2s
2307 // CHECK-ERROR:                        ^
2308
2309         uabdl2 v0.8h, v1.16h, v2.16b
2310         uabdl2 v0.4s, v1.8s, v2.8h
2311         uabdl2 v0.2d, v1.4d, v2.4s
2312
2313 // CHECK-ERROR: error: invalid operand for instruction
2314 // CHECK-ERROR:        uabdl2 v0.8h, v1.16h, v2.16b
2315 // CHECK-ERROR:                      ^
2316 // CHECK-ERROR: error: invalid operand for instruction
2317 // CHECK-ERROR:        uabdl2 v0.4s, v1.8s, v2.8h
2318 // CHECK-ERROR:                      ^
2319 // CHECK-ERROR: error: invalid operand for instruction
2320 // CHECK-ERROR:        uabdl2 v0.2d, v1.4d, v2.4s
2321 // CHECK-ERROR:                      ^
2322
2323         smlal v0.8h, v1.8h, v2.8b
2324         smlal v0.4s, v1.4s, v2.4h
2325         smlal v0.2d, v1.2d, v2.2s
2326
2327 // CHECK-ERROR: error: invalid operand for instruction
2328 // CHECK-ERROR:        smlal v0.8h, v1.8h, v2.8b
2329 // CHECK-ERROR:                        ^
2330 // CHECK-ERROR: error: invalid operand for instruction
2331 // CHECK-ERROR:        smlal v0.4s, v1.4s, v2.4h
2332 // CHECK-ERROR:                        ^
2333 // CHECK-ERROR: error: invalid operand for instruction
2334 // CHECK-ERROR:        smlal v0.2d, v1.2d, v2.2s
2335 // CHECK-ERROR:                        ^
2336
2337         smlal2 v0.8h, v1.16h, v2.16b
2338         smlal2 v0.4s, v1.8s, v2.8h
2339         smlal2 v0.2d, v1.4d, v2.4s
2340
2341 // CHECK-ERROR: error: invalid operand for instruction
2342 // CHECK-ERROR:        smlal2 v0.8h, v1.16h, v2.16b
2343 // CHECK-ERROR:                      ^
2344 // CHECK-ERROR: error: invalid operand for instruction
2345 // CHECK-ERROR:        smlal2 v0.4s, v1.8s, v2.8h
2346 // CHECK-ERROR:                      ^
2347 // CHECK-ERROR: error: invalid operand for instruction
2348 // CHECK-ERROR:        smlal2 v0.2d, v1.4d, v2.4s
2349 // CHECK-ERROR:                      ^
2350
2351         umlal v0.8h, v1.8h, v2.8b
2352         umlal v0.4s, v1.4s, v2.4h
2353         umlal v0.2d, v1.2d, v2.2s
2354
2355 // CHECK-ERROR: error: invalid operand for instruction
2356 // CHECK-ERROR:        umlal v0.8h, v1.8h, v2.8b
2357 // CHECK-ERROR:                        ^
2358 // CHECK-ERROR: error: invalid operand for instruction
2359 // CHECK-ERROR:        umlal v0.4s, v1.4s, v2.4h
2360 // CHECK-ERROR:                        ^
2361 // CHECK-ERROR: error: invalid operand for instruction
2362 // CHECK-ERROR:        umlal v0.2d, v1.2d, v2.2s
2363 // CHECK-ERROR:                        ^
2364
2365         umlal2 v0.8h, v1.16h, v2.16b
2366         umlal2 v0.4s, v1.8s, v2.8h
2367         umlal2 v0.2d, v1.4d, v2.4s
2368
2369 // CHECK-ERROR: error: invalid operand for instruction
2370 // CHECK-ERROR:        umlal2 v0.8h, v1.16h, v2.16b
2371 // CHECK-ERROR:                      ^
2372 // CHECK-ERROR: error: invalid operand for instruction
2373 // CHECK-ERROR:        umlal2 v0.4s, v1.8s, v2.8h
2374 // CHECK-ERROR:                      ^
2375 // CHECK-ERROR: error: invalid operand for instruction
2376 // CHECK-ERROR:        umlal2 v0.2d, v1.4d, v2.4s
2377 // CHECK-ERROR:                      ^
2378
2379         smlsl v0.8h, v1.8h, v2.8b
2380         smlsl v0.4s, v1.4s, v2.4h
2381         smlsl v0.2d, v1.2d, v2.2s
2382
2383 // CHECK-ERROR: error: invalid operand for instruction
2384 // CHECK-ERROR:        smlsl v0.8h, v1.8h, v2.8b
2385 // CHECK-ERROR:                        ^
2386 // CHECK-ERROR: error: invalid operand for instruction
2387 // CHECK-ERROR:        smlsl v0.4s, v1.4s, v2.4h
2388 // CHECK-ERROR:                        ^
2389 // CHECK-ERROR: error: invalid operand for instruction
2390 // CHECK-ERROR:        smlsl v0.2d, v1.2d, v2.2s
2391 // CHECK-ERROR:                        ^
2392
2393         smlsl2 v0.8h, v1.16h, v2.16b
2394         smlsl2 v0.4s, v1.8s, v2.8h
2395         smlsl2 v0.2d, v1.4d, v2.4s
2396
2397 // CHECK-ERROR: error: invalid operand for instruction
2398 // CHECK-ERROR:        smlsl2 v0.8h, v1.16h, v2.16b
2399 // CHECK-ERROR:                      ^
2400 // CHECK-ERROR: error: invalid operand for instruction
2401 // CHECK-ERROR:        smlsl2 v0.4s, v1.8s, v2.8h
2402 // CHECK-ERROR:                      ^
2403 // CHECK-ERROR: error: invalid operand for instruction
2404 // CHECK-ERROR:        smlsl2 v0.2d, v1.4d, v2.4s
2405 // CHECK-ERROR:                      ^
2406
2407         umlsl v0.8h, v1.8h, v2.8b
2408         umlsl v0.4s, v1.4s, v2.4h
2409         umlsl v0.2d, v1.2d, v2.2s
2410
2411 // CHECK-ERROR: error: invalid operand for instruction
2412 // CHECK-ERROR:        umlsl v0.8h, v1.8h, v2.8b
2413 // CHECK-ERROR:                        ^
2414 // CHECK-ERROR: error: invalid operand for instruction
2415 // CHECK-ERROR:        umlsl v0.4s, v1.4s, v2.4h
2416 // CHECK-ERROR:                        ^
2417 // CHECK-ERROR: error: invalid operand for instruction
2418 // CHECK-ERROR:        umlsl v0.2d, v1.2d, v2.2s
2419 // CHECK-ERROR:                        ^
2420
2421         umlsl2 v0.8h, v1.16h, v2.16b
2422         umlsl2 v0.4s, v1.8s, v2.8h
2423         umlsl2 v0.2d, v1.4d, v2.4s
2424
2425 // CHECK-ERROR: error: invalid operand for instruction
2426 // CHECK-ERROR:        umlsl2 v0.8h, v1.16h, v2.16b
2427 // CHECK-ERROR:                      ^
2428 // CHECK-ERROR: error: invalid operand for instruction
2429 // CHECK-ERROR:        umlsl2 v0.4s, v1.8s, v2.8h
2430 // CHECK-ERROR:                      ^
2431 // CHECK-ERROR: error: invalid operand for instruction
2432 // CHECK-ERROR:        umlsl2 v0.2d, v1.4d, v2.4s
2433 // CHECK-ERROR:                      ^
2434
2435         smull v0.8h, v1.8h, v2.8b
2436         smull v0.4s, v1.4s, v2.4h
2437         smull v0.2d, v1.2d, v2.2s
2438
2439 // CHECK-ERROR: error: invalid operand for instruction
2440 // CHECK-ERROR:        smull v0.8h, v1.8h, v2.8b
2441 // CHECK-ERROR:                        ^
2442 // CHECK-ERROR: error: invalid operand for instruction
2443 // CHECK-ERROR:        smull v0.4s, v1.4s, v2.4h
2444 // CHECK-ERROR:                        ^
2445 // CHECK-ERROR: error: invalid operand for instruction
2446 // CHECK-ERROR:        smull v0.2d, v1.2d, v2.2s
2447 // CHECK-ERROR:                        ^
2448
2449         smull2 v0.8h, v1.16h, v2.16b
2450         smull2 v0.4s, v1.8s, v2.8h
2451         smull2 v0.2d, v1.4d, v2.4s
2452
2453 // CHECK-ERROR: error: invalid operand for instruction
2454 // CHECK-ERROR:        smull2 v0.8h, v1.16h, v2.16b
2455 // CHECK-ERROR:                      ^
2456 // CHECK-ERROR: error: invalid operand for instruction
2457 // CHECK-ERROR:        smull2 v0.4s, v1.8s, v2.8h
2458 // CHECK-ERROR:                      ^
2459 // CHECK-ERROR: error: invalid operand for instruction
2460 // CHECK-ERROR:        smull2 v0.2d, v1.4d, v2.4s
2461 // CHECK-ERROR:                      ^
2462
2463         umull v0.8h, v1.8h, v2.8b
2464         umull v0.4s, v1.4s, v2.4h
2465         umull v0.2d, v1.2d, v2.2s
2466
2467 // CHECK-ERROR: error: invalid operand for instruction
2468 // CHECK-ERROR:        umull v0.8h, v1.8h, v2.8b
2469 // CHECK-ERROR:                        ^
2470 // CHECK-ERROR: error: invalid operand for instruction
2471 // CHECK-ERROR:        umull v0.4s, v1.4s, v2.4h
2472 // CHECK-ERROR:                        ^
2473 // CHECK-ERROR: error: invalid operand for instruction
2474 // CHECK-ERROR:        umull v0.2d, v1.2d, v2.2s
2475 // CHECK-ERROR:                        ^
2476
2477         umull2 v0.8h, v1.16h, v2.16b
2478         umull2 v0.4s, v1.8s, v2.8h
2479         umull2 v0.2d, v1.4d, v2.4s
2480
2481 // CHECK-ERROR: error: invalid operand for instruction
2482 // CHECK-ERROR:        umull2 v0.8h, v1.16h, v2.16b
2483 // CHECK-ERROR:                      ^
2484 // CHECK-ERROR: error: invalid operand for instruction
2485 // CHECK-ERROR:        umull2 v0.4s, v1.8s, v2.8h
2486 // CHECK-ERROR:                      ^
2487 // CHECK-ERROR: error: invalid operand for instruction
2488 // CHECK-ERROR:        umull2 v0.2d, v1.4d, v2.4s
2489 // CHECK-ERROR:                      ^
2490
2491 //------------------------------------------------------------------------------
2492 // Long - Variant 2
2493 //------------------------------------------------------------------------------
2494
2495         sqdmlal v0.4s, v1.4s, v2.4h
2496         sqdmlal v0.2d, v1.2d, v2.2s
2497
2498 // CHECK-ERROR: error: invalid operand for instruction
2499 // CHECK-ERROR:        sqdmlal v0.4s, v1.4s, v2.4h
2500 // CHECK-ERROR:                          ^
2501 // CHECK-ERROR: error: invalid operand for instruction
2502 // CHECK-ERROR:        sqdmlal v0.2d, v1.2d, v2.2s
2503 // CHECK-ERROR:                          ^
2504
2505         sqdmlal2 v0.4s, v1.8s, v2.8h
2506         sqdmlal2 v0.2d, v1.4d, v2.4s
2507
2508 // CHECK-ERROR: error: invalid operand for instruction
2509 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8s, v2.8h
2510 // CHECK-ERROR:                        ^
2511 // CHECK-ERROR: error: invalid operand for instruction
2512 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4d, v2.4s
2513 // CHECK-ERROR:                        ^
2514
2515         // Mismatched vector types
2516         sqdmlal v0.8h, v1.8b, v2.8b
2517         sqdmlal2 v0.8h, v1.16b, v2.16b
2518
2519 // CHECK-ERROR: error: invalid operand for instruction
2520 // CHECK-ERROR:        sqdmlal v0.8h, v1.8b, v2.8b
2521 // CHECK-ERROR:                   ^
2522 // CHECK-ERROR: error: invalid operand for instruction
2523 // CHECK-ERROR:        sqdmlal2 v0.8h, v1.16b, v2.16b
2524 // CHECK-ERROR:                    ^
2525
2526         sqdmlsl v0.4s, v1.4s, v2.4h
2527         sqdmlsl v0.2d, v1.2d, v2.2s
2528
2529 // CHECK-ERROR: error: invalid operand for instruction
2530 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4s, v2.4h
2531 // CHECK-ERROR:                          ^
2532 // CHECK-ERROR: error: invalid operand for instruction
2533 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2d, v2.2s
2534 // CHECK-ERROR:                          ^
2535
2536         sqdmlsl2 v0.4s, v1.8s, v2.8h
2537         sqdmlsl2 v0.2d, v1.4d, v2.4s
2538
2539 // CHECK-ERROR: error: invalid operand for instruction
2540 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8s, v2.8h
2541 // CHECK-ERROR:                        ^
2542 // CHECK-ERROR: error: invalid operand for instruction
2543 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4d, v2.4s
2544 // CHECK-ERROR:                        ^
2545
2546         // Mismatched vector types
2547         sqdmlsl v0.8h, v1.8b, v2.8b
2548         sqdmlsl2 v0.8h, v1.16b, v2.16b
2549
2550 // CHECK-ERROR: error: invalid operand for instruction
2551 // CHECK-ERROR:        sqdmlsl v0.8h, v1.8b, v2.8b
2552 // CHECK-ERROR:                   ^
2553 // CHECK-ERROR: error: invalid operand for instruction
2554 // CHECK-ERROR:        sqdmlsl2 v0.8h, v1.16b, v2.16b
2555 // CHECK-ERROR:                    ^
2556
2557
2558         sqdmull v0.4s, v1.4s, v2.4h
2559         sqdmull v0.2d, v1.2d, v2.2s
2560
2561 // CHECK-ERROR: error: invalid operand for instruction
2562 // CHECK-ERROR:        sqdmull v0.4s, v1.4s, v2.4h
2563 // CHECK-ERROR:                          ^
2564 // CHECK-ERROR: error: invalid operand for instruction
2565 // CHECK-ERROR:        sqdmull v0.2d, v1.2d, v2.2s
2566 // CHECK-ERROR:                          ^
2567
2568         sqdmull2 v0.4s, v1.8s, v2.8h
2569         sqdmull2 v0.2d, v1.4d, v2.4s
2570
2571 // CHECK-ERROR: error: invalid operand for instruction
2572 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8s, v2.8h
2573 // CHECK-ERROR:                        ^
2574 // CHECK-ERROR: error: invalid operand for instruction
2575 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4d, v2.4s
2576 // CHECK-ERROR:                        ^
2577
2578         // Mismatched vector types
2579         sqdmull v0.8h, v1.8b, v2.8b
2580         sqdmull2 v0.8h, v1.16b, v2.16b
2581
2582 // CHECK-ERROR: error: invalid operand for instruction
2583 // CHECK-ERROR:        sqdmull v0.8h, v1.8b, v2.8b
2584 // CHECK-ERROR:                   ^
2585 // CHECK-ERROR: error: invalid operand for instruction
2586 // CHECK-ERROR:        sqdmull2 v0.8h, v1.16b, v2.16b
2587 // CHECK-ERROR:                    ^
2588
2589
2590 //------------------------------------------------------------------------------
2591 // Long - Variant 3
2592 //------------------------------------------------------------------------------
2593
2594         pmull v0.8h, v1.8h, v2.8b
2595
2596 // CHECK-ERROR: error: invalid operand for instruction
2597 // CHECK-ERROR:        pmull v0.8h, v1.8h, v2.8b
2598 // CHECK-ERROR:                        ^
2599
2600         pmull v0.1q, v1.2d, v2.2d
2601         
2602 // CHECK-ERROR: error: invalid operand for instruction
2603 // CHECK-ERROR:        pmull v0.1q, v1.2d, v2.2d
2604 // CHECK-ERROR:                     ^
2605
2606         // Mismatched vector types
2607         pmull v0.4s, v1.4h, v2.4h
2608         pmull v0.2d, v1.2s, v2.2s
2609
2610 // CHECK-ERROR: error: invalid operand for instruction
2611 // CHECK-ERROR:        pmull v0.4s, v1.4h, v2.4h
2612 // CHECK-ERROR:                 ^
2613 // CHECK-ERROR: error: invalid operand for instruction
2614 // CHECK-ERROR:        pmull v0.2d, v1.2s, v2.2s
2615 // CHECK-ERROR:                 ^
2616
2617
2618         pmull2 v0.8h, v1.16h, v2.16b
2619
2620 // CHECK-ERROR: error: invalid operand for instruction
2621 // CHECK-ERROR:        pmull2 v0.8h, v1.16h, v2.16b
2622 // CHECK-ERROR:                      ^
2623
2624         pmull2 v0.q, v1.2d, v2.2d
2625         
2626 // CHECK-ERROR: error: invalid operand for instruction
2627 // CHECK-ERROR:        pmull2 v0.q, v1.2d, v2.2d
2628 // CHECK-ERROR:                  ^
2629
2630         // Mismatched vector types
2631         pmull2 v0.4s, v1.8h v2.8h
2632         pmull2 v0.2d, v1.4s, v2.4s
2633
2634
2635 // CHECK-ERROR: error: unexpected token in argument list
2636 // CHECK-ERROR:        pmull2 v0.4s, v1.8h v2.8h
2637 // CHECK-ERROR:                            ^
2638
2639 // CHECK-ERROR: error: invalid operand for instruction
2640 // CHECK-ERROR:        pmull2 v0.2d, v1.4s, v2.4s
2641 // CHECK-ERROR:                  ^
2642
2643 //------------------------------------------------------------------------------
2644 // Widen
2645 //------------------------------------------------------------------------------
2646
2647         saddw v0.8h, v1.8h, v2.8h
2648         saddw v0.4s, v1.4s, v2.4s
2649         saddw v0.2d, v1.2d, v2.2d
2650
2651 // CHECK-ERROR: error: invalid operand for instruction
2652 // CHECK-ERROR:        saddw v0.8h, v1.8h, v2.8h
2653 // CHECK-ERROR:                               ^
2654 // CHECK-ERROR: error: invalid operand for instruction
2655 // CHECK-ERROR:        saddw v0.4s, v1.4s, v2.4s
2656 // CHECK-ERROR:                               ^
2657 // CHECK-ERROR: error: invalid operand for instruction
2658 // CHECK-ERROR:        saddw v0.2d, v1.2d, v2.2d
2659 // CHECK-ERROR:                               ^
2660
2661         saddw2 v0.8h, v1.8h, v2.16h
2662         saddw2 v0.4s, v1.4s, v2.8s
2663         saddw2 v0.2d, v1.2d, v2.4d
2664
2665 // CHECK-ERROR: error: invalid operand for instruction
2666 // CHECK-ERROR:        saddw2 v0.8h, v1.8h, v2.16h
2667 // CHECK-ERROR:                             ^
2668 // CHECK-ERROR: error: invalid operand for instruction
2669 // CHECK-ERROR:        saddw2 v0.4s, v1.4s, v2.8s
2670 // CHECK-ERROR:                             ^
2671 // CHECK-ERROR: error: invalid operand for instruction
2672 // CHECK-ERROR:        saddw2 v0.2d, v1.2d, v2.4d
2673 // CHECK-ERROR:                             ^
2674
2675         uaddw v0.8h, v1.8h, v2.8h
2676         uaddw v0.4s, v1.4s, v2.4s
2677         uaddw v0.2d, v1.2d, v2.2d
2678
2679 // CHECK-ERROR: error: invalid operand for instruction
2680 // CHECK-ERROR:        uaddw v0.8h, v1.8h, v2.8h
2681 // CHECK-ERROR:                               ^
2682 // CHECK-ERROR: error: invalid operand for instruction
2683 // CHECK-ERROR:        uaddw v0.4s, v1.4s, v2.4s
2684 // CHECK-ERROR:                               ^
2685 // CHECK-ERROR: error: invalid operand for instruction
2686 // CHECK-ERROR:        uaddw v0.2d, v1.2d, v2.2d
2687 // CHECK-ERROR:                               ^
2688
2689         uaddw2 v0.8h, v1.8h, v2.16h
2690         uaddw2 v0.4s, v1.4s, v2.8s
2691         uaddw2 v0.2d, v1.2d, v2.4d
2692
2693 // CHECK-ERROR: error: invalid operand for instruction
2694 // CHECK-ERROR:        uaddw2 v0.8h, v1.8h, v2.16h
2695 // CHECK-ERROR:                             ^
2696 // CHECK-ERROR: error: invalid operand for instruction
2697 // CHECK-ERROR:        uaddw2 v0.4s, v1.4s, v2.8s
2698 // CHECK-ERROR:                             ^
2699 // CHECK-ERROR: error: invalid operand for instruction
2700 // CHECK-ERROR:        uaddw2 v0.2d, v1.2d, v2.4d
2701 // CHECK-ERROR:                             ^
2702
2703         ssubw v0.8h, v1.8h, v2.8h
2704         ssubw v0.4s, v1.4s, v2.4s
2705         ssubw v0.2d, v1.2d, v2.2d
2706
2707 // CHECK-ERROR: error: invalid operand for instruction
2708 // CHECK-ERROR:        ssubw v0.8h, v1.8h, v2.8h
2709 // CHECK-ERROR:                               ^
2710 // CHECK-ERROR: error: invalid operand for instruction
2711 // CHECK-ERROR:        ssubw v0.4s, v1.4s, v2.4s
2712 // CHECK-ERROR:                               ^
2713 // CHECK-ERROR: error: invalid operand for instruction
2714 // CHECK-ERROR:        ssubw v0.2d, v1.2d, v2.2d
2715 // CHECK-ERROR:                               ^
2716
2717         ssubw2 v0.8h, v1.8h, v2.16h
2718         ssubw2 v0.4s, v1.4s, v2.8s
2719         ssubw2 v0.2d, v1.2d, v2.4d
2720
2721 // CHECK-ERROR: error: invalid operand for instruction
2722 // CHECK-ERROR:        ssubw2 v0.8h, v1.8h, v2.16h
2723 // CHECK-ERROR:                             ^
2724 // CHECK-ERROR: error: invalid operand for instruction
2725 // CHECK-ERROR:        ssubw2 v0.4s, v1.4s, v2.8s
2726 // CHECK-ERROR:                             ^
2727 // CHECK-ERROR: error: invalid operand for instruction
2728 // CHECK-ERROR:        ssubw2 v0.2d, v1.2d, v2.4d
2729 // CHECK-ERROR:                             ^
2730
2731         usubw v0.8h, v1.8h, v2.8h
2732         usubw v0.4s, v1.4s, v2.4s
2733         usubw v0.2d, v1.2d, v2.2d
2734
2735 // CHECK-ERROR: error: invalid operand for instruction
2736 // CHECK-ERROR:        usubw v0.8h, v1.8h, v2.8h
2737 // CHECK-ERROR:                               ^
2738 // CHECK-ERROR: error: invalid operand for instruction
2739 // CHECK-ERROR:        usubw v0.4s, v1.4s, v2.4s
2740 // CHECK-ERROR:                               ^
2741 // CHECK-ERROR: error: invalid operand for instruction
2742 // CHECK-ERROR:        usubw v0.2d, v1.2d, v2.2d
2743 // CHECK-ERROR:                               ^
2744
2745         usubw2 v0.8h, v1.8h, v2.16h
2746         usubw2 v0.4s, v1.4s, v2.8s
2747         usubw2 v0.2d, v1.2d, v2.4d
2748
2749 // CHECK-ERROR: error: invalid operand for instruction
2750 // CHECK-ERROR:        usubw2 v0.8h, v1.8h, v2.16h
2751 // CHECK-ERROR:                             ^
2752 // CHECK-ERROR: error: invalid operand for instruction
2753 // CHECK-ERROR:        usubw2 v0.4s, v1.4s, v2.8s
2754 // CHECK-ERROR:                             ^
2755 // CHECK-ERROR: error: invalid operand for instruction
2756 // CHECK-ERROR:        usubw2 v0.2d, v1.2d, v2.4d
2757 // CHECK-ERROR:                             ^
2758
2759 //------------------------------------------------------------------------------
2760 // Narrow
2761 //------------------------------------------------------------------------------
2762
2763         addhn v0.8b, v1.8h, v2.8d
2764         addhn v0.4h, v1.4s, v2.4h
2765         addhn v0.2s, v1.2d, v2.2s
2766
2767 // CHECK-ERROR: error: invalid operand for instruction
2768 // CHECK-ERROR:        addhn v0.8b, v1.8h, v2.8d
2769 // CHECK-ERROR:                            ^
2770 // CHECK-ERROR: error: invalid operand for instruction
2771 // CHECK-ERROR:        addhn v0.4h, v1.4s, v2.4h
2772 // CHECK-ERROR:                               ^
2773 // CHECK-ERROR: error: invalid operand for instruction
2774 // CHECK-ERROR:        addhn v0.2s, v1.2d, v2.2s
2775 // CHECK-ERROR:                               ^
2776
2777         addhn2 v0.16b, v1.8h, v2.8b
2778         addhn2 v0.8h, v1.4s, v2.4h
2779         addhn2 v0.4s, v1.2d, v2.2s
2780
2781 // CHECK-ERROR: error: invalid operand for instruction
2782 // CHECK-ERROR:        addhn2 v0.16b, v1.8h, v2.8b
2783 // CHECK-ERROR:                                 ^
2784 // CHECK-ERROR: error: invalid operand for instruction
2785 // CHECK-ERROR:        addhn2 v0.8h, v1.4s, v2.4h
2786 // CHECK-ERROR:                                ^
2787 // CHECK-ERROR: error: invalid operand for instruction
2788 // CHECK-ERROR:        addhn2 v0.4s, v1.2d, v2.2s
2789 // CHECK-ERROR:                                ^
2790
2791         raddhn v0.8b, v1.8h, v2.8b
2792         raddhn v0.4h, v1.4s, v2.4h
2793         raddhn v0.2s, v1.2d, v2.2s
2794
2795 // CHECK-ERROR: error: invalid operand for instruction
2796 // CHECK-ERROR:        raddhn v0.8b, v1.8h, v2.8b
2797 // CHECK-ERROR:                                ^
2798 // CHECK-ERROR: error: invalid operand for instruction
2799 // CHECK-ERROR:        raddhn v0.4h, v1.4s, v2.4h
2800 // CHECK-ERROR:                                ^
2801 // CHECK-ERROR: error: invalid operand for instruction
2802 // CHECK-ERROR:        raddhn v0.2s, v1.2d, v2.2s
2803 // CHECK-ERROR:                                ^
2804
2805         raddhn2 v0.16b, v1.8h, v2.8b
2806         raddhn2 v0.8h, v1.4s, v2.4h
2807         raddhn2 v0.4s, v1.2d, v2.2s
2808
2809 // CHECK-ERROR: error: invalid operand for instruction
2810 // CHECK-ERROR:        raddhn2 v0.16b, v1.8h, v2.8b
2811 // CHECK-ERROR:                                  ^
2812 // CHECK-ERROR: error: invalid operand for instruction
2813 // CHECK-ERROR:        raddhn2 v0.8h, v1.4s, v2.4h
2814 // CHECK-ERROR:                                 ^
2815 // CHECK-ERROR: error: invalid operand for instruction
2816 // CHECK-ERROR:        raddhn2 v0.4s, v1.2d, v2.2s
2817 // CHECK-ERROR:                                 ^
2818
2819         rsubhn v0.8b, v1.8h, v2.8b
2820         rsubhn v0.4h, v1.4s, v2.4h
2821         rsubhn v0.2s, v1.2d, v2.2s
2822
2823 // CHECK-ERROR: error: invalid operand for instruction
2824 // CHECK-ERROR:        rsubhn v0.8b, v1.8h, v2.8b
2825 // CHECK-ERROR:                                ^
2826 // CHECK-ERROR: error: invalid operand for instruction
2827 // CHECK-ERROR:        rsubhn v0.4h, v1.4s, v2.4h
2828 // CHECK-ERROR:                                ^
2829 // CHECK-ERROR: error: invalid operand for instruction
2830 // CHECK-ERROR:        rsubhn v0.2s, v1.2d, v2.2s
2831 // CHECK-ERROR:                                ^
2832
2833         rsubhn2 v0.16b, v1.8h, v2.8b
2834         rsubhn2 v0.8h, v1.4s, v2.4h
2835         rsubhn2 v0.4s, v1.2d, v2.2s
2836
2837 // CHECK-ERROR: error: invalid operand for instruction
2838 // CHECK-ERROR:        rsubhn2 v0.16b, v1.8h, v2.8b
2839 // CHECK-ERROR:                                  ^
2840 // CHECK-ERROR: error: invalid operand for instruction
2841 // CHECK-ERROR:        rsubhn2 v0.8h, v1.4s, v2.4h
2842 // CHECK-ERROR:                                 ^
2843 // CHECK-ERROR: error: invalid operand for instruction
2844 // CHECK-ERROR:        rsubhn2 v0.4s, v1.2d, v2.2s
2845 // CHECK-ERROR:                                 ^
2846
2847 //----------------------------------------------------------------------
2848 // Scalar Reduce Add Pairwise (Integer)
2849 //----------------------------------------------------------------------
2850          // invalid vector types
2851       addp s0, d1.2d
2852       addp d0, d1.2s
2853
2854 // CHECK-ERROR: error: invalid operand for instruction
2855 // CHECK-ERROR:          addp s0, d1.2d
2856 // CHECK-ERROR:               ^
2857 // CHECK-ERROR: error: invalid operand for instruction
2858 // CHECK-ERROR:          addp d0, d1.2s
2859 // CHECK-ERROR:                      ^
2860
2861 //----------------------------------------------------------------------
2862 // Scalar Reduce Add Pairwise (Floating Point)
2863 //----------------------------------------------------------------------
2864          // invalid vector types
2865       faddp s0, d1.2d
2866       faddp d0, d1.2s
2867
2868 // CHECK-ERROR: error: invalid operand for instruction
2869 // CHECK-ERROR:          faddp s0, d1.2d
2870 // CHECK-ERROR:                    ^
2871 // CHECK-ERROR: error: invalid operand for instruction
2872 // CHECK-ERROR:          faddp d0, d1.2s
2873 // CHECK-ERROR:                    ^
2874
2875 //----------------------------------------------------------------------
2876 // Scalar Reduce Maximum Pairwise (Floating Point)
2877 //----------------------------------------------------------------------
2878          // mismatched and invalid vector types
2879       fmaxp s0, v1.2d
2880       fmaxp d31, v2.2s
2881       fmaxp h3, v2.2s
2882
2883 // CHECK-ERROR: error: invalid operand for instruction
2884 // CHECK-ERROR:          fmaxp s0, v1.2d
2885 // CHECK-ERROR:                       ^
2886 // CHECK-ERROR: error: invalid operand for instruction
2887 // CHECK-ERROR:          fmaxp d31, v2.2s
2888 // CHECK-ERROR:                        ^
2889 // CHECK-ERROR: error: invalid operand for instruction
2890 // CHECK-ERROR:          fmaxp h3, v2.2s
2891 // CHECK-ERROR:                ^
2892
2893
2894 //----------------------------------------------------------------------
2895 // Scalar Reduce Minimum Pairwise (Floating Point)
2896 //----------------------------------------------------------------------
2897          // mismatched and invalid vector types
2898       fminp s0, v1.4h
2899       fminp d31, v2.8h
2900       fminp b3, v2.2s
2901
2902 // CHECK-ERROR: error: invalid operand for instruction
2903 // CHECK-ERROR:          fminp s0, v1.4h
2904 // CHECK-ERROR:                       ^
2905 // CHECK-ERROR: error: invalid operand for instruction
2906 // CHECK-ERROR:          fminp d31, v2.8h
2907 // CHECK-ERROR:                        ^
2908 // CHECK-ERROR: error: invalid operand for instruction
2909 // CHECK-ERROR:          fminp b3, v2.2s
2910 // CHECK-ERROR:                ^
2911
2912
2913 //----------------------------------------------------------------------
2914 // Scalar Reduce maxNum Pairwise (Floating Point)
2915 //----------------------------------------------------------------------
2916          // mismatched and invalid vector types
2917       fmaxnmp s0, v1.8b
2918       fmaxnmp d31, v2.16b
2919       fmaxnmp v1.2s, v2.2s
2920
2921 // CHECK-ERROR: error: invalid operand for instruction
2922 // CHECK-ERROR:          fmaxnmp s0, v1.8b
2923 // CHECK-ERROR:                         ^
2924 // CHECK-ERROR: error: invalid operand for instruction
2925 // CHECK-ERROR:          fmaxnmp d31, v2.16b
2926 // CHECK-ERROR:                          ^
2927 // CHECK-ERROR: error: too few operands for instruction
2928 // CHECK-ERROR:          fmaxnmp v1.2s, v2.2s
2929 // CHECK-ERROR:          ^
2930
2931 //----------------------------------------------------------------------
2932 // Scalar Reduce minNum Pairwise (Floating Point)
2933 //----------------------------------------------------------------------
2934          // mismatched and invalid vector types
2935       fminnmp s0, v1.2d
2936       fminnmp d31, v2.4s
2937       fminnmp v1.4s, v2.2d
2938
2939 // CHECK-ERROR: error: invalid operand for instruction
2940 // CHECK-ERROR:          fminnmp s0, v1.2d
2941 // CHECK-ERROR:                         ^
2942 // CHECK-ERROR: error: invalid operand for instruction
2943 // CHECK-ERROR:          fminnmp d31, v2.4s
2944 // CHECK-ERROR:                          ^
2945 // CHECK-ERROR: error: invalid operand for instruction
2946 // CHECK-ERROR:          fminnmp v1.4s, v2.2d
2947 // CHECK-ERROR:          ^
2948
2949       mla v0.2d, v1.2d, v16.d[1]
2950       mla v0.2s, v1.2s, v2.s[4]
2951       mla v0.4s, v1.4s, v2.s[4]
2952       mla v0.2h, v1.2h, v2.h[1]
2953       mla v0.4h, v1.4h, v2.h[8]
2954       mla v0.8h, v1.8h, v2.h[8]
2955       mla v0.4h, v1.4h, v16.h[2]
2956       mla v0.8h, v1.8h, v16.h[2]
2957
2958 // CHECK-ERROR: error: invalid operand for instruction
2959 // CHECK-ERROR:        mla v0.2d, v1.2d, v16.d[1]
2960 // CHECK-ERROR:               ^
2961 // CHECK-ERROR: vector lane must be an integer in range
2962 // CHECK-ERROR:        mla v0.2s, v1.2s, v2.s[4]
2963 // CHECK-ERROR:                               ^
2964 // CHECK-ERROR: vector lane must be an integer in range
2965 // CHECK-ERROR:        mla v0.4s, v1.4s, v2.s[4]
2966 // CHECK-ERROR:                               ^
2967 // CHECK-ERROR: error: invalid operand for instruction
2968 // CHECK-ERROR:        mla v0.2h, v1.2h, v2.h[1]
2969 // CHECK-ERROR:            ^
2970 // CHECK-ERROR: vector lane must be an integer in range
2971 // CHECK-ERROR:        mla v0.4h, v1.4h, v2.h[8]
2972 // CHECK-ERROR:                               ^
2973 // CHECK-ERROR: vector lane must be an integer in range
2974 // CHECK-ERROR:        mla v0.8h, v1.8h, v2.h[8]
2975 // CHECK-ERROR:                               ^
2976 // CHECK-ERROR: error: invalid operand for instruction
2977 // CHECK-ERROR:        mla v0.4h, v1.4h, v16.h[2]
2978 // CHECK-ERROR:                          ^
2979 // CHECK-ERROR: error: invalid operand for instruction
2980 // CHECK-ERROR:        mla v0.8h, v1.8h, v16.h[2]
2981 // CHECK-ERROR:                              ^
2982
2983       mls v0.2d, v1.2d, v16.d[1]
2984       mls v0.2s, v1.2s, v2.s[4]
2985       mls v0.4s, v1.4s, v2.s[4]
2986       mls v0.2h, v1.2h, v2.h[1]
2987       mls v0.4h, v1.4h, v2.h[8]
2988       mls v0.8h, v1.8h, v2.h[8]
2989       mls v0.4h, v1.4h, v16.h[2]
2990       mls v0.8h, v1.8h, v16.h[2]
2991
2992 // CHECK-ERROR: error: invalid operand for instruction
2993 // CHECK-ERROR:        mls v0.2d, v1.2d, v16.d[1]
2994 // CHECK-ERROR:               ^
2995 // CHECK-ERROR: vector lane must be an integer in range
2996 // CHECK-ERROR:        mls v0.2s, v1.2s, v2.s[4]
2997 // CHECK-ERROR:                               ^
2998 // CHECK-ERROR: vector lane must be an integer in range
2999 // CHECK-ERROR:        mls v0.4s, v1.4s, v2.s[4]
3000 // CHECK-ERROR:                               ^
3001 // CHECK-ERROR: error: invalid operand for instruction
3002 // CHECK-ERROR:        mls v0.2h, v1.2h, v2.h[1]
3003 // CHECK-ERROR:            ^
3004 // CHECK-ERROR: vector lane must be an integer in range
3005 // CHECK-ERROR:        mls v0.4h, v1.4h, v2.h[8]
3006 // CHECK-ERROR:                               ^
3007 // CHECK-ERROR: vector lane must be an integer in range
3008 // CHECK-ERROR:        mls v0.8h, v1.8h, v2.h[8]
3009 // CHECK-ERROR:                               ^
3010 // CHECK-ERROR: error: invalid operand for instruction
3011 // CHECK-ERROR:        mls v0.4h, v1.4h, v16.h[2]
3012 // CHECK-ERROR:                          ^
3013 // CHECK-ERROR: error: invalid operand for instruction
3014 // CHECK-ERROR:        mls v0.8h, v1.8h, v16.h[2]
3015 // CHECK-ERROR:                              ^
3016
3017       fmla v0.4h, v1.4h, v2.h[2]
3018       fmla v0.8h, v1.8h, v2.h[2]
3019       fmla v0.2s, v1.2s, v2.s[4]
3020       fmla v0.2s, v1.2s, v22.s[4]
3021       fmla v3.4s, v8.4s, v2.s[4]
3022       fmla v3.4s, v8.4s, v22.s[4]
3023       fmla v0.2d, v1.2d, v2.d[2]
3024       fmla v0.2d, v1.2d, v22.d[2]
3025
3026 // CHECK-ERROR: error: instruction requires: fullfp16
3027 // CHECK-ERROR:        fmla v0.4h, v1.4h, v2.h[2]
3028 // CHECK-ERROR:                ^
3029 // CHECK-ERROR: error: instruction requires: fullfp16
3030 // CHECK-ERROR:        fmla v0.8h, v1.8h, v2.h[2]
3031 // CHECK-ERROR:                ^
3032 // CHECK-ERROR: vector lane must be an integer in range
3033 // CHECK-ERROR:        fmla v0.2s, v1.2s, v2.s[4]
3034 // CHECK-ERROR:                                ^
3035 // CHECK-ERROR: vector lane must be an integer in range
3036 // CHECK-ERROR:        fmla v0.2s, v1.2s, v22.s[4]
3037 // CHECK-ERROR:                                 ^
3038 // CHECK-ERROR: vector lane must be an integer in range
3039 // CHECK-ERROR:        fmla v3.4s, v8.4s, v2.s[4]
3040 // CHECK-ERROR:                                ^
3041 // CHECK-ERROR: vector lane must be an integer in range
3042 // CHECK-ERROR:        fmla v3.4s, v8.4s, v22.s[4]
3043 // CHECK-ERROR:                                 ^
3044 // CHECK-ERROR: vector lane must be an integer in range
3045 // CHECK-ERROR:        fmla v0.2d, v1.2d, v2.d[2]
3046 // CHECK-ERROR:                                ^
3047 // CHECK-ERROR: vector lane must be an integer in range
3048 // CHECK-ERROR:        fmla v0.2d, v1.2d, v22.d[2]
3049 // CHECK-ERROR:                                 ^
3050
3051       fmls v0.4h, v1.4h, v2.h[2]
3052       fmls v0.8h, v1.8h, v2.h[2]
3053       fmls v0.2s, v1.2s, v2.s[4]
3054       fmls v0.2s, v1.2s, v22.s[4]
3055       fmls v3.4s, v8.4s, v2.s[4]
3056       fmls v3.4s, v8.4s, v22.s[4]
3057       fmls v0.2d, v1.2d, v2.d[2]
3058       fmls v0.2d, v1.2d, v22.d[2]
3059
3060 // CHECK-ERROR: error: instruction requires: fullfp16
3061 // CHECK-ERROR:        fmls v0.4h, v1.4h, v2.h[2]
3062 // CHECK-ERROR:                ^
3063 // CHECK-ERROR: error: instruction requires: fullfp16
3064 // CHECK-ERROR:        fmls v0.8h, v1.8h, v2.h[2]
3065 // CHECK-ERROR:                ^
3066 // CHECK-ERROR: vector lane must be an integer in range
3067 // CHECK-ERROR:        fmls v0.2s, v1.2s, v2.s[4]
3068 // CHECK-ERROR:                                ^
3069 // CHECK-ERROR: vector lane must be an integer in range
3070 // CHECK-ERROR:        fmls v0.2s, v1.2s, v22.s[4]
3071 // CHECK-ERROR:                                 ^
3072 // CHECK-ERROR: vector lane must be an integer in range
3073 // CHECK-ERROR:        fmls v3.4s, v8.4s, v2.s[4]
3074 // CHECK-ERROR:                                ^
3075 // CHECK-ERROR: vector lane must be an integer in range
3076 // CHECK-ERROR:        fmls v3.4s, v8.4s, v22.s[4]
3077 // CHECK-ERROR:                                 ^
3078 // CHECK-ERROR: vector lane must be an integer in range
3079 // CHECK-ERROR:        fmls v0.2d, v1.2d, v2.d[2]
3080 // CHECK-ERROR:                                ^
3081 // CHECK-ERROR: vector lane must be an integer in range
3082 // CHECK-ERROR:        fmls v0.2d, v1.2d, v22.d[2]
3083 // CHECK-ERROR:                                 ^
3084
3085       smlal v0.4h, v1.4h, v2.h[2]
3086       smlal v0.4s, v1.4h, v2.h[8]
3087       smlal v0.4s, v1.4h, v16.h[2]
3088       smlal v0.2s, v1.2s, v2.s[1]
3089       smlal v0.2d, v1.2s, v2.s[4]
3090       smlal v0.2d, v1.2s, v22.s[4]
3091       smlal2 v0.4h, v1.8h, v1.h[2]
3092       smlal2 v0.4s, v1.8h, v1.h[8]
3093       smlal2 v0.4s, v1.8h, v16.h[2]
3094       smlal2 v0.2s, v1.4s, v1.s[2]
3095       smlal2 v0.2d, v1.4s, v1.s[4]
3096       smlal2 v0.2d, v1.4s, v22.s[4]
3097
3098 // CHECK-ERROR: error: invalid operand for instruction
3099 // CHECK-ERROR:        smlal v0.4h, v1.4h, v2.h[2]
3100 // CHECK-ERROR:              ^
3101 // CHECK-ERROR: vector lane must be an integer in range
3102 // CHECK-ERROR:        smlal v0.4s, v1.4h, v2.h[8]
3103 // CHECK-ERROR:                                 ^
3104 // CHECK-ERROR: error: invalid operand for instruction
3105 // CHECK-ERROR:        smlal v0.4s, v1.4h, v16.h[2]
3106 // CHECK-ERROR:                            ^
3107 // CHECK-ERROR: error: invalid operand for instruction
3108 // CHECK-ERROR:        smlal v0.2s, v1.2s, v2.s[1]
3109 // CHECK-ERROR:                                 ^
3110 // CHECK-ERROR: vector lane must be an integer in range
3111 // CHECK-ERROR:        smlal v0.2d, v1.2s, v2.s[4]
3112 // CHECK-ERROR:                                 ^
3113 // CHECK-ERROR: vector lane must be an integer in range
3114 // CHECK-ERROR:        smlal v0.2d, v1.2s, v22.s[4]
3115 // CHECK-ERROR:                                  ^
3116 // CHECK-ERROR: error: invalid operand for instruction
3117 // CHECK-ERROR:        smlal2 v0.4h, v1.8h, v1.h[2]
3118 // CHECK-ERROR:               ^
3119 // CHECK-ERROR: vector lane must be an integer in range
3120 // CHECK-ERROR:        smlal2 v0.4s, v1.8h, v1.h[8]
3121 // CHECK-ERROR:                                  ^
3122 // CHECK-ERROR: error: invalid operand for instruction
3123 // CHECK-ERROR:        smlal2 v0.4s, v1.8h, v16.h[2]
3124 // CHECK-ERROR:                                 ^
3125 // CHECK-ERROR: error: invalid operand for instruction
3126 // CHECK-ERROR:        smlal2 v0.2s, v1.4s, v1.s[2]
3127 // CHECK-ERROR:               ^
3128 // CHECK-ERROR: vector lane must be an integer in range
3129 // CHECK-ERROR:        smlal2 v0.2d, v1.4s, v1.s[4]
3130 // CHECK-ERROR:                                  ^
3131 // CHECK-ERROR: vector lane must be an integer in range
3132 // CHECK-ERROR:        smlal2 v0.2d, v1.4s, v22.s[4]
3133 // CHECK-ERROR:                                   ^
3134
3135       smlsl v0.4h, v1.4h, v2.h[2]
3136       smlsl v0.4s, v1.4h, v2.h[8]
3137       smlsl v0.4s, v1.4h, v16.h[2]
3138       smlsl v0.2s, v1.2s, v2.s[1]
3139       smlsl v0.2d, v1.2s, v2.s[4]
3140       smlsl v0.2d, v1.2s, v22.s[4]
3141       smlsl2 v0.4h, v1.8h, v1.h[2]
3142       smlsl2 v0.4s, v1.8h, v1.h[8]
3143       smlsl2 v0.4s, v1.8h, v16.h[2]
3144       smlsl2 v0.2s, v1.4s, v1.s[2]
3145       smlsl2 v0.2d, v1.4s, v1.s[4]
3146       smlsl2 v0.2d, v1.4s, v22.s[4]
3147
3148 // CHECK-ERROR: error: invalid operand for instruction
3149 // CHECK-ERROR:        smlsl v0.4h, v1.4h, v2.h[2]
3150 // CHECK-ERROR:              ^
3151 // CHECK-ERROR: vector lane must be an integer in range
3152 // CHECK-ERROR:        smlsl v0.4s, v1.4h, v2.h[8]
3153 // CHECK-ERROR:                                 ^
3154 // CHECK-ERROR: error: invalid operand for instruction
3155 // CHECK-ERROR:        smlsl v0.4s, v1.4h, v16.h[2]
3156 // CHECK-ERROR:                            ^
3157 // CHECK-ERROR: error: invalid operand for instruction
3158 // CHECK-ERROR:        smlsl v0.2s, v1.2s, v2.s[1]
3159 // CHECK-ERROR:                                 ^
3160 // CHECK-ERROR: vector lane must be an integer in range
3161 // CHECK-ERROR:        smlsl v0.2d, v1.2s, v2.s[4]
3162 // CHECK-ERROR:                                 ^
3163 // CHECK-ERROR: vector lane must be an integer in range
3164 // CHECK-ERROR:        smlsl v0.2d, v1.2s, v22.s[4]
3165 // CHECK-ERROR:                                  ^
3166 // CHECK-ERROR: error: invalid operand for instruction
3167 // CHECK-ERROR:        smlsl2 v0.4h, v1.8h, v1.h[2]
3168 // CHECK-ERROR:               ^
3169 // CHECK-ERROR: vector lane must be an integer in range
3170 // CHECK-ERROR:        smlsl2 v0.4s, v1.8h, v1.h[8]
3171 // CHECK-ERROR:                                  ^
3172 // CHECK-ERROR: error: invalid operand for instruction
3173 // CHECK-ERROR:        smlsl2 v0.4s, v1.8h, v16.h[2]
3174 // CHECK-ERROR:                                 ^
3175 // CHECK-ERROR: error: invalid operand for instruction
3176 // CHECK-ERROR:        smlsl2 v0.2s, v1.4s, v1.s[2]
3177 // CHECK-ERROR:               ^
3178 // CHECK-ERROR: vector lane must be an integer in range
3179 // CHECK-ERROR:        smlsl2 v0.2d, v1.4s, v1.s[4]
3180 // CHECK-ERROR:                                  ^
3181 // CHECK-ERROR: vector lane must be an integer in range
3182 // CHECK-ERROR:        smlsl2 v0.2d, v1.4s, v22.s[4]
3183 // CHECK-ERROR:                                   ^
3184
3185       umlal v0.4h, v1.4h, v2.h[2]
3186       umlal v0.4s, v1.4h, v2.h[8]
3187       umlal v0.4s, v1.4h, v16.h[2]
3188       umlal v0.2s, v1.2s, v2.s[1]
3189       umlal v0.2d, v1.2s, v2.s[4]
3190       umlal v0.2d, v1.2s, v22.s[4]
3191       umlal2 v0.4h, v1.8h, v1.h[2]
3192       umlal2 v0.4s, v1.8h, v1.h[8]
3193       umlal2 v0.4s, v1.8h, v16.h[2]
3194       umlal2 v0.2s, v1.4s, v1.s[2]
3195       umlal2 v0.2d, v1.4s, v1.s[4]
3196       umlal2 v0.2d, v1.4s, v22.s[4]
3197
3198 // CHECK-ERROR: error: invalid operand for instruction
3199 // CHECK-ERROR:        umlal v0.4h, v1.4h, v2.h[2]
3200 // CHECK-ERROR:              ^
3201 // CHECK-ERROR: vector lane must be an integer in range
3202 // CHECK-ERROR:        umlal v0.4s, v1.4h, v2.h[8]
3203 // CHECK-ERROR:                                 ^
3204 // CHECK-ERROR: error: invalid operand for instruction
3205 // CHECK-ERROR:        umlal v0.4s, v1.4h, v16.h[2]
3206 // CHECK-ERROR:                            ^
3207 // CHECK-ERROR: error: invalid operand for instruction
3208 // CHECK-ERROR:        umlal v0.2s, v1.2s, v2.s[1]
3209 // CHECK-ERROR:                                 ^
3210 // CHECK-ERROR: vector lane must be an integer in range
3211 // CHECK-ERROR:        umlal v0.2d, v1.2s, v2.s[4]
3212 // CHECK-ERROR:                                 ^
3213 // CHECK-ERROR: vector lane must be an integer in range
3214 // CHECK-ERROR:        umlal v0.2d, v1.2s, v22.s[4]
3215 // CHECK-ERROR:                                  ^
3216 // CHECK-ERROR: error: invalid operand for instruction
3217 // CHECK-ERROR:        umlal2 v0.4h, v1.8h, v1.h[2]
3218 // CHECK-ERROR:               ^
3219 // CHECK-ERROR: vector lane must be an integer in range
3220 // CHECK-ERROR:        umlal2 v0.4s, v1.8h, v1.h[8]
3221 // CHECK-ERROR:                                  ^
3222 // CHECK-ERROR: error: invalid operand for instruction
3223 // CHECK-ERROR:        umlal2 v0.4s, v1.8h, v16.h[2]
3224 // CHECK-ERROR:                                 ^
3225 // CHECK-ERROR: error: invalid operand for instruction
3226 // CHECK-ERROR:        umlal2 v0.2s, v1.4s, v1.s[2]
3227 // CHECK-ERROR:               ^
3228 // CHECK-ERROR: vector lane must be an integer in range
3229 // CHECK-ERROR:        umlal2 v0.2d, v1.4s, v1.s[4]
3230 // CHECK-ERROR:                                  ^
3231 // CHECK-ERROR: vector lane must be an integer in range
3232 // CHECK-ERROR:        umlal2 v0.2d, v1.4s, v22.s[4]
3233 // CHECK-ERROR:                                   ^
3234
3235       umlsl v0.4h, v1.4h, v2.h[2]
3236       umlsl v0.4s, v1.4h, v2.h[8]
3237       umlsl v0.4s, v1.4h, v16.h[2]
3238       umlsl v0.2s, v1.2s, v2.s[3]
3239       umlsl v0.2d, v1.2s, v2.s[4]
3240       umlsl v0.2d, v1.2s, v22.s[4]
3241       umlsl2 v0.4h, v1.8h, v1.h[2]
3242       umlsl2 v0.4s, v1.8h, v1.h[8]
3243       umlsl2 v0.4s, v1.8h, v16.h[2]
3244       umlsl2 v0.2s, v1.4s, v1.s[2]
3245       umlsl2 v0.2d, v1.4s, v1.s[4]
3246       umlsl2 v0.2d, v1.4s, v22.s[4]
3247
3248 // CHECK-ERROR: error: invalid operand for instruction
3249 // CHECK-ERROR:        umlsl v0.4h, v1.4h, v2.h[2]
3250 // CHECK-ERROR:              ^
3251 // CHECK-ERROR: vector lane must be an integer in range
3252 // CHECK-ERROR:        umlsl v0.4s, v1.4h, v2.h[8]
3253 // CHECK-ERROR:                                 ^
3254 // CHECK-ERROR: error: invalid operand for instruction
3255 // CHECK-ERROR:        umlsl v0.4s, v1.4h, v16.h[2]
3256 // CHECK-ERROR:                            ^
3257 // CHECK-ERROR: error: invalid operand for instruction
3258 // CHECK-ERROR:        umlsl v0.2s, v1.2s, v2.s[3]
3259 // CHECK-ERROR:                                 ^
3260 // CHECK-ERROR: vector lane must be an integer in range
3261 // CHECK-ERROR:        umlsl v0.2d, v1.2s, v2.s[4]
3262 // CHECK-ERROR:                                 ^
3263 // CHECK-ERROR: vector lane must be an integer in range
3264 // CHECK-ERROR:        umlsl v0.2d, v1.2s, v22.s[4]
3265 // CHECK-ERROR:                                  ^
3266 // CHECK-ERROR: error: invalid operand for instruction
3267 // CHECK-ERROR:        umlsl2 v0.4h, v1.8h, v1.h[2]
3268 // CHECK-ERROR:               ^
3269 // CHECK-ERROR: vector lane must be an integer in range
3270 // CHECK-ERROR:        umlsl2 v0.4s, v1.8h, v1.h[8]
3271 // CHECK-ERROR:                                  ^
3272 // CHECK-ERROR: error: invalid operand for instruction
3273 // CHECK-ERROR:        umlsl2 v0.4s, v1.8h, v16.h[2]
3274 // CHECK-ERROR:                                 ^
3275 // CHECK-ERROR: error: invalid operand for instruction
3276 // CHECK-ERROR:        umlsl2 v0.2s, v1.4s, v1.s[2]
3277 // CHECK-ERROR:               ^
3278 // CHECK-ERROR: vector lane must be an integer in range
3279 // CHECK-ERROR:        umlsl2 v0.2d, v1.4s, v1.s[4]
3280 // CHECK-ERROR:                                  ^
3281 // CHECK-ERROR: vector lane must be an integer in range
3282 // CHECK-ERROR:        umlsl2 v0.2d, v1.4s, v22.s[4]
3283 // CHECK-ERROR:                                   ^
3284
3285       sqdmlal v0.4h, v1.4h, v2.h[2]
3286       sqdmlal v0.4s, v1.4h, v2.h[8]
3287       sqdmlal v0.4s, v1.4h, v16.h[2]
3288       sqdmlal v0.2s, v1.2s, v2.s[3]
3289       sqdmlal v0.2d, v1.2s, v2.s[4]
3290       sqdmlal v0.2d, v1.2s, v22.s[4]
3291       sqdmlal2 v0.4h, v1.8h, v1.h[2]
3292       sqdmlal2 v0.4s, v1.8h, v1.h[8]
3293       sqdmlal2 v0.4s, v1.8h, v16.h[2]
3294       sqdmlal2 v0.2s, v1.4s, v1.s[2]
3295       sqdmlal2 v0.2d, v1.4s, v1.s[4]
3296       sqdmlal2 v0.2d, v1.4s, v22.s[4]
3297
3298 // CHECK-ERROR: error: invalid operand for instruction
3299 // CHECK-ERROR:        sqdmlal v0.4h, v1.4h, v2.h[2]
3300 // CHECK-ERROR:                ^
3301 // CHECK-ERROR: vector lane must be an integer in range
3302 // CHECK-ERROR:        sqdmlal v0.4s, v1.4h, v2.h[8]
3303 // CHECK-ERROR:                                   ^
3304 // CHECK-ERROR: error: invalid operand for instruction
3305 // CHECK-ERROR:        sqdmlal v0.4s, v1.4h, v16.h[2]
3306 // CHECK-ERROR:                              ^
3307 // CHECK-ERROR: error: invalid operand for instruction
3308 // CHECK-ERROR:        sqdmlal v0.2s, v1.2s, v2.s[3]
3309 // CHECK-ERROR:                                   ^
3310 // CHECK-ERROR: vector lane must be an integer in range
3311 // CHECK-ERROR:        sqdmlal v0.2d, v1.2s, v2.s[4]
3312 // CHECK-ERROR:                                   ^
3313 // CHECK-ERROR: vector lane must be an integer in range
3314 // CHECK-ERROR:        sqdmlal v0.2d, v1.2s, v22.s[4]
3315 // CHECK-ERROR:                                    ^
3316 // CHECK-ERROR: error: invalid operand for instruction
3317 // CHECK-ERROR:        sqdmlal2 v0.4h, v1.8h, v1.h[2]
3318 // CHECK-ERROR:                 ^
3319 // CHECK-ERROR: vector lane must be an integer in range
3320 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8h, v1.h[8]
3321 // CHECK-ERROR:                                    ^
3322 // CHECK-ERROR: error: invalid operand for instruction
3323 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8h, v16.h[2]
3324 // CHECK-ERROR:                                   ^
3325 // CHECK-ERROR: error: invalid operand for instruction
3326 // CHECK-ERROR:        sqdmlal2 v0.2s, v1.4s, v1.s[2]
3327 // CHECK-ERROR:                 ^
3328 // CHECK-ERROR: vector lane must be an integer in range
3329 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4s, v1.s[4]
3330 // CHECK-ERROR:                                    ^
3331 // CHECK-ERROR: vector lane must be an integer in range
3332 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4s, v22.s[4]
3333 // CHECK-ERROR:                                     ^
3334
3335       sqdmlsl v0.4h, v1.4h, v2.h[2]
3336       sqdmlsl v0.4s, v1.4h, v2.h[8]
3337       sqdmlsl v0.4s, v1.4h, v16.h[2]
3338       sqdmlsl v0.2s, v1.2s, v2.s[3]
3339       sqdmlsl v0.2d, v1.2s, v2.s[4]
3340       sqdmlsl v0.2d, v1.2s, v22.s[4]
3341       sqdmlsl2 v0.4h, v1.8h, v1.h[2]
3342       sqdmlsl2 v0.4s, v1.8h, v1.h[8]
3343       sqdmlsl2 v0.4s, v1.8h, v16.h[2]
3344       sqdmlsl2 v0.2s, v1.4s, v1.s[2]
3345       sqdmlsl2 v0.2d, v1.4s, v1.s[4]
3346       sqdmlsl2 v0.2d, v1.4s, v22.s[4]
3347
3348 // CHECK-ERROR: error: invalid operand for instruction
3349 // CHECK-ERROR:        sqdmlsl v0.4h, v1.4h, v2.h[2]
3350 // CHECK-ERROR:                ^
3351 // CHECK-ERROR: vector lane must be an integer in range
3352 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4h, v2.h[8]
3353 // CHECK-ERROR:                                   ^
3354 // CHECK-ERROR: error: invalid operand for instruction
3355 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4h, v16.h[2]
3356 // CHECK-ERROR:                              ^
3357 // CHECK-ERROR: error: invalid operand for instruction
3358 // CHECK-ERROR:        sqdmlsl v0.2s, v1.2s, v2.s[3]
3359 // CHECK-ERROR:                                   ^
3360 // CHECK-ERROR: vector lane must be an integer in range
3361 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2s, v2.s[4]
3362 // CHECK-ERROR:                                   ^
3363 // CHECK-ERROR: vector lane must be an integer in range
3364 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2s, v22.s[4]
3365 // CHECK-ERROR:                                    ^
3366 // CHECK-ERROR: error: invalid operand for instruction
3367 // CHECK-ERROR:        sqdmlsl2 v0.4h, v1.8h, v1.h[2]
3368 // CHECK-ERROR:                 ^
3369 // CHECK-ERROR: vector lane must be an integer in range
3370 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8h, v1.h[8]
3371 // CHECK-ERROR:                                    ^
3372 // CHECK-ERROR: error: invalid operand for instruction
3373 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8h, v16.h[2]
3374 // CHECK-ERROR:                                   ^
3375 // CHECK-ERROR: error: invalid operand for instruction
3376 // CHECK-ERROR:        sqdmlsl2 v0.2s, v1.4s, v1.s[2]
3377 // CHECK-ERROR:                 ^
3378 // CHECK-ERROR: vector lane must be an integer in range
3379 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4s, v1.s[4]
3380 // CHECK-ERROR:                                    ^
3381 // CHECK-ERROR: vector lane must be an integer in range
3382 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4s, v22.s[4]
3383 // CHECK-ERROR:                                     ^
3384
3385       mul v0.4h, v1.4h, v2.h[8]
3386       mul v0.4h, v1.4h, v16.h[8]
3387       mul v0.8h, v1.8h, v2.h[8]
3388       mul v0.8h, v1.8h, v16.h[8]
3389       mul v0.2s, v1.2s, v2.s[4]
3390       mul v0.2s, v1.2s, v22.s[4]
3391       mul v0.4s, v1.4s, v2.s[4]
3392       mul v0.4s, v1.4s, v22.s[4]
3393       mul v0.2d, v1.2d, v2.d[1]
3394
3395 // CHECK-ERROR: vector lane must be an integer in range
3396 // CHECK-ERROR:        mul v0.4h, v1.4h, v2.h[8]
3397 // CHECK-ERROR:                               ^
3398 // CHECK-ERROR: error: invalid operand for instruction
3399 // CHECK-ERROR:        mul v0.4h, v1.4h, v16.h[8]
3400 // CHECK-ERROR:                                ^
3401 // CHECK-ERROR: vector lane must be an integer in range
3402 // CHECK-ERROR:        mul v0.8h, v1.8h, v2.h[8]
3403 // CHECK-ERROR:                               ^
3404 // CHECK-ERROR: invalid operand for instruction
3405 // CHECK-ERROR:        mul v0.8h, v1.8h, v16.h[8]
3406 // CHECK-ERROR:                                ^
3407 // CHECK-ERROR: vector lane must be an integer in range
3408 // CHECK-ERROR:        mul v0.2s, v1.2s, v2.s[4]
3409 // CHECK-ERROR:                               ^
3410 // CHECK-ERROR: vector lane must be an integer in range
3411 // CHECK-ERROR:        mul v0.2s, v1.2s, v22.s[4]
3412 // CHECK-ERROR:                                ^
3413 // CHECK-ERROR: vector lane must be an integer in range
3414 // CHECK-ERROR:        mul v0.4s, v1.4s, v2.s[4]
3415 // CHECK-ERROR:                               ^
3416 // CHECK-ERROR: vector lane must be an integer in range
3417 // CHECK-ERROR:        mul v0.4s, v1.4s, v22.s[4]
3418 // CHECK-ERROR:                                ^
3419
3420       fmul v0.4h, v1.4h, v2.h[4]
3421       fmul v0.2s, v1.2s, v2.s[4]
3422       fmul v0.2s, v1.2s, v22.s[4]
3423       fmul v0.4s, v1.4s, v2.s[4]
3424       fmul v0.4s, v1.4s, v22.s[4]
3425       fmul v0.2d, v1.2d, v2.d[2]
3426       fmul v0.2d, v1.2d, v22.d[2]
3427
3428 // CHECK-ERROR: error: invalid operand for instruction
3429 // CHECK-ERROR:        mul v0.2d, v1.2d, v2.d[1]
3430 // CHECK-ERROR:               ^
3431 // CHECK-ERROR: error: instruction requires: fullfp16
3432 // CHECK-ERROR:        fmul v0.4h, v1.4h, v2.h[4]
3433 // CHECK-ERROR:                ^
3434 // CHECK-ERROR: vector lane must be an integer in range
3435 // CHECK-ERROR:        fmul v0.2s, v1.2s, v2.s[4]
3436 // CHECK-ERROR:                                ^
3437 // CHECK-ERROR: vector lane must be an integer in range
3438 // CHECK-ERROR:        fmul v0.2s, v1.2s, v22.s[4]
3439 // CHECK-ERROR:                                 ^
3440 // CHECK-ERROR: vector lane must be an integer in range
3441 // CHECK-ERROR:        fmul v0.4s, v1.4s, v2.s[4]
3442 // CHECK-ERROR:                                ^
3443 // CHECK-ERROR: vector lane must be an integer in range
3444 // CHECK-ERROR:        fmul v0.4s, v1.4s, v22.s[4]
3445 // CHECK-ERROR:                                 ^
3446 // CHECK-ERROR: vector lane must be an integer in range
3447 // CHECK-ERROR:        fmul v0.2d, v1.2d, v2.d[2]
3448 // CHECK-ERROR:                                ^
3449 // CHECK-ERROR: vector lane must be an integer in range
3450 // CHECK-ERROR:        fmul v0.2d, v1.2d, v22.d[2]
3451 // CHECK-ERROR:                                 ^
3452
3453       fmulx v0.4h, v1.4h, v2.h[4]
3454       fmulx v0.2s, v1.2s, v2.s[4]
3455       fmulx v0.2s, v1.2s, v22.s[4]
3456       fmulx v0.4s, v1.4s, v2.s[4]
3457       fmulx v0.4s, v1.4s, v22.s[4]
3458       fmulx v0.2d, v1.2d, v2.d[2]
3459       fmulx v0.2d, v1.2d, v22.d[2]
3460
3461 // CHECK-ERROR: error: instruction requires: fullfp16
3462 // CHECK-ERROR:        fmulx v0.4h, v1.4h, v2.h[4]
3463 // CHECK-ERROR:                 ^
3464 // CHECK-ERROR: vector lane must be an integer in range
3465 // CHECK-ERROR:        fmulx v0.2s, v1.2s, v2.s[4]
3466 // CHECK-ERROR:                                 ^
3467 // CHECK-ERROR: vector lane must be an integer in range
3468 // CHECK-ERROR:        fmulx v0.2s, v1.2s, v22.s[4]
3469 // CHECK-ERROR:                                  ^
3470 // CHECK-ERROR: vector lane must be an integer in range
3471 // CHECK-ERROR:        fmulx v0.4s, v1.4s, v2.s[4]
3472 // CHECK-ERROR:                                 ^
3473 // CHECK-ERROR: vector lane must be an integer in range
3474 // CHECK-ERROR:        fmulx v0.4s, v1.4s, v22.s[4]
3475 // CHECK-ERROR:                                  ^
3476 // CHECK-ERROR: vector lane must be an integer in range
3477 // CHECK-ERROR:        fmulx v0.2d, v1.2d, v2.d[2]
3478 // CHECK-ERROR:                                 ^
3479 // CHECK-ERROR: vector lane must be an integer in range
3480 // CHECK-ERROR:        fmulx v0.2d, v1.2d, v22.d[2]
3481 // CHECK-ERROR:                                  ^
3482
3483       smull v0.4h, v1.4h, v2.h[2]
3484       smull v0.4s, v1.4h, v2.h[8]
3485       smull v0.4s, v1.4h, v16.h[4]
3486       smull v0.2s, v1.2s, v2.s[2]
3487       smull v0.2d, v1.2s, v2.s[4]
3488       smull v0.2d, v1.2s, v22.s[4]
3489       smull2 v0.4h, v1.8h, v2.h[2]
3490       smull2 v0.4s, v1.8h, v2.h[8]
3491       smull2 v0.4s, v1.8h, v16.h[4]
3492       smull2 v0.2s, v1.4s, v2.s[2]
3493       smull2 v0.2d, v1.4s, v2.s[4]
3494       smull2 v0.2d, v1.4s, v22.s[4]
3495
3496 // CHECK-ERROR: error: invalid operand for instruction
3497 // CHECK-ERROR:        smull v0.4h, v1.4h, v2.h[2]
3498 // CHECK-ERROR:              ^
3499 // CHECK-ERROR: vector lane must be an integer in range
3500 // CHECK-ERROR:        smull v0.4s, v1.4h, v2.h[8]
3501 // CHECK-ERROR:                                 ^
3502 // CHECK-ERROR: error: invalid operand for instruction
3503 // CHECK-ERROR:        smull v0.4s, v1.4h, v16.h[4]
3504 // CHECK-ERROR:                            ^
3505 // CHECK-ERROR: error: invalid operand for instruction
3506 // CHECK-ERROR:        smull v0.2s, v1.2s, v2.s[2]
3507 // CHECK-ERROR:              ^
3508 // CHECK-ERROR: vector lane must be an integer in range
3509 // CHECK-ERROR:        smull v0.2d, v1.2s, v2.s[4]
3510 // CHECK-ERROR:                                 ^
3511 // CHECK-ERROR: vector lane must be an integer in range
3512 // CHECK-ERROR:        smull v0.2d, v1.2s, v22.s[4]
3513 // CHECK-ERROR:                                  ^
3514 // CHECK-ERROR: error: invalid operand for instruction
3515 // CHECK-ERROR:        smull2 v0.4h, v1.8h, v2.h[2]
3516 // CHECK-ERROR:               ^
3517 // CHECK-ERROR: vector lane must be an integer in range
3518 // CHECK-ERROR:        smull2 v0.4s, v1.8h, v2.h[8]
3519 // CHECK-ERROR:                                  ^
3520 // CHECK-ERROR: error: invalid operand for instruction
3521 // CHECK-ERROR:        smull2 v0.4s, v1.8h, v16.h[4]
3522 // CHECK-ERROR:                                 ^
3523 // CHECK-ERROR: error: invalid operand for instruction
3524 // CHECK-ERROR:        smull2 v0.2s, v1.4s, v2.s[2]
3525 // CHECK-ERROR:               ^
3526 // CHECK-ERROR: vector lane must be an integer in range
3527 // CHECK-ERROR:        smull2 v0.2d, v1.4s, v2.s[4]
3528 // CHECK-ERROR:                                  ^
3529 // CHECK-ERROR: vector lane must be an integer in range
3530 // CHECK-ERROR:        smull2 v0.2d, v1.4s, v22.s[4]
3531 // CHECK-ERROR:                                   ^
3532
3533       umull v0.4h, v1.4h, v2.h[2]
3534       umull v0.4s, v1.4h, v2.h[8]
3535       umull v0.4s, v1.4h, v16.h[4]
3536       umull v0.2s, v1.2s, v2.s[2]
3537       umull v0.2d, v1.2s, v2.s[4]
3538       umull v0.2d, v1.2s, v22.s[4]
3539       umull2 v0.4h, v1.8h, v2.h[2]
3540       umull2 v0.4s, v1.8h, v2.h[8]
3541       umull2 v0.4s, v1.8h, v16.h[4]
3542       umull2 v0.2s, v1.4s, v2.s[2]
3543       umull2 v0.2d, v1.4s, v2.s[4]
3544       umull2 v0.2d, v1.4s, v22.s[4]
3545
3546 // CHECK-ERROR: error: invalid operand for instruction
3547 // CHECK-ERROR:        umull v0.4h, v1.4h, v2.h[2]
3548 // CHECK-ERROR:              ^
3549 // CHECK-ERROR: vector lane must be an integer in range
3550 // CHECK-ERROR:        umull v0.4s, v1.4h, v2.h[8]
3551 // CHECK-ERROR:                                 ^
3552 // CHECK-ERROR: error: invalid operand for instruction
3553 // CHECK-ERROR:        umull v0.4s, v1.4h, v16.h[4]
3554 // CHECK-ERROR:                            ^
3555 // CHECK-ERROR: error: invalid operand for instruction
3556 // CHECK-ERROR:        umull v0.2s, v1.2s, v2.s[2]
3557 // CHECK-ERROR:              ^
3558 // CHECK-ERROR: vector lane must be an integer in range
3559 // CHECK-ERROR:        umull v0.2d, v1.2s, v2.s[4]
3560 // CHECK-ERROR:                                 ^
3561 // CHECK-ERROR: vector lane must be an integer in range
3562 // CHECK-ERROR:        umull v0.2d, v1.2s, v22.s[4]
3563 // CHECK-ERROR:                                  ^
3564 // CHECK-ERROR: error: invalid operand for instruction
3565 // CHECK-ERROR:        umull2 v0.4h, v1.8h, v2.h[2]
3566 // CHECK-ERROR:               ^
3567 // CHECK-ERROR: vector lane must be an integer in range
3568 // CHECK-ERROR:        umull2 v0.4s, v1.8h, v2.h[8]
3569 // CHECK-ERROR:                                  ^
3570 // CHECK-ERROR: error: invalid operand for instruction
3571 // CHECK-ERROR:        umull2 v0.4s, v1.8h, v16.h[4]
3572 // CHECK-ERROR:                                 ^
3573 // CHECK-ERROR: error: invalid operand for instruction
3574 // CHECK-ERROR:        umull2 v0.2s, v1.4s, v2.s[2]
3575 // CHECK-ERROR:               ^
3576 // CHECK-ERROR: vector lane must be an integer in range
3577 // CHECK-ERROR:        umull2 v0.2d, v1.4s, v2.s[4]
3578 // CHECK-ERROR:                                  ^
3579 // CHECK-ERROR: vector lane must be an integer in range
3580 // CHECK-ERROR:        umull2 v0.2d, v1.4s, v22.s[4]
3581 // CHECK-ERROR:                                   ^
3582
3583       sqdmull v0.4h, v1.4h, v2.h[2]
3584       sqdmull v0.4s, v1.4h, v2.h[8]
3585       sqdmull v0.4s, v1.4h, v16.h[4]
3586       sqdmull v0.2s, v1.2s, v2.s[2]
3587       sqdmull v0.2d, v1.2s, v2.s[4]
3588       sqdmull v0.2d, v1.2s, v22.s[4]
3589       sqdmull2 v0.4h, v1.8h, v2.h[2]
3590       sqdmull2 v0.4s, v1.8h, v2.h[8]
3591       sqdmull2 v0.4s, v1.8h, v16.h[4]
3592       sqdmull2 v0.2s, v1.4s, v2.s[2]
3593       sqdmull2 v0.2d, v1.4s, v2.s[4]
3594       sqdmull2 v0.2d, v1.4s, v22.s[4]
3595
3596 // CHECK-ERROR: error: invalid operand for instruction
3597 // CHECK-ERROR:        sqdmull v0.4h, v1.4h, v2.h[2]
3598 // CHECK-ERROR:                ^
3599 // CHECK-ERROR: vector lane must be an integer in range
3600 // CHECK-ERROR:        sqdmull v0.4s, v1.4h, v2.h[8]
3601 // CHECK-ERROR:                                   ^
3602 // CHECK-ERROR: error: invalid operand for instruction
3603 // CHECK-ERROR:        sqdmull v0.4s, v1.4h, v16.h[4]
3604 // CHECK-ERROR:                              ^
3605 // CHECK-ERROR: error: invalid operand for instruction
3606 // CHECK-ERROR:        sqdmull v0.2s, v1.2s, v2.s[2]
3607 // CHECK-ERROR:                ^
3608 // CHECK-ERROR: vector lane must be an integer in range
3609 // CHECK-ERROR:        sqdmull v0.2d, v1.2s, v2.s[4]
3610 // CHECK-ERROR:                                   ^
3611 // CHECK-ERROR: vector lane must be an integer in range
3612 // CHECK-ERROR:        sqdmull v0.2d, v1.2s, v22.s[4]
3613 // CHECK-ERROR:                                    ^
3614 // CHECK-ERROR: error: invalid operand for instruction
3615 // CHECK-ERROR:        sqdmull2 v0.4h, v1.8h, v2.h[2]
3616 // CHECK-ERROR:                 ^
3617 // CHECK-ERROR: vector lane must be an integer in range
3618 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8h, v2.h[8]
3619 // CHECK-ERROR:                                    ^
3620 // CHECK-ERROR: error: invalid operand for instruction
3621 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8h, v16.h[4]
3622 // CHECK-ERROR:                                   ^
3623 // CHECK-ERROR: error: invalid operand for instruction
3624 // CHECK-ERROR:        sqdmull2 v0.2s, v1.4s, v2.s[2]
3625 // CHECK-ERROR:                 ^
3626 // CHECK-ERROR: vector lane must be an integer in range
3627 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4s, v2.s[4]
3628 // CHECK-ERROR:                                    ^
3629 // CHECK-ERROR: vector lane must be an integer in range
3630 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4s, v22.s[4]
3631 // CHECK-ERROR:                                     ^
3632
3633       sqdmulh v0.4h, v1.4h, v2.h[8]
3634       sqdmulh v0.4h, v1.4h, v16.h[2]
3635       sqdmulh v0.8h, v1.8h, v2.h[8]
3636       sqdmulh v0.8h, v1.8h, v16.h[2]
3637       sqdmulh v0.2s, v1.2s, v2.s[4]
3638       sqdmulh v0.2s, v1.2s, v22.s[4]
3639       sqdmulh v0.4s, v1.4s, v2.s[4]
3640       sqdmulh v0.4s, v1.4s, v22.s[4]
3641       sqdmulh v0.2d, v1.2d, v22.d[1]
3642
3643 // CHECK-ERROR: vector lane must be an integer in range
3644 // CHECK-ERROR:        sqdmulh v0.4h, v1.4h, v2.h[8]
3645 // CHECK-ERROR:                                   ^
3646 // CHECK-ERROR: error: invalid operand for instruction
3647 // CHECK-ERROR:        sqdmulh v0.4h, v1.4h, v16.h[2]
3648 // CHECK-ERROR:                              ^
3649 // CHECK-ERROR: vector lane must be an integer in range
3650 // CHECK-ERROR:        sqdmulh v0.8h, v1.8h, v2.h[8]
3651 // CHECK-ERROR:                                   ^
3652 // CHECK-ERROR: error: invalid operand for instruction
3653 // CHECK-ERROR:        sqdmulh v0.8h, v1.8h, v16.h[2]
3654 // CHECK-ERROR:                                  ^
3655 // CHECK-ERROR: vector lane must be an integer in range
3656 // CHECK-ERROR:        sqdmulh v0.2s, v1.2s, v2.s[4]
3657 // CHECK-ERROR:                                   ^
3658 // CHECK-ERROR: vector lane must be an integer in range
3659 // CHECK-ERROR:        sqdmulh v0.2s, v1.2s, v22.s[4]
3660 // CHECK-ERROR:                                    ^
3661 // CHECK-ERROR: vector lane must be an integer in range
3662 // CHECK-ERROR:        sqdmulh v0.4s, v1.4s, v2.s[4]
3663 // CHECK-ERROR:                                   ^
3664 // CHECK-ERROR: vector lane must be an integer in range
3665 // CHECK-ERROR:        sqdmulh v0.4s, v1.4s, v22.s[4]
3666 // CHECK-ERROR:                                    ^
3667 // CHECK-ERROR: error: invalid operand for instruction
3668 // CHECK-ERROR:        sqdmulh v0.2d, v1.2d, v22.d[1]
3669 // CHECK-ERROR:                   ^
3670
3671       sqrdmulh v0.4h, v1.4h, v2.h[8]
3672       sqrdmulh v0.4h, v1.4h, v16.h[2]
3673       sqrdmulh v0.8h, v1.8h, v2.h[8]
3674       sqrdmulh v0.8h, v1.8h, v16.h[2]
3675       sqrdmulh v0.2s, v1.2s, v2.s[4]
3676       sqrdmulh v0.2s, v1.2s, v22.s[4]
3677       sqrdmulh v0.4s, v1.4s, v2.s[4]
3678       sqrdmulh v0.4s, v1.4s, v22.s[4]
3679       sqrdmulh v0.2d, v1.2d, v22.d[1]
3680
3681 // CHECK-ERROR: vector lane must be an integer in range
3682 // CHECK-ERROR:        sqrdmulh v0.4h, v1.4h, v2.h[8]
3683 // CHECK-ERROR:                                    ^
3684 // CHECK-ERROR: error: invalid operand for instruction
3685 // CHECK-ERROR:        sqrdmulh v0.4h, v1.4h, v16.h[2]
3686 // CHECK-ERROR:                               ^
3687 // CHECK-ERROR: vector lane must be an integer in range
3688 // CHECK-ERROR:        sqrdmulh v0.8h, v1.8h, v2.h[8]
3689 // CHECK-ERROR:                                    ^
3690 // CHECK-ERROR: error: invalid operand for instruction
3691 // CHECK-ERROR:        sqrdmulh v0.8h, v1.8h, v16.h[2]
3692 // CHECK-ERROR:                                   ^
3693 // CHECK-ERROR: vector lane must be an integer in range
3694 // CHECK-ERROR:        sqrdmulh v0.2s, v1.2s, v2.s[4]
3695 // CHECK-ERROR:                                    ^
3696 // CHECK-ERROR: vector lane must be an integer in range
3697 // CHECK-ERROR:        sqrdmulh v0.2s, v1.2s, v22.s[4]
3698 // CHECK-ERROR:                                     ^
3699 // CHECK-ERROR: vector lane must be an integer in range
3700 // CHECK-ERROR:        sqrdmulh v0.4s, v1.4s, v2.s[4]
3701 // CHECK-ERROR:                                    ^
3702 // CHECK-ERROR: vector lane must be an integer in range
3703 // CHECK-ERROR:        sqrdmulh v0.4s, v1.4s, v22.s[4]
3704 // CHECK-ERROR:                                     ^
3705 // CHECK-ERROR: error: invalid operand for instruction
3706 // CHECK-ERROR:        sqrdmulh v0.2d, v1.2d, v22.d[1]
3707 // CHECK-ERROR:                    ^
3708
3709 //----------------------------------------------------------------------
3710 // Across vectors
3711 //----------------------------------------------------------------------
3712
3713         saddlv b0, v1.8b
3714         saddlv b0, v1.16b
3715         saddlv h0, v1.4h
3716         saddlv h0, v1.8h
3717         saddlv s0, v1.2s
3718         saddlv s0, v1.4s
3719         saddlv d0, v1.2s
3720
3721 // CHECK-ERROR: error: invalid operand for instruction
3722 // CHECK-ERROR:        saddlv b0, v1.8b
3723 // CHECK-ERROR:               ^
3724 // CHECK-ERROR: error: invalid operand for instruction
3725 // CHECK-ERROR:        saddlv b0, v1.16b
3726 // CHECK-ERROR:               ^
3727 // CHECK-ERROR: error: invalid operand for instruction
3728 // CHECK-ERROR:        saddlv h0, v1.4h
3729 // CHECK-ERROR:                      ^
3730 // CHECK-ERROR: error: invalid operand for instruction
3731 // CHECK-ERROR:        saddlv h0, v1.8h
3732 // CHECK-ERROR:                      ^
3733 // CHECK-ERROR: error: invalid operand for instruction
3734 // CHECK-ERROR:        saddlv s0, v1.2s
3735 // CHECK-ERROR:                      ^
3736 // CHECK-ERROR: error: invalid operand for instruction
3737 // CHECK-ERROR:        saddlv s0, v1.4s
3738 // CHECK-ERROR:                      ^
3739 // CHECK-ERROR: error: invalid operand for instruction
3740 // CHECK-ERROR:        saddlv d0, v1.2s
3741 // CHECK-ERROR:                   ^
3742
3743         uaddlv b0, v1.8b
3744         uaddlv b0, v1.16b
3745         uaddlv h0, v1.4h
3746         uaddlv h0, v1.8h
3747         uaddlv s0, v1.2s
3748         uaddlv s0, v1.4s
3749         uaddlv d0, v1.2s
3750
3751 // CHECK-ERROR: error: invalid operand for instruction
3752 // CHECK-ERROR:        uaddlv b0, v1.8b
3753 // CHECK-ERROR:               ^
3754 // CHECK-ERROR: error: invalid operand for instruction
3755 // CHECK-ERROR:        uaddlv b0, v1.16b
3756 // CHECK-ERROR:               ^
3757 // CHECK-ERROR: error: invalid operand for instruction
3758 // CHECK-ERROR:        uaddlv h0, v1.4h
3759 // CHECK-ERROR:                      ^
3760 // CHECK-ERROR: error: invalid operand for instruction
3761 // CHECK-ERROR:        uaddlv h0, v1.8h
3762 // CHECK-ERROR:                      ^
3763 // CHECK-ERROR: error: invalid operand for instruction
3764 // CHECK-ERROR:        uaddlv s0, v1.2s
3765 // CHECK-ERROR:                      ^
3766 // CHECK-ERROR: error: invalid operand for instruction
3767 // CHECK-ERROR:        uaddlv s0, v1.4s
3768 // CHECK-ERROR:                      ^
3769 // CHECK-ERROR: error: invalid operand for instruction
3770 // CHECK-ERROR:        uaddlv d0, v1.2s
3771 // CHECK-ERROR:                   ^
3772
3773         smaxv s0, v1.2s
3774         sminv s0, v1.2s
3775         umaxv s0, v1.2s
3776         uminv s0, v1.2s
3777         addv s0, v1.2s
3778
3779 // CHECK-ERROR: error: invalid operand for instruction
3780 // CHECK-ERROR:        smaxv s0, v1.2s
3781 // CHECK-ERROR:                  ^
3782 // CHECK-ERROR: error: invalid operand for instruction
3783 // CHECK-ERROR:        sminv s0, v1.2s
3784 // CHECK-ERROR:                  ^
3785 // CHECK-ERROR: error: invalid operand for instruction
3786 // CHECK-ERROR:        umaxv s0, v1.2s
3787 // CHECK-ERROR:                  ^
3788 // CHECK-ERROR: error: invalid operand for instruction
3789 // CHECK-ERROR:        uminv s0, v1.2s
3790 // CHECK-ERROR:                  ^
3791 // CHECK-ERROR: error: invalid operand for instruction
3792 // CHECK-ERROR:        addv s0, v1.2s
3793 // CHECK-ERROR:                 ^
3794
3795         smaxv d0, v1.2d
3796         sminv d0, v1.2d
3797         umaxv d0, v1.2d
3798         uminv d0, v1.2d
3799         addv d0, v1.2d
3800
3801 // CHECK-ERROR: error: invalid operand for instruction
3802 // CHECK-ERROR:        smaxv d0, v1.2d
3803 // CHECK-ERROR:              ^
3804 // CHECK-ERROR: error: invalid operand for instruction
3805 // CHECK-ERROR:        sminv d0, v1.2d
3806 // CHECK-ERROR:              ^
3807 // CHECK-ERROR: error: invalid operand for instruction
3808 // CHECK-ERROR:        umaxv d0, v1.2d
3809 // CHECK-ERROR:              ^
3810 // CHECK-ERROR: error: invalid operand for instruction
3811 // CHECK-ERROR:        uminv d0, v1.2d
3812 // CHECK-ERROR:              ^
3813 // CHECK-ERROR: error: invalid operand for instruction
3814 // CHECK-ERROR:        addv d0, v1.2d
3815 // CHECK-ERROR:             ^
3816
3817         fmaxnmv b0, v1.16b
3818         fminnmv b0, v1.16b
3819         fmaxv b0, v1.16b
3820         fminv b0, v1.16b
3821
3822 // CHECK-ERROR: error: invalid operand for instruction
3823 // CHECK-ERROR:        fmaxnmv b0, v1.16b
3824 // CHECK-ERROR:                ^
3825 // CHECK-ERROR: error: invalid operand for instruction
3826 // CHECK-ERROR:        fminnmv b0, v1.16b
3827 // CHECK-ERROR:                ^
3828 // CHECK-ERROR: error: invalid operand for instruction
3829 // CHECK-ERROR:        fmaxv b0, v1.16b
3830 // CHECK-ERROR:              ^
3831 // CHECK-ERROR: error: invalid operand for instruction
3832 // CHECK-ERROR:        fminv b0, v1.16b
3833 // CHECK-ERROR:              ^
3834
3835         fmaxnmv h0, v1.8h
3836         fminnmv h0, v1.8h
3837         fmaxv h0, v1.8h
3838         fminv h0, v1.8h
3839
3840 // CHECK-ERROR: error: instruction requires: fullfp16
3841 // CHECK-ERROR:        fmaxnmv h0, v1.8h
3842 // CHECK-ERROR:                ^
3843 // CHECK-ERROR: error: instruction requires: fullfp16
3844 // CHECK-ERROR:        fminnmv h0, v1.8h
3845 // CHECK-ERROR:                ^
3846 // CHECK-ERROR: error: instruction requires: fullfp16
3847 // CHECK-ERROR:        fmaxv h0, v1.8h
3848 // CHECK-ERROR:              ^
3849 // CHECK-ERROR: error: instruction requires: fullfp16
3850 // CHECK-ERROR:        fminv h0, v1.8h
3851 // CHECK-ERROR:              ^
3852
3853         fmaxnmv d0, v1.2d
3854         fminnmv d0, v1.2d
3855         fmaxv d0, v1.2d
3856         fminv d0, v1.2d
3857
3858 // CHECK-ERROR: error: invalid operand for instruction
3859 // CHECK-ERROR:        fmaxnmv d0, v1.2d
3860 // CHECK-ERROR:                ^
3861 // CHECK-ERROR: error: invalid operand for instruction
3862 // CHECK-ERROR:        fminnmv d0, v1.2d
3863 // CHECK-ERROR:                ^
3864 // CHECK-ERROR: error: invalid operand for instruction
3865 // CHECK-ERROR:        fmaxv d0, v1.2d
3866 // CHECK-ERROR:              ^
3867 // CHECK-ERROR: error: invalid operand for instruction
3868 // CHECK-ERROR:        fminv d0, v1.2d
3869 // CHECK-ERROR:              ^
3870
3871 //----------------------------------------------------------------------
3872 // Floating-point Multiply Extended
3873 //----------------------------------------------------------------------
3874
3875     fmulx s20, h22, s15
3876     fmulx d23, d11, s1
3877
3878 // CHECK-ERROR: error: invalid operand for instruction
3879 // CHECK-ERROR:          fmulx s20, h22, s15
3880 // CHECK-ERROR:                     ^
3881 // CHECK-ERROR: error: invalid operand for instruction
3882 // CHECK-ERROR:          fmulx d23, d11, s1
3883 // CHECK-ERROR:                          ^
3884
3885 //----------------------------------------------------------------------
3886 // Floating-point Reciprocal Step
3887 //----------------------------------------------------------------------
3888
3889     frecps s21, s16, h13
3890     frecps d22, s30, d21
3891
3892 // CHECK-ERROR: error: invalid operand for instruction
3893 // CHECK-ERROR:          frecps s21, s16, h13
3894 // CHECK-ERROR:                           ^
3895 // CHECK-ERROR: error: invalid operand for instruction
3896 // CHECK-ERROR:          frecps d22, s30, d21
3897 // CHECK-ERROR:                      ^
3898
3899 //----------------------------------------------------------------------
3900 // Floating-point Reciprocal Square Root Step
3901 //----------------------------------------------------------------------
3902
3903     frsqrts s21, h5, s12
3904     frsqrts d8, s22, d18
3905
3906 // CHECK-ERROR: error: invalid operand for instruction
3907 // CHECK-ERROR:          frsqrts s21, h5, s12
3908 // CHECK-ERROR:                       ^
3909 // CHECK-ERROR: error: invalid operand for instruction
3910 // CHECK-ERROR:          frsqrts d8, s22, d18
3911 // CHECK-ERROR:                      ^
3912
3913 //----------------------------------------------------------------------
3914 // Vector load/store multiple N-element structure (class SIMD lselem)
3915 //----------------------------------------------------------------------
3916          ld1 {x3}, [x2]
3917          ld1 {v4}, [x0]
3918          ld1 {v32.16b}, [x0]
3919          ld1 {v15.8h}, [x32]
3920 // CHECK-ERROR: error: vector register expected
3921 // CHECK-ERROR:        ld1 {x3}, [x2]
3922 // CHECK-ERROR:             ^
3923 // CHECK-ERROR: error: invalid operand for instruction
3924 // CHECK-ERROR:        ld1 {v4}, [x0]
3925 // CHECK-ERROR:             ^
3926 // CHECK-ERROR: error: vector register expected
3927 // CHECK-ERROR:        ld1 {v32.16b}, [x0]
3928 // CHECK-ERROR:             ^
3929 // CHECK-ERROR: error: invalid operand for instruction
3930 // CHECK-ERROR:        ld1 {v15.8h}, [x32]
3931 // CHECK-ERROR:                       ^
3932
3933          ld1 {v0.16b, v2.16b}, [x0]
3934          ld1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
3935          ld1 v0.8b, v1.8b}, [x0]
3936          ld1 {v0.8h-v4.8h}, [x0]
3937          ld1 {v1.8h-v1.8h}, [x0]
3938          ld1 {v15.8h-v17.4h}, [x15]
3939          ld1 {v0.8b-v2.8b, [x0]
3940 // CHECK-ERROR: error: registers must be sequential
3941 // CHECK-ERROR:        ld1 {v0.16b, v2.16b}, [x0]
3942 // CHECK-ERROR:                     ^
3943 // CHECK-ERROR: error: invalid number of vectors
3944 // CHECK-ERROR:        ld1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
3945 // CHECK-ERROR:                                         ^
3946 // CHECK-ERROR: error: unexpected token in argument list
3947 // CHECK-ERROR:        ld1 v0.8b, v1.8b}, [x0]
3948 // CHECK-ERROR:            ^
3949 // CHECK-ERROR: error: invalid number of vectors
3950 // CHECK-ERROR:        ld1 {v0.8h-v4.8h}, [x0]
3951 // CHECK-ERROR:                   ^
3952 // CHECK-ERROR: error: invalid number of vectors
3953 // CHECK-ERROR:        ld1 {v1.8h-v1.8h}, [x0]
3954 // CHECK-ERROR:                   ^
3955 // CHECK-ERROR: error: mismatched register size suffix
3956 // CHECK-ERROR:        ld1 {v15.8h-v17.4h}, [x15]
3957 // CHECK-ERROR:                        ^
3958 // CHECK-ERROR: error: '}' expected
3959 // CHECK-ERROR:        ld1 {v0.8b-v2.8b, [x0]
3960 // CHECK-ERROR:                        ^
3961
3962          ld2 {v15.8h, v16.4h}, [x15]
3963          ld2 {v0.8b, v2.8b}, [x0]
3964          ld2 {v15.4h, v16.4h, v17.4h}, [x32]
3965          ld2 {v15.8h-v16.4h}, [x15]
3966          ld2 {v0.2d-v2.2d}, [x0]
3967 // CHECK-ERROR: error: mismatched register size suffix
3968 // CHECK-ERROR:        ld2 {v15.8h, v16.4h}, [x15]
3969 // CHECK-ERROR:                     ^
3970 // CHECK-ERROR: error: registers must be sequential
3971 // CHECK-ERROR:        ld2 {v0.8b, v2.8b}, [x0]
3972 // CHECK-ERROR:                    ^
3973 // CHECK-ERROR:        ld2 {v15.4h, v16.4h, v17.4h}, [x32]
3974 // CHECK-ERROR:            ^
3975 // CHECK-ERROR: error: mismatched register size suffix
3976 // CHECK-ERROR:        ld2 {v15.8h-v16.4h}, [x15]
3977 // CHECK-ERROR:                        ^
3978 // CHECK-ERROR: error: invalid operand for instruction
3979 // CHECK-ERROR:        ld2 {v0.2d-v2.2d}, [x0]
3980 // CHECK-ERROR:            ^
3981
3982          ld3 {v15.8h, v16.8h, v17.4h}, [x15]
3983          ld3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
3984          ld3 {v0.8b, v2.8b, v3.8b}, [x0]
3985          ld3 {v15.8h-v17.4h}, [x15]
3986          ld3 {v31.4s-v2.4s}, [sp]
3987 // CHECK-ERROR: error: mismatched register size suffix
3988 // CHECK-ERROR:        ld3 {v15.8h, v16.8h, v17.4h}, [x15]
3989 // CHECK-ERROR:                             ^
3990 // CHECK-ERROR: error: mismatched register size suffix
3991 // CHECK-ERROR:        ld3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
3992 // CHECK-ERROR:                    ^
3993 // CHECK-ERROR: error: registers must be sequential
3994 // CHECK-ERROR:        ld3 {v0.8b, v2.8b, v3.8b}, [x0]
3995 // CHECK-ERROR:                    ^
3996 // CHECK-ERROR: error: mismatched register size suffix
3997 // CHECK-ERROR:        ld3 {v15.8h-v17.4h}, [x15]
3998 // CHECK-ERROR:                        ^
3999 // CHECK-ERROR: error: invalid operand for instruction
4000 // CHECK-ERROR:        ld3 {v31.4s-v2.4s}, [sp]
4001 // CHECK-ERROR:            ^
4002
4003          ld4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4004          ld4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4005          ld4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4006          ld4 {v15.8h-v18.4h}, [x15]
4007          ld4 {v31.2s-v1.2s}, [x31]
4008 // CHECK-ERROR: error: mismatched register size suffix
4009 // CHECK-ERROR:        ld4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4010 // CHECK-ERROR:                             ^
4011 // CHECK-ERROR: error: registers must be sequential
4012 // CHECK-ERROR:        ld4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4013 // CHECK-ERROR:                    ^
4014 // CHECK-ERROR: error: invalid number of vectors
4015 // CHECK-ERROR:        ld4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4016 // CHECK-ERROR:                                             ^
4017 // CHECK-ERROR: error: mismatched register size suffix
4018 // CHECK-ERROR:        ld4 {v15.8h-v18.4h}, [x15]
4019 // CHECK-ERROR:                        ^
4020 // CHECK-ERROR: error: invalid operand for instruction
4021 // CHECK-ERROR:        ld4 {v31.2s-v1.2s}, [x31]
4022 // CHECK-ERROR:            ^
4023
4024          st1 {x3}, [x2]
4025          st1 {v4}, [x0]
4026          st1 {v32.16b}, [x0]
4027          st1 {v15.8h}, [x32]
4028 // CHECK-ERROR: error: vector register expected
4029 // CHECK-ERROR:        st1 {x3}, [x2]
4030 // CHECK-ERROR:             ^
4031 // CHECK-ERROR: error: invalid operand for instruction
4032 // CHECK-ERROR:        st1 {v4}, [x0]
4033 // CHECK-ERROR:             ^
4034 // CHECK-ERROR: error: vector register expected
4035 // CHECK-ERROR:        st1 {v32.16b}, [x0]
4036 // CHECK-ERROR:             ^
4037 // CHECK-ERROR: error: invalid operand for instruction
4038 // CHECK-ERROR:        st1 {v15.8h}, [x32]
4039 // CHECK-ERROR:                       ^
4040
4041          st1 {v0.16b, v2.16b}, [x0]
4042          st1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
4043          st1 v0.8b, v1.8b}, [x0]
4044          st1 {v0.8h-v4.8h}, [x0]
4045          st1 {v1.8h-v1.8h}, [x0]
4046          st1 {v15.8h-v17.4h}, [x15]
4047          st1 {v0.8b-v2.8b, [x0]
4048 // CHECK-ERROR: error: registers must be sequential
4049 // CHECK-ERROR:        st1 {v0.16b, v2.16b}, [x0]
4050 // CHECK-ERROR:                     ^
4051 // CHECK-ERROR: error: invalid number of vectors
4052 // CHECK-ERROR:        st1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
4053 // CHECK-ERROR:                                         ^
4054 // CHECK-ERROR: error: unexpected token in argument list
4055 // CHECK-ERROR:        st1 v0.8b, v1.8b}, [x0]
4056 // CHECK-ERROR:            ^
4057 // CHECK-ERROR: error: invalid number of vectors
4058 // CHECK-ERROR:        st1 {v0.8h-v4.8h}, [x0]
4059 // CHECK-ERROR:                   ^
4060 // CHECK-ERROR: error: invalid number of vectors
4061 // CHECK-ERROR:        st1 {v1.8h-v1.8h}, [x0]
4062 // CHECK-ERROR:                   ^
4063 // CHECK-ERROR: error: mismatched register size suffix
4064 // CHECK-ERROR:        st1 {v15.8h-v17.4h}, [x15]
4065 // CHECK-ERROR:                        ^
4066 // CHECK-ERROR: error: '}' expected
4067 // CHECK-ERROR:        st1 {v0.8b-v2.8b, [x0]
4068 // CHECK-ERROR:                        ^
4069
4070          st2 {v15.8h, v16.4h}, [x15]
4071          st2 {v0.8b, v2.8b}, [x0]
4072          st2 {v15.4h, v16.4h, v17.4h}, [x30]
4073          st2 {v15.8h-v16.4h}, [x15]
4074          st2 {v0.2d-v2.2d}, [x0]
4075 // CHECK-ERROR: error: mismatched register size suffix
4076 // CHECK-ERROR:        st2 {v15.8h, v16.4h}, [x15]
4077 // CHECK-ERROR:                     ^
4078 // CHECK-ERROR: error: registers must be sequential
4079 // CHECK-ERROR:        st2 {v0.8b, v2.8b}, [x0]
4080 // CHECK-ERROR:                    ^
4081 // CHECK-ERROR: error: invalid operand for instruction
4082 // CHECK-ERROR:        st2 {v15.4h, v16.4h, v17.4h}, [x30]
4083 // CHECK-ERROR:            ^
4084 // CHECK-ERROR: error: mismatched register size suffix
4085 // CHECK-ERROR:        st2 {v15.8h-v16.4h}, [x15]
4086 // CHECK-ERROR:                        ^
4087 // CHECK-ERROR: error: invalid operand for instruction
4088 // CHECK-ERROR:        st2 {v0.2d-v2.2d}, [x0]
4089 // CHECK-ERROR:            ^
4090
4091          st3 {v15.8h, v16.8h, v17.4h}, [x15]
4092          st3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
4093          st3 {v0.8b, v2.8b, v3.8b}, [x0]
4094          st3 {v15.8h-v17.4h}, [x15]
4095          st3 {v31.4s-v2.4s}, [sp]
4096 // CHECK-ERROR: error: mismatched register size suffix
4097 // CHECK-ERROR:        st3 {v15.8h, v16.8h, v17.4h}, [x15]
4098 // CHECK-ERROR:                             ^
4099 // CHECK-ERROR: error: mismatched register size suffix
4100 // CHECK-ERROR:        st3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
4101 // CHECK-ERROR:                    ^
4102 // CHECK-ERROR: error: registers must be sequential
4103 // CHECK-ERROR:        st3 {v0.8b, v2.8b, v3.8b}, [x0]
4104 // CHECK-ERROR:                    ^
4105 // CHECK-ERROR: error: mismatched register size suffix
4106 // CHECK-ERROR:        st3 {v15.8h-v17.4h}, [x15]
4107 // CHECK-ERROR:                        ^
4108 // CHECK-ERROR: error: invalid operand for instruction
4109 // CHECK-ERROR:        st3 {v31.4s-v2.4s}, [sp]
4110 // CHECK-ERROR:            ^
4111
4112          st4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4113          st4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4114          st4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4115          st4 {v15.8h-v18.4h}, [x15]
4116          st4 {v31.2s-v1.2s}, [x31]
4117 // CHECK-ERROR: error: mismatched register size suffix
4118 // CHECK-ERROR:        st4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4119 // CHECK-ERROR:                             ^
4120 // CHECK-ERROR: error: registers must be sequential
4121 // CHECK-ERROR:        st4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4122 // CHECK-ERROR:                    ^
4123 // CHECK-ERROR: error: invalid number of vectors
4124 // CHECK-ERROR:        st4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4125 // CHECK-ERROR:                                             ^
4126 // CHECK-ERROR: error: mismatched register size suffix
4127 // CHECK-ERROR:        st4 {v15.8h-v18.4h}, [x15]
4128 // CHECK-ERROR:                        ^
4129 // CHECK-ERROR: error: invalid operand for instruction
4130 // CHECK-ERROR:        st4 {v31.2s-v1.2s}, [x31]
4131 // CHECK-ERROR:            ^
4132
4133 //----------------------------------------------------------------------
4134 // Vector post-index load/store multiple N-element structure
4135 // (class SIMD lselem-post)
4136 //----------------------------------------------------------------------
4137          ld1 {v0.16b}, [x0], #8
4138          ld1 {v0.8h, v1.16h}, [x0], x1
4139          ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4140 // CHECK-ERROR: error: invalid operand for instruction
4141 // CHECK-ERROR:          ld1 {v0.16b}, [x0], #8
4142 // CHECK-ERROR:                              ^
4143 // CHECK-ERROR: error: invalid vector kind qualifier
4144 // CHECK-ERROR:          ld1 {v0.8h, v1.16h}, [x0], x1
4145 // CHECK-ERROR:                      ^
4146 // CHECK-ERROR:  error: invalid operand for instruction
4147 // CHECK-ERROR:          ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4148 // CHECK-ERROR:                                                  ^
4149
4150          ld2 {v0.16b, v1.16b}, [x0], #16
4151          ld3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4152          ld4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4153 // CHECK-ERROR:  error: invalid operand for instruction
4154 // CHECK-ERROR:          ld2 {v0.16b, v1.16b}, [x0], #16
4155 // CHECK-ERROR:                                      ^
4156 // CHECK-ERROR:  error: invalid operand for instruction
4157 // CHECK-ERROR:          ld3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4158 // CHECK-ERROR:                                           ^
4159 // CHECK-ERROR: error: mismatched register size suffix
4160 // CHECK-ERROR:          ld4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4161 // CHECK-ERROR:                                     ^
4162
4163          st1 {v0.16b}, [x0], #8
4164          st1 {v0.8h, v1.16h}, [x0], x1
4165          st1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4166 // CHECK-ERROR:  error: invalid operand for instruction
4167 // CHECK-ERROR:          st1 {v0.16b}, [x0], #8
4168 // CHECK-ERROR:                              ^
4169 // CHECK-ERROR: error: invalid vector kind qualifier
4170 // CHECK-ERROR:          st1 {v0.8h, v1.16h}, [x0], x1
4171 // CHECK-ERROR:                      ^
4172 // CHECK-ERROR:  error: invalid operand for instruction
4173 // CHECK-ERROR:          st1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4174                                                  ^
4175
4176          st2 {v0.16b, v1.16b}, [x0], #16
4177          st3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4178          st4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4179 // CHECK-ERROR:  error: invalid operand for instruction
4180 // CHECK-ERROR:          st2 {v0.16b, v1.16b}, [x0], #16
4181 // CHECK-ERROR:                                      ^
4182 // CHECK-ERROR:  error: invalid operand for instruction
4183 // CHECK-ERROR:          st3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4184 // CHECK-ERROR:                                           ^
4185 // CHECK-ERROR: error: mismatched register size suffix
4186 // CHECK-ERROR:          st4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4187 // CHECK-ERROR:                                     ^
4188
4189 //------------------------------------------------------------------------------
4190 // Load single N-element structure to all lanes of N consecutive
4191 // registers (N = 1,2,3,4)
4192 //------------------------------------------------------------------------------
4193          ld1r {x1}, [x0]
4194          ld2r {v31.4s, v0.2s}, [sp]
4195          ld3r {v0.8b, v1.8b, v2.8b, v3.8b}, [x0]
4196          ld4r {v31.2s, v0.2s, v1.2d, v2.2s}, [sp]
4197 // CHECK-ERROR: error: vector register expected
4198 // CHECK-ERROR: ld1r {x1}, [x0]
4199 // CHECK-ERROR:       ^
4200 // CHECK-ERROR: error: mismatched register size suffix
4201 // CHECK-ERROR: ld2r {v31.4s, v0.2s}, [sp]
4202 // CHECK-ERROR:               ^
4203 // CHECK-ERROR: error: invalid operand for instruction
4204 // CHECK-ERROR: ld3r {v0.8b, v1.8b, v2.8b, v3.8b}, [x0]
4205 // CHECK-ERROR:      ^
4206 // CHECK-ERROR: error: mismatched register size suffix
4207 // CHECK-ERROR: ld4r {v31.2s, v0.2s, v1.2d, v2.2s}, [sp]
4208 // CHECK-ERROR:                      ^
4209
4210 //------------------------------------------------------------------------------
4211 // Load/Store single N-element structure to/from one lane of N consecutive
4212 // registers (N = 1, 2,3,4)
4213 //------------------------------------------------------------------------------
4214          ld1 {v0.b}[16], [x0]
4215          ld2 {v15.h, v16.h}[8], [x15]
4216          ld3 {v31.s, v0.s, v1.s}[-1], [sp]
4217          ld4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4218 // CHECK-ERROR: vector lane must be an integer in range
4219 // CHECK-ERROR: ld1 {v0.b}[16], [x0]
4220 // CHECK-ERROR:            ^
4221 // CHECK-ERROR: vector lane must be an integer in range
4222 // CHECK-ERROR: ld2 {v15.h, v16.h}[8], [x15]
4223 // CHECK-ERROR:                    ^
4224 // CHECK-ERROR: error: vector lane must be an integer in range
4225 // CHECK-ERROR: ld3 {v31.s, v0.s, v1.s}[-1], [sp]
4226 // CHECK-ERROR:                         ^
4227 // CHECK-ERROR: vector lane must be an integer in range
4228 // CHECK-ERROR: ld4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4229 // CHECK-ERROR:                              ^
4230
4231          st1 {v0.d}[16], [x0]
4232          st2 {v31.s, v0.s}[3], [8]
4233          st3 {v15.h, v16.h, v17.h}[-1], [x15]
4234          st4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4235 // CHECK-ERROR: vector lane must be an integer in range
4236 // CHECK-ERROR: st1 {v0.d}[16], [x0]
4237 // CHECK-ERROR:            ^
4238 // CHECK-ERROR: error: invalid operand for instruction
4239 // CHECK-ERROR: st2 {v31.s, v0.s}[3], [8]
4240 // CHECK-ERROR:                        ^
4241 // CHECK-ERROR: error: vector lane must be an integer in range
4242 // CHECK-ERROR: st3 {v15.h, v16.h, v17.h}[-1], [x15]
4243 // CHECK-ERROR:                           ^
4244 // CHECK-ERROR: vector lane must be an integer in range
4245 // CHECK-ERROR: st4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4246 // CHECK-ERROR:                              ^
4247
4248 //------------------------------------------------------------------------------
4249 // Post-index of load single N-element structure to all lanes of N consecutive
4250 // registers (N = 1,2,3,4)
4251 //------------------------------------------------------------------------------
4252          ld1r {v15.8h}, [x15], #5
4253          ld2r {v0.2d, v1.2d}, [x0], #7
4254          ld3r {v15.4h, v16.4h, v17.4h}, [x15], #1
4255          ld4r {v31.1d, v0.1d, v1.1d, v2.1d}, [sp], sp
4256 // CHECK-ERROR: error: invalid operand for instruction
4257 // CHECK-ERROR: ld1r {v15.8h}, [x15], #5
4258 // CHECK-ERROR:                       ^
4259 // CHECK-ERROR: error: invalid operand for instruction
4260 // CHECK-ERROR: ld2r {v0.2d, v1.2d}, [x0], #7
4261 // CHECK-ERROR:                            ^
4262 // CHECK-ERROR: error: invalid operand for instruction
4263 // CHECK-ERROR: ld3r {v15.4h, v16.4h, v17.4h}, [x15], #1
4264 // CHECK-ERROR:                                       ^
4265 // CHECK-ERROR: error: invalid operand for instruction
4266 // CHECK-ERROR: ld4r {v31.1d, v0.1d, v1.1d, v2.1d}, [sp], sp
4267 // CHECK-ERROR:                                           ^
4268
4269 //------------------------------------------------------------------------------
4270 // Post-index of Load/Store single N-element structure to/from one lane of N
4271 // consecutive registers (N = 1, 2,3,4)
4272 //------------------------------------------------------------------------------
4273          ld1 {v0.b}[0], [x0], #2
4274          ld2 {v15.h, v16.h}[0], [x15], #3
4275          ld3 {v31.s, v0.s, v1.d}[0], [sp], x9
4276          ld4 {v0.d, v1.d, v2.d, v3.d}[1], [x0], #24
4277 // CHECK-ERROR: error: invalid operand for instruction
4278 // CHECK-ERROR: ld1 {v0.b}[0], [x0], #2
4279 // CHECK-ERROR:                      ^
4280 // CHECK-ERROR: error: invalid operand for instruction
4281 // CHECK-ERROR: ld2 {v15.h, v16.h}[0], [x15], #3
4282 // CHECK-ERROR:                               ^
4283 // CHECK-ERROR: error: mismatched register size suffix
4284 // CHECK-ERROR: ld3 {v31.s, v0.s, v1.d}[0], [sp], x9
4285 // CHECK-ERROR:                      ^
4286 // CHECK-ERROR: error: invalid operand for instruction
4287 // CHECK-ERROR: ld4 {v0.d, v1.d, v2.d, v3.d}[1], [x0], #24
4288 // CHECK-ERROR:                                        ^
4289
4290          st1 {v0.d}[0], [x0], #7
4291          st2 {v31.s, v0.s}[0], [sp], #6
4292          st3 {v15.h, v16.h, v17.h}[0], [x15], #8
4293          st4 {v0.b, v1.b, v2.b, v3.b}[1], [x0], #1
4294 // CHECK-ERROR: error: invalid operand for instruction
4295 // CHECK-ERROR: st1 {v0.d}[0], [x0], #7
4296 // CHECK-ERROR:                      ^
4297 // CHECK-ERROR: error: invalid operand for instruction
4298 // CHECK-ERROR: st2 {v31.s, v0.s}[0], [sp], #6
4299 // CHECK-ERROR:                             ^
4300 // CHECK-ERROR: error: invalid operand for instruction
4301 // CHECK-ERROR: st3 {v15.h, v16.h, v17.h}[0], [x15], #8
4302 // CHECK-ERROR:                                      ^
4303 // CHECK-ERROR: error: invalid operand for instruction
4304 // CHECK-ERROR: st4 {v0.b, v1.b, v2.b, v3.b}[1], [x0], #1
4305 // CHECK-ERROR:                                        ^
4306
4307
4308          ins v2.b[16], w1
4309          ins v7.h[8], w14
4310          ins v20.s[5], w30
4311          ins v1.d[2], x7
4312          ins v2.b[3], b1
4313          ins v7.h[2], h14
4314          ins v20.s[1], s30
4315          ins v1.d[0], d7
4316
4317 // CHECK-ERROR: vector lane must be an integer in range
4318 // CHECK-ERROR:         ins v2.b[16], w1
4319 // CHECK-ERROR:                  ^
4320 // CHECK-ERROR: vector lane must be an integer in range
4321 // CHECK-ERROR:         ins v7.h[8], w14
4322 // CHECK-ERROR:                  ^
4323 // CHECK-ERROR: vector lane must be an integer in range
4324 // CHECK-ERROR:         ins v20.s[5], w30
4325 // CHECK-ERROR:                   ^
4326 // CHECK-ERROR: vector lane must be an integer in range
4327 // CHECK-ERROR:         ins v1.d[2], x7
4328 // CHECK-ERROR:                  ^
4329 // CHECK-ERROR: error: invalid operand for instruction
4330 // CHECK-ERROR:         ins v2.b[3], b1
4331 // CHECK-ERROR:                      ^
4332 // CHECK-ERROR: error: invalid operand for instruction
4333 // CHECK-ERROR:         ins v7.h[2], h14
4334 // CHECK-ERROR:                      ^
4335 // CHECK-ERROR: error: invalid operand for instruction
4336 // CHECK-ERROR:         ins v20.s[1], s30
4337 // CHECK-ERROR:                       ^
4338 // CHECK-ERROR: error: invalid operand for instruction
4339 // CHECK-ERROR:         ins v1.d[0], d7
4340 // CHECK-ERROR:                      ^
4341
4342          smov w1, v0.b[16]
4343          smov w14, v6.h[8]
4344          smov x1, v0.b[16]
4345          smov x14, v6.h[8]
4346          smov x20, v9.s[5]
4347          smov w1, v0.d[0]
4348          smov w14, v6.d[1]
4349          smov x1, v0.d[0]
4350          smov x14, v6.d[1]
4351          smov x20, v9.d[0]
4352
4353 // CHECK-ERROR: vector lane must be an integer in range
4354 // CHECK-ERROR:         smov w1, v0.b[16]
4355 // CHECK-ERROR:                       ^
4356 // CHECK-ERROR: vector lane must be an integer in range
4357 // CHECK-ERROR:         smov w14, v6.h[8]
4358 // CHECK-ERROR:                        ^
4359 // CHECK-ERROR: vector lane must be an integer in range
4360 // CHECK-ERROR:         smov x1, v0.b[16]
4361 // CHECK-ERROR:                       ^
4362 // CHECK-ERROR: vector lane must be an integer in range
4363 // CHECK-ERROR:         smov x14, v6.h[8]
4364 // CHECK-ERROR:                        ^
4365 // CHECK-ERROR: vector lane must be an integer in range
4366 // CHECK-ERROR:         smov x20, v9.s[5]
4367 // CHECK-ERROR:                        ^
4368 // CHECK-ERROR: error: invalid operand for instruction
4369 // CHECK-ERROR:         smov w1, v0.d[0]
4370 // CHECK-ERROR:                     ^
4371 // CHECK-ERROR: error: invalid operand for instruction
4372 // CHECK-ERROR:         smov w14, v6.d[1]
4373 // CHECK-ERROR:                      ^
4374 // CHECK-ERROR: error: invalid operand for instruction
4375 // CHECK-ERROR:         smov x1, v0.d[0]
4376 // CHECK-ERROR:                     ^
4377 // CHECK-ERROR: error: invalid operand for instruction
4378 // CHECK-ERROR:         smov x14, v6.d[1]
4379 // CHECK-ERROR:                      ^
4380 // CHECK-ERROR: error: invalid operand for instruction
4381 // CHECK-ERROR:         smov x20, v9.d[0]
4382 // CHECK-ERROR:                      ^
4383
4384          umov w1, v0.b[16]
4385          umov w14, v6.h[8]
4386          umov w20, v9.s[5]
4387          umov x7, v18.d[3]
4388          umov w1, v0.d[0]
4389          umov s20, v9.s[2]
4390          umov d7, v18.d[1]
4391
4392 // CHECK-ERROR: vector lane must be an integer in range
4393 // CHECK-ERROR:         umov w1, v0.b[16]
4394 // CHECK-ERROR:                       ^
4395 // CHECK-ERROR: vector lane must be an integer in range
4396 // CHECK-ERROR:         umov w14, v6.h[8]
4397 // CHECK-ERROR:                        ^
4398 // CHECK-ERROR: vector lane must be an integer in range
4399 // CHECK-ERROR:         umov w20, v9.s[5]
4400 // CHECK-ERROR:                        ^
4401 // CHECK-ERROR: vector lane must be an integer in range
4402 // CHECK-ERROR:         umov x7, v18.d[3]
4403 // CHECK-ERROR:                        ^
4404 // CHECK-ERROR: error: invalid operand for instruction
4405 // CHECK-ERROR:         umov w1, v0.d[0]
4406 // CHECK-ERROR:                     ^
4407 // CHECK-ERROR: error: invalid operand for instruction
4408 // CHECK-ERROR:         umov s20, v9.s[2]
4409 // CHECK-ERROR:              ^
4410 // CHECK-ERROR: error: invalid operand for instruction
4411 // CHECK-ERROR:         umov d7, v18.d[1]
4412 // CHECK-ERROR:              ^
4413
4414          Ins v1.h[2], v3.b[6]
4415          Ins v6.h[7], v7.s[2]
4416          Ins v15.d[0], v22.s[2]
4417          Ins v0.d[0], v4.b[1]
4418
4419 // CHECK-ERROR: error: invalid operand for instruction
4420 // CHECK-ERROR:         Ins v1.h[2], v3.b[6]
4421 // CHECK-ERROR:                         ^
4422 // CHECK-ERROR: error: invalid operand for instruction
4423 // CHECK-ERROR:         Ins v6.h[7], v7.s[2]
4424 // CHECK-ERROR:                         ^
4425 // CHECK-ERROR: error: invalid operand for instruction
4426 // CHECK-ERROR:         Ins v15.d[0], v22.s[2]
4427 // CHECK-ERROR:                           ^
4428 // CHECK-ERROR: error: invalid operand for instruction
4429 // CHECK-ERROR:         Ins v0.d[0], v4.b[1]
4430 // CHECK-ERROR:                         ^
4431
4432          dup v1.8h, v2.b[2]
4433          dup v11.4s, v7.h[7]
4434          dup v17.2d, v20.s[0]
4435          dup v1.16b, v2.h[2]
4436          dup v11.8h, v7.s[3]
4437          dup v17.4s, v20.d[0]
4438          dup v5.2d, v1.b[1]
4439
4440 // CHECK-ERROR: error: invalid operand for instruction
4441 // CHECK-ERROR:         dup v1.8h, v2.b[2]
4442 // CHECK-ERROR:                       ^
4443 // CHECK-ERROR: error: invalid operand for instruction
4444 // CHECK-ERROR:         dup v11.4s, v7.h[7]
4445 // CHECK-ERROR:                        ^
4446 // CHECK-ERROR: error: invalid operand for instruction
4447 // CHECK-ERROR:         dup v17.2d, v20.s[0]
4448 // CHECK-ERROR:                         ^
4449 // CHECK-ERROR: error: invalid operand for instruction
4450 // CHECK-ERROR:         dup v1.16b, v2.h[2]
4451 // CHECK-ERROR:                        ^
4452 // CHECK-ERROR: invalid operand for instruction
4453 // CHECK-ERROR:         dup v11.8h, v7.s[3]
4454 // CHECK-ERROR:                        ^
4455 // CHECK-ERROR: invalid operand for instruction
4456 // CHECK-ERROR:         dup v17.4s, v20.d[0]
4457 // CHECK-ERROR:                         ^
4458 // CHECK-ERROR: invalid operand for instruction
4459 // CHECK-ERROR:         dup v5.2d, v1.b[1]
4460 // CHECK-ERROR:                       ^
4461
4462          dup v1.8b, b1
4463          dup v11.4h, h14
4464          dup v17.2s, s30
4465          dup v1.16b, d2
4466          dup v11.8s, w16
4467          dup v17.4d, w28
4468          dup v5.2d, w0
4469
4470 // CHECK-ERROR: error: invalid operand for instruction
4471 // CHECK-ERROR:         dup v1.8b, b1
4472 // CHECK-ERROR:                    ^
4473 // CHECK-ERROR: error: invalid operand for instruction
4474 // CHECK-ERROR:         dup v11.4h, h14
4475 // CHECK-ERROR:                     ^
4476 // CHECK-ERROR: error: invalid operand for instruction
4477 // CHECK-ERROR:         dup v17.2s, s30
4478 // CHECK-ERROR:                     ^
4479 // CHECK-ERROR: error: invalid operand for instruction
4480 // CHECK-ERROR:         dup v1.16b, d2
4481 // CHECK-ERROR:                     ^
4482 // CHECK-ERROR: error: invalid operand for instruction
4483 // CHECK-ERROR:         dup v11.8s, w16
4484 // CHECK-ERROR:             ^
4485 // CHECK-ERROR: error: invalid operand for instruction
4486 // CHECK-ERROR:         dup v17.4d, w28
4487 // CHECK-ERROR:             ^
4488 // CHECK-ERROR: error: invalid operand for instruction
4489 // CHECK-ERROR:         dup v5.2d, w0
4490 // CHECK-ERROR:                    ^
4491
4492 //----------------------------------------------------------------------
4493 // Scalar Compare Bitwise Equal
4494 //----------------------------------------------------------------------
4495
4496          cmeq b20, d21, d22
4497
4498 // CHECK-ERROR: error: invalid operand for instruction
4499 // CHECK-ERROR:          cmeq b20, d21, d22
4500 // CHECK-ERROR:               ^
4501
4502 //----------------------------------------------------------------------
4503 // Scalar Compare Bitwise Equal To Zero
4504 //----------------------------------------------------------------------
4505
4506          cmeq d20, b21, #0
4507
4508 // CHECK-ERROR: error: invalid operand for instruction
4509 // CHECK-ERROR:          cmeq d20, b21, #0
4510 // CHECK-ERROR:                    ^
4511
4512 //----------------------------------------------------------------------
4513 // Scalar Compare Unsigned Higher Or Same
4514 //----------------------------------------------------------------------
4515
4516          cmhs b20, d21, d22
4517
4518 // CHECK-ERROR: error: invalid operand for instruction
4519 // CHECK-ERROR:          cmhs b20, d21, d22
4520 // CHECK-ERROR:               ^
4521
4522         
4523 //----------------------------------------------------------------------
4524 // Scalar Compare Signed Greather Than Or Equal
4525 //----------------------------------------------------------------------
4526
4527          cmge b20, d21, d22
4528
4529 // CHECK-ERROR: error: invalid operand for instruction
4530 // CHECK-ERROR:          cmge b20, d21, d22
4531 // CHECK-ERROR:               ^
4532
4533 //----------------------------------------------------------------------
4534 // Scalar Compare Signed Greather Than Or Equal To Zero
4535 //----------------------------------------------------------------------
4536
4537          cmge d20, b21, #0
4538
4539 // CHECK-ERROR: error: invalid operand for instruction
4540 // CHECK-ERROR:          cmge d20, b21, #0
4541 // CHECK-ERROR:                    ^
4542
4543 //----------------------------------------------------------------------
4544 // Scalar Compare Unsigned Higher
4545 //----------------------------------------------------------------------
4546
4547          cmhi b20, d21, d22
4548
4549 // CHECK-ERROR: error: invalid operand for instruction
4550 // CHECK-ERROR:          cmhi b20, d21, d22
4551 // CHECK-ERROR:               ^
4552
4553 //----------------------------------------------------------------------
4554 // Scalar Compare Signed Greater Than
4555 //----------------------------------------------------------------------
4556
4557          cmgt b20, d21, d22
4558
4559 // CHECK-ERROR: error: invalid operand for instruction
4560 // CHECK-ERROR:          cmgt b20, d21, d22
4561 // CHECK-ERROR:               ^
4562
4563 //----------------------------------------------------------------------
4564 // Scalar Compare Signed Greater Than Zero
4565 //----------------------------------------------------------------------
4566
4567          cmgt d20, b21, #0
4568
4569 // CHECK-ERROR: error: invalid operand for instruction
4570 // CHECK-ERROR:          cmgt d20, b21, #0
4571 // CHECK-ERROR:                    ^
4572
4573 //----------------------------------------------------------------------
4574 // Scalar Compare Signed Less Than Or Equal To Zero
4575 //----------------------------------------------------------------------
4576
4577          cmle d20, b21, #0
4578
4579 // CHECK-ERROR: error: invalid operand for instruction
4580 // CHECK-ERROR:          cmle d20, b21, #0
4581 // CHECK-ERROR:                    ^
4582
4583 //----------------------------------------------------------------------
4584 // Scalar Compare Less Than Zero
4585 //----------------------------------------------------------------------
4586
4587          cmlt d20, b21, #0
4588
4589 // CHECK-ERROR: error: invalid operand for instruction
4590 // CHECK-ERROR:          cmlt d20, b21, #0
4591 // CHECK-ERROR:                    ^
4592
4593 //----------------------------------------------------------------------
4594 // Scalar Compare Bitwise Test Bits
4595 //----------------------------------------------------------------------
4596
4597          cmtst b20, d21, d22
4598
4599 // CHECK-ERROR: error: invalid operand for instruction
4600 // CHECK-ERROR:          cmtst b20, d21, d22
4601 // CHECK-ERROR:                ^
4602
4603 //----------------------------------------------------------------------
4604 // Scalar Floating-point Compare Mask Equal
4605 //----------------------------------------------------------------------
4606
4607          fcmeq s10, h11, s12
4608          fcmeq d20, s21, d22
4609
4610 // CHECK-ERROR: error: invalid operand for instruction
4611 // CHECK-ERROR:          fcmeq s10, h11, s12
4612 // CHECK-ERROR:                     ^
4613 // CHECK-ERROR: error: invalid operand for instruction
4614 // CHECK-ERROR:          fcmeq d20, s21, d22
4615 // CHECK-ERROR:                     ^
4616
4617 //----------------------------------------------------------------------
4618 // Scalar Floating-point Compare Mask Equal To Zero
4619 //----------------------------------------------------------------------
4620
4621          fcmeq h10, s11, #0.0
4622          fcmeq d20, s21, #0.0
4623
4624 // CHECK-ERROR: error: invalid operand for instruction
4625 // CHECK-ERROR:          fcmeq h10, s11, #0.0
4626 // CHECK-ERROR:                ^
4627 // CHECK-ERROR: error: invalid operand for instruction
4628 // CHECK-ERROR:          fcmeq d20, s21, #0.0
4629 // CHECK-ERROR:                     ^
4630
4631 //----------------------------------------------------------------------
4632 // Scalar Floating-point Compare Mask Greater Than Or Equal
4633 //----------------------------------------------------------------------
4634
4635          fcmge s10, h11, s12
4636          fcmge d20, s21, d22
4637
4638 // CHECK-ERROR: error: invalid operand for instruction
4639 // CHECK-ERROR:          fcmge s10, h11, s12
4640 // CHECK-ERROR:                     ^
4641 // CHECK-ERROR: error: invalid operand for instruction
4642 // CHECK-ERROR:          fcmge d20, s21, d22
4643 // CHECK-ERROR:                     ^
4644
4645 //----------------------------------------------------------------------
4646 // Scalar Floating-point Compare Mask Greater Than Or Equal To Zero
4647 //----------------------------------------------------------------------
4648
4649          fcmge h10, s11, #0.0
4650          fcmge d20, s21, #0.0
4651
4652 // CHECK-ERROR: error: invalid operand for instruction
4653 // CHECK-ERROR:          fcmge h10, s11, #0.0
4654 // CHECK-ERROR:                ^
4655 // CHECK-ERROR: error: invalid operand for instruction
4656 // CHECK-ERROR:          fcmge d20, s21, #0.0
4657 // CHECK-ERROR:                     ^
4658
4659 //----------------------------------------------------------------------
4660 // Scalar Floating-point Compare Mask Greather Than
4661 //----------------------------------------------------------------------
4662
4663          fcmgt s10, h11, s12
4664          fcmgt d20, s21, d22
4665
4666 // CHECK-ERROR: error: invalid operand for instruction
4667 // CHECK-ERROR:          fcmgt s10, h11, s12
4668 // CHECK-ERROR:                     ^
4669 // CHECK-ERROR: error: invalid operand for instruction
4670 // CHECK-ERROR:          fcmgt d20, s21, d22
4671 // CHECK-ERROR:                     ^
4672
4673 //----------------------------------------------------------------------
4674 // Scalar Floating-point Compare Mask Greather Than Zero
4675 //----------------------------------------------------------------------
4676
4677          fcmgt h10, s11, #0.0
4678          fcmgt d20, s21, #0.0
4679
4680 // CHECK-ERROR: error: invalid operand for instruction
4681 // CHECK-ERROR:          fcmgt h10, s11, #0.0
4682 // CHECK-ERROR:                ^
4683 // CHECK-ERROR: error: invalid operand for instruction
4684 // CHECK-ERROR:          fcmgt d20, s21, #0.0
4685 // CHECK-ERROR:                     ^
4686
4687 //----------------------------------------------------------------------
4688 // Scalar Floating-point Compare Mask Less Than Or Equal To Zero
4689 //----------------------------------------------------------------------
4690
4691          fcmle h10, s11, #0.0
4692          fcmle d20, s21, #0.0
4693
4694 // CHECK-ERROR: error: invalid operand for instruction
4695 // CHECK-ERROR:          fcmle h10, s11, #0.0
4696 // CHECK-ERROR:                ^
4697 // CHECK-ERROR: error: invalid operand for instruction
4698 // CHECK-ERROR:          fcmle d20, s21, #0.0
4699 // CHECK-ERROR:                     ^
4700
4701 //----------------------------------------------------------------------
4702 // Scalar Floating-point Compare Mask Less Than
4703 //----------------------------------------------------------------------
4704
4705          fcmlt h10, s11, #0.0
4706          fcmlt d20, s21, #0.0
4707
4708 // CHECK-ERROR: error: invalid operand for instruction
4709 // CHECK-ERROR:          fcmlt h10, s11, #0.0
4710 // CHECK-ERROR:                     ^
4711 // CHECK-ERROR: error: invalid operand for instruction
4712 // CHECK-ERROR:          fcmlt d20, s21, #0.0
4713 // CHECK-ERROR:                     ^
4714
4715 //----------------------------------------------------------------------
4716 // Scalar Floating-point Absolute Compare Mask Greater Than Or Equal
4717 //----------------------------------------------------------------------
4718
4719          facge s10, h11, s12
4720          facge d20, s21, d22
4721
4722 // CHECK-ERROR: error: invalid operand for instruction
4723 // CHECK-ERROR:          facge s10, h11, s12
4724 // CHECK-ERROR:                     ^
4725 // CHECK-ERROR: error: invalid operand for instruction
4726 // CHECK-ERROR:          facge d20, s21, d22
4727 // CHECK-ERROR:                     ^
4728
4729 //----------------------------------------------------------------------
4730 // Scalar Floating-point Absolute Compare Mask Greater Than
4731 //----------------------------------------------------------------------
4732
4733          facgt s10, h11, s12
4734          facgt d20, d21, s22
4735
4736 // CHECK-ERROR: error: invalid operand for instruction
4737 // CHECK-ERROR:          facgt s10, h11, s12
4738 // CHECK-ERROR:                     ^
4739 // CHECK-ERROR: error: invalid operand for instruction
4740 // CHECK-ERROR:          facgt d20, d21, s22
4741 // CHECK-ERROR:                          ^
4742         
4743 //----------------------------------------------------------------------
4744 // Scalar Signed Saturating Accumulated of Unsigned Value
4745 //----------------------------------------------------------------------
4746
4747         suqadd b0, h1
4748         suqadd h0, s1
4749         suqadd s0, d1
4750         suqadd d0, b0
4751
4752 // CHECK-ERROR: error: invalid operand for instruction
4753 // CHECK-ERROR:        suqadd b0, h1
4754 // CHECK-ERROR:                   ^
4755 // CHECK-ERROR: error: invalid operand for instruction
4756 // CHECK-ERROR:        suqadd h0, s1
4757 // CHECK-ERROR:                   ^
4758 // CHECK-ERROR: error: invalid operand for instruction
4759 // CHECK-ERROR:        suqadd s0, d1
4760 // CHECK-ERROR:                   ^
4761 // CHECK-ERROR: error: invalid operand for instruction
4762 // CHECK-ERROR:        suqadd d0, b0
4763 // CHECK-ERROR:                   ^
4764
4765 //----------------------------------------------------------------------
4766 // Scalar Unsigned Saturating Accumulated of Signed Value
4767 //----------------------------------------------------------------------
4768
4769         usqadd b0, h1
4770         usqadd h0, s1
4771         usqadd s0, d1
4772         usqadd d0, b1
4773
4774 // CHECK-ERROR: error: invalid operand for instruction
4775 // CHECK-ERROR:        usqadd b0, h1
4776 // CHECK-ERROR:                   ^
4777 // CHECK-ERROR: error: invalid operand for instruction
4778 // CHECK-ERROR:        usqadd h0, s1
4779 // CHECK-ERROR:                   ^
4780 // CHECK-ERROR: error: invalid operand for instruction
4781 // CHECK-ERROR:        usqadd s0, d1
4782 // CHECK-ERROR:                   ^
4783 // CHECK-ERROR: error: invalid operand for instruction
4784 // CHECK-ERROR:        usqadd d0, b1
4785 // CHECK-ERROR:                   ^
4786
4787 //----------------------------------------------------------------------
4788 // Scalar Absolute Value
4789 //----------------------------------------------------------------------
4790
4791     abs d29, s24
4792
4793 // CHECK-ERROR: error: invalid operand for instruction
4794 // CHECK-ERROR:        abs d29, s24
4795 // CHECK-ERROR:                 ^
4796
4797 //----------------------------------------------------------------------
4798 // Scalar Negate
4799 //----------------------------------------------------------------------
4800
4801     neg d29, s24
4802
4803 // CHECK-ERROR: error: invalid operand for instruction
4804 // CHECK-ERROR:        neg d29, s24
4805 // CHECK-ERROR:                 ^
4806
4807 //----------------------------------------------------------------------
4808 // Signed Saturating Doubling Multiply-Add Long
4809 //----------------------------------------------------------------------
4810
4811     sqdmlal s17, h27, s12
4812     sqdmlal d19, s24, d12
4813
4814 // CHECK-ERROR: error: invalid operand for instruction
4815 // CHECK-ERROR:        sqdmlal s17, h27, s12
4816 // CHECK-ERROR:                          ^
4817 // CHECK-ERROR: error: invalid operand for instruction
4818 // CHECK-ERROR:        sqdmlal d19, s24, d12
4819 // CHECK-ERROR:                          ^
4820
4821 //----------------------------------------------------------------------
4822 // Signed Saturating Doubling Multiply-Subtract Long
4823 //----------------------------------------------------------------------
4824
4825     sqdmlsl s14, h12, s25
4826     sqdmlsl d12, s23, d13
4827
4828 // CHECK-ERROR: error: invalid operand for instruction
4829 // CHECK-ERROR:        sqdmlsl s14, h12, s25
4830 // CHECK-ERROR:                          ^
4831 // CHECK-ERROR: error: invalid operand for instruction
4832 // CHECK-ERROR:        sqdmlsl d12, s23, d13
4833 // CHECK-ERROR:                          ^
4834
4835 //----------------------------------------------------------------------
4836 // Signed Saturating Doubling Multiply Long
4837 //----------------------------------------------------------------------
4838
4839     sqdmull s12, h22, s12
4840     sqdmull d15, s22, d12
4841
4842 // CHECK-ERROR: error: invalid operand for instruction
4843 // CHECK-ERROR:        sqdmull s12, h22, s12
4844 // CHECK-ERROR:                          ^
4845 // CHECK-ERROR: error: invalid operand for instruction
4846 // CHECK-ERROR:        sqdmull d15, s22, d12
4847 // CHECK-ERROR:                          ^
4848
4849 //----------------------------------------------------------------------
4850 // Scalar Signed Saturating Extract Unsigned Narrow
4851 //----------------------------------------------------------------------
4852
4853     sqxtun b19, b14
4854     sqxtun h21, h15
4855     sqxtun s20, s12
4856
4857 // CHECK-ERROR: error: invalid operand for instruction
4858 // CHECK-ERROR:        sqxtun b19, b14
4859 // CHECK-ERROR:                    ^
4860 // CHECK-ERROR: error: invalid operand for instruction
4861 // CHECK-ERROR:        sqxtun h21, h15
4862 // CHECK-ERROR:                    ^
4863 // CHECK-ERROR: error: invalid operand for instruction
4864 // CHECK-ERROR:        sqxtun s20, s12
4865 // CHECK-ERROR:                    ^
4866
4867 //----------------------------------------------------------------------
4868 // Scalar Signed Saturating Extract Signed Narrow
4869 //----------------------------------------------------------------------
4870
4871     sqxtn b18, b18
4872     sqxtn h20, h17
4873     sqxtn s19, s14
4874
4875 // CHECK-ERROR: error: invalid operand for instruction
4876 // CHECK-ERROR:        sqxtn b18, b18
4877 // CHECK-ERROR:                   ^
4878 // CHECK-ERROR: error: invalid operand for instruction
4879 // CHECK-ERROR:        sqxtn h20, h17
4880 // CHECK-ERROR:                   ^
4881 // CHECK-ERROR: error: invalid operand for instruction
4882 // CHECK-ERROR:        sqxtn s19, s14
4883 // CHECK-ERROR:                   ^
4884
4885
4886 //----------------------------------------------------------------------
4887 // Scalar Unsigned Saturating Extract Narrow
4888 //----------------------------------------------------------------------
4889
4890     uqxtn b18, b18
4891     uqxtn h20, h17
4892     uqxtn s19, s14
4893
4894 // CHECK-ERROR: error: invalid operand for instruction
4895 // CHECK-ERROR:        uqxtn b18, b18
4896 // CHECK-ERROR:                   ^
4897 // CHECK-ERROR: error: invalid operand for instruction
4898 // CHECK-ERROR:        uqxtn h20, h17
4899 // CHECK-ERROR:                   ^
4900 // CHECK-ERROR: error: invalid operand for instruction
4901 // CHECK-ERROR:        uqxtn s19, s14
4902 // CHECK-ERROR:                   ^
4903
4904 //----------------------------------------------------------------------
4905 // Scalar Signed Shift Right (Immediate)
4906 //----------------------------------------------------------------------
4907         sshr d15, d16, #99
4908
4909 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4910 // CHECK-ERROR:        sshr d15, d16, #99
4911 // CHECK-ERROR:                       ^
4912
4913         sshr d15, s16, #31
4914
4915 // CHECK-ERROR: error: invalid operand for instruction
4916 // CHECK-ERROR:        sshr d15, s16, #31
4917 // CHECK-ERROR:                  ^
4918
4919 //----------------------------------------------------------------------
4920 // Scalar Unsigned Shift Right (Immediate)
4921 //----------------------------------------------------------------------
4922
4923         ushr d10, d17, #99
4924
4925 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4926 // CHECK-ERROR:        ushr d10, d17, #99
4927 // CHECK-ERROR:                       ^
4928
4929 //----------------------------------------------------------------------
4930 // Scalar Signed Rounding Shift Right (Immediate)
4931 //----------------------------------------------------------------------
4932
4933         srshr d19, d18, #99
4934
4935 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4936 // CHECK-ERROR:        srshr d19, d18, #99
4937 // CHECK-ERROR:                        ^
4938
4939 //----------------------------------------------------------------------
4940 // Scalar Unigned Rounding Shift Right (Immediate)
4941 //----------------------------------------------------------------------
4942
4943         urshr d20, d23, #99
4944
4945 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4946 // CHECK-ERROR:        urshr d20, d23, #99
4947 // CHECK-ERROR:                        ^
4948
4949 //----------------------------------------------------------------------
4950 // Scalar Signed Shift Right and Accumulate (Immediate)
4951 //----------------------------------------------------------------------
4952
4953         ssra d18, d12, #99
4954
4955 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4956 // CHECK-ERROR:        ssra d18, d12, #99
4957 // CHECK-ERROR:                       ^
4958
4959 //----------------------------------------------------------------------
4960 // Scalar Unsigned Shift Right and Accumulate (Immediate)
4961 //----------------------------------------------------------------------
4962
4963         usra d20, d13, #99
4964
4965 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4966 // CHECK-ERROR:        usra d20, d13, #99
4967 // CHECK-ERROR:                       ^
4968
4969 //----------------------------------------------------------------------
4970 // Scalar Signed Rounding Shift Right and Accumulate (Immediate)
4971 //----------------------------------------------------------------------
4972
4973         srsra d15, d11, #99
4974
4975 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4976 // CHECK-ERROR:        srsra d15, d11, #99
4977 // CHECK-ERROR:                        ^
4978
4979 //----------------------------------------------------------------------
4980 // Scalar Unsigned Rounding Shift Right and Accumulate (Immediate)
4981 //----------------------------------------------------------------------
4982
4983         ursra d18, d10, #99
4984
4985 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
4986 // CHECK-ERROR:        ursra d18, d10, #99
4987 // CHECK-ERROR:                        ^
4988
4989 //----------------------------------------------------------------------
4990 // Scalar Shift Left (Immediate)
4991 //----------------------------------------------------------------------
4992
4993         shl d7, d10, #99
4994
4995 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
4996 // CHECK-ERROR:        shl d7, d10, #99
4997 // CHECK-ERROR:                     ^
4998
4999         shl d7, s16, #31
5000         
5001 // CHECK-ERROR: error: invalid operand for instruction
5002 // CHECK-ERROR:        shl d7, s16, #31
5003 // CHECK-ERROR:                ^
5004
5005 //----------------------------------------------------------------------
5006 // Signed Saturating Shift Left (Immediate)
5007 //----------------------------------------------------------------------
5008
5009         sqshl b11, b19, #99
5010         sqshl h13, h18, #99
5011         sqshl s14, s17, #99
5012         sqshl d15, d16, #99
5013
5014 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
5015 // CHECK-ERROR:        sqshl b11, b19, #99
5016 // CHECK-ERROR:                        ^
5017 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
5018 // CHECK-ERROR:        sqshl h13, h18, #99
5019 // CHECK-ERROR:                        ^
5020 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
5021 // CHECK-ERROR:        sqshl s14, s17, #99
5022 // CHECK-ERROR:                        ^
5023 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
5024 // CHECK-ERROR:        sqshl d15, d16, #99
5025 // CHECK-ERROR:                        ^
5026
5027 //----------------------------------------------------------------------
5028 // Unsigned Saturating Shift Left (Immediate)
5029 //----------------------------------------------------------------------
5030
5031         uqshl b18, b15, #99
5032         uqshl h11, h18, #99
5033         uqshl s14, s19, #99
5034         uqshl d15, d12, #99
5035
5036 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
5037 // CHECK-ERROR:        uqshl b18, b15, #99
5038 // CHECK-ERROR:                        ^
5039 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
5040 // CHECK-ERROR:        uqshl h11, h18, #99
5041 // CHECK-ERROR:                        ^
5042 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
5043 // CHECK-ERROR:        uqshl s14, s19, #99
5044 // CHECK-ERROR:                        ^
5045 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
5046 // CHECK-ERROR:        uqshl d15, d12, #99
5047 // CHECK-ERROR:                        ^
5048
5049 //----------------------------------------------------------------------
5050 // Signed Saturating Shift Left Unsigned (Immediate)
5051 //----------------------------------------------------------------------
5052
5053         sqshlu b15, b18, #99
5054         sqshlu h19, h17, #99
5055         sqshlu s16, s14, #99
5056         sqshlu d11, d13, #99
5057
5058 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 7]
5059 // CHECK-ERROR:        sqshlu  b15, b18, #99
5060 // CHECK-ERROR:                          ^
5061 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 15]
5062 // CHECK-ERROR:        sqshlu  h19, h17, #99
5063 // CHECK-ERROR:                          ^
5064 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
5065 // CHECK-ERROR:        sqshlu  s16, s14, #99
5066 // CHECK-ERROR:                          ^
5067 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
5068 // CHECK-ERROR:        sqshlu  d11, d13, #99
5069 // CHECK-ERROR:                          ^
5070
5071 //----------------------------------------------------------------------
5072 // Shift Right And Insert (Immediate)
5073 //----------------------------------------------------------------------
5074
5075         sri d10, d12, #99
5076
5077 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
5078 // CHECK-ERROR:        sri d10, d12, #99
5079 // CHECK-ERROR:                      ^
5080
5081 //----------------------------------------------------------------------
5082 // Shift Left And Insert (Immediate)
5083 //----------------------------------------------------------------------
5084
5085         sli d10, d14, #99
5086
5087 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 63]
5088 // CHECK-ERROR:        sli d10, d14, #99
5089 // CHECK-ERROR:                      ^
5090
5091 //----------------------------------------------------------------------
5092 // Signed Saturating Shift Right Narrow (Immediate)
5093 //----------------------------------------------------------------------
5094
5095         sqshrn b10, h15, #99
5096         sqshrn h17, s10, #99
5097         sqshrn s18, d10, #99
5098
5099 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5100 // CHECK-ERROR:        sqshrn  b10, h15, #99
5101 // CHECK-ERROR:                          ^
5102 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5103 // CHECK-ERROR:        sqshrn  h17, s10, #99
5104 // CHECK-ERROR:                          ^
5105 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5106 // CHECK-ERROR:        sqshrn  s18, d10, #99
5107 // CHECK-ERROR:                          ^
5108         
5109 //----------------------------------------------------------------------
5110 // Unsigned Saturating Shift Right Narrow (Immediate)
5111 //----------------------------------------------------------------------
5112
5113         uqshrn b12, h10, #99
5114         uqshrn h10, s14, #99
5115         uqshrn s10, d12, #99
5116
5117 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5118 // CHECK-ERROR:        uqshrn  b12, h10, #99
5119 // CHECK-ERROR:                          ^
5120 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5121 // CHECK-ERROR:        uqshrn  h10, s14, #99
5122 // CHECK-ERROR:                          ^
5123 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5124 // CHECK-ERROR:        uqshrn  s10, d12, #99
5125 // CHECK-ERROR:                          ^
5126         
5127 //----------------------------------------------------------------------
5128 // Signed Saturating Rounded Shift Right Narrow (Immediate)
5129 //----------------------------------------------------------------------
5130
5131         sqrshrn b10, h13, #99
5132         sqrshrn h15, s10, #99
5133         sqrshrn s15, d12, #99
5134
5135 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5136 // CHECK-ERROR:        sqrshrn b10, h13, #99
5137 // CHECK-ERROR:                          ^
5138 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5139 // CHECK-ERROR:        sqrshrn h15, s10, #99
5140 // CHECK-ERROR:                          ^
5141 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5142 // CHECK-ERROR:        sqrshrn s15, d12, #99
5143 // CHECK-ERROR:                          ^
5144         
5145 //----------------------------------------------------------------------
5146 // Unsigned Saturating Rounded Shift Right Narrow (Immediate)
5147 //----------------------------------------------------------------------
5148
5149         uqrshrn b10, h12, #99
5150         uqrshrn h12, s10, #99
5151         uqrshrn s10, d10, #99
5152
5153 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5154 // CHECK-ERROR:        uqrshrn b10, h12, #99
5155 // CHECK-ERROR:                          ^
5156 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5157 // CHECK-ERROR:        uqrshrn h12, s10, #99
5158 // CHECK-ERROR:                          ^
5159 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5160 // CHECK-ERROR:        uqrshrn s10, d10, #99
5161 // CHECK-ERROR:                          ^
5162
5163 //----------------------------------------------------------------------
5164 // Signed Saturating Shift Right Unsigned Narrow (Immediate)
5165 //----------------------------------------------------------------------
5166
5167         sqshrun b15, h10, #99
5168         sqshrun h20, s14, #99
5169         sqshrun s10, d15, #99
5170
5171 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5172 // CHECK-ERROR:        sqshrun b15, h10, #99
5173 // CHECK-ERROR:                          ^
5174 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5175 // CHECK-ERROR:        sqshrun h20, s14, #99
5176 // CHECK-ERROR:                          ^
5177 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5178 // CHECK-ERROR:        sqshrun s10, d15, #99
5179 // CHECK-ERROR:                          ^
5180
5181 //----------------------------------------------------------------------
5182 // Signed Saturating Rounded Shift Right Unsigned Narrow (Immediate)
5183 //----------------------------------------------------------------------
5184
5185         sqrshrun b17, h10, #99
5186         sqrshrun h10, s13, #99
5187         sqrshrun s22, d16, #99
5188
5189 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 8]
5190 // CHECK-ERROR:        sqrshrun b17, h10, #99
5191 // CHECK-ERROR:                           ^
5192 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 16]
5193 // CHECK-ERROR:        sqrshrun h10, s13, #99
5194 // CHECK-ERROR:                           ^
5195 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5196 // CHECK-ERROR:        sqrshrun s22, d16, #99
5197 // CHECK-ERROR:                           ^
5198
5199 //----------------------------------------------------------------------
5200 // Scalar Signed Fixed-point Convert To Floating-Point (Immediate)
5201 //----------------------------------------------------------------------
5202
5203     scvtf s22, s13, #0
5204     scvtf s22, s13, #33
5205     scvtf d21, d12, #65
5206     scvtf d21, s12, #31
5207         
5208 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5209 // CHECK-ERROR:        scvtf s22, s13, #0
5210 // CHECK-ERROR:                        ^
5211 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5212 // CHECK-ERROR:        scvtf s22, s13, #33
5213 // CHECK-ERROR:                        ^
5214 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
5215 // CHECK-ERROR:        scvtf d21, d12, #65
5216 // CHECK-ERROR:                        ^
5217 // CHECK-ERROR: error: invalid operand for instruction
5218 // CHECK-ERROR:        scvtf d21, s12, #31
5219 // CHECK-ERROR:                   ^
5220
5221 //----------------------------------------------------------------------
5222 // Scalar Unsigned Fixed-point Convert To Floating-Point (Immediate)
5223 //----------------------------------------------------------------------
5224
5225     ucvtf s22, s13, #34
5226     ucvtf d21, d14, #65
5227     ucvtf d21, s14, #64
5228         
5229 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
5230 // CHECK-ERROR:        ucvtf s22, s13, #34
5231 // CHECK-ERROR:                        ^
5232 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
5233 // CHECK-ERROR:        ucvtf d21, d14, #65
5234 // CHECK-ERROR:                        ^
5235 // CHECK-ERROR: error: invalid operand for instruction
5236 // CHECK-ERROR:        ucvtf d21, s14, #64
5237 // CHECK-ERROR:                   ^
5238
5239 //------------------------------------------------------------------------------
5240 // Element reverse
5241 //------------------------------------------------------------------------------
5242          rev64 v6.2d, v8.2d
5243          rev32 v30.2s, v31.2s
5244          rev32 v30.4s, v31.4s
5245          rev32 v30.2d, v31.2d
5246          rev16 v21.4h, v1.4h
5247          rev16 v21.8h, v1.8h
5248          rev16 v21.2s, v1.2s
5249          rev16 v21.4s, v1.4s
5250          rev16 v21.2d, v1.2d
5251
5252 // CHECK-ERROR: error: invalid operand for instruction
5253 // CHECK-ERROR:         rev64 v6.2d, v8.2d
5254 // CHECK-ERROR:                  ^
5255 // CHECK-ERROR: error: invalid operand for instruction
5256 // CHECK-ERROR:         rev32 v30.2s, v31.2s
5257 // CHECK-ERROR:                   ^
5258 // CHECK-ERROR: error: invalid operand for instruction
5259 // CHECK-ERROR:         rev32 v30.4s, v31.4s
5260 // CHECK-ERROR:                   ^
5261 // CHECK-ERROR: error: invalid operand for instruction
5262 // CHECK-ERROR:         rev32 v30.2d, v31.2d
5263 // CHECK-ERROR:                   ^
5264 // CHECK-ERROR: error: invalid operand for instruction
5265 // CHECK-ERROR:         rev16 v21.4h, v1.4h
5266 // CHECK-ERROR:                   ^
5267 // CHECK-ERROR: error: invalid operand for instruction
5268 // CHECK-ERROR:         rev16 v21.8h, v1.8h
5269 // CHECK-ERROR:                   ^
5270 // CHECK-ERROR: error: invalid operand for instruction
5271 // CHECK-ERROR:         rev16 v21.2s, v1.2s
5272 // CHECK-ERROR:                   ^
5273 // CHECK-ERROR: error: invalid operand for instruction
5274 // CHECK-ERROR:         rev16 v21.4s, v1.4s
5275 // CHECK-ERROR:                   ^
5276 // CHECK-ERROR: error: invalid operand for instruction
5277 // CHECK-ERROR:         rev16 v21.2d, v1.2d
5278 // CHECK-ERROR:                   ^
5279
5280 //------------------------------------------------------------------------------
5281 // Signed integer pairwise add long
5282 //------------------------------------------------------------------------------
5283
5284          saddlp v3.8h, v21.8h
5285          saddlp v8.8b, v5.8b
5286          saddlp v9.8h, v1.4s
5287          saddlp v0.4s, v1.2d
5288
5289 // CHECK-ERROR: error: invalid operand for instruction
5290 // CHECK-ERROR:         saddlp v3.8h, v21.8h
5291 // CHECK-ERROR:                           ^
5292 // CHECK-ERROR: error: invalid operand for instruction
5293 // CHECK-ERROR:         saddlp v8.8b, v5.8b
5294 // CHECK-ERROR:                   ^
5295 // CHECK-ERROR: error: invalid operand for instruction
5296 // CHECK-ERROR:         saddlp v9.8h, v1.4s
5297 // CHECK-ERROR:                          ^
5298 // CHECK-ERROR: error: invalid operand for instruction
5299 // CHECK-ERROR:         saddlp v0.4s, v1.2d
5300 // CHECK-ERROR:                          ^
5301
5302 //------------------------------------------------------------------------------
5303 // Unsigned integer pairwise add long
5304 //------------------------------------------------------------------------------
5305
5306          uaddlp v3.8h, v21.8h
5307          uaddlp v8.8b, v5.8b
5308          uaddlp v9.8h, v1.4s
5309          uaddlp v0.4s, v1.2d
5310
5311 // CHECK-ERROR: error: invalid operand for instruction
5312 // CHECK-ERROR:         uaddlp v3.8h, v21.8h
5313 // CHECK-ERROR:                           ^
5314 // CHECK-ERROR: error: invalid operand for instruction
5315 // CHECK-ERROR:         uaddlp v8.8b, v5.8b
5316 // CHECK-ERROR:                   ^
5317 // CHECK-ERROR: error: invalid operand for instruction
5318 // CHECK-ERROR:         uaddlp v9.8h, v1.4s
5319 // CHECK-ERROR:                          ^
5320 // CHECK-ERROR: error: invalid operand for instruction
5321 // CHECK-ERROR:         uaddlp v0.4s, v1.2d
5322 // CHECK-ERROR:                          ^
5323
5324 //------------------------------------------------------------------------------
5325 // Signed integer pairwise add and accumulate long
5326 //------------------------------------------------------------------------------
5327
5328          sadalp v3.16b, v21.16b
5329          sadalp v8.4h, v5.4h
5330          sadalp v9.4s, v1.4s
5331          sadalp v0.4h, v1.2s
5332          sadalp v12.2d, v4.8h
5333
5334 // CHECK-ERROR: error: invalid operand for instruction
5335 // CHECK-ERROR:         sadalp v3.16b, v21.16b
5336 // CHECK-ERROR:                   ^
5337 // CHECK-ERROR: error: invalid operand for instruction
5338 // CHECK-ERROR:         sadalp v8.4h, v5.4h
5339 // CHECK-ERROR:                          ^
5340 // CHECK-ERROR: error: invalid operand for instruction
5341 // CHECK-ERROR:         sadalp v9.4s, v1.4s
5342 // CHECK-ERROR:                          ^
5343 // CHECK-ERROR: error: invalid operand for instruction
5344 // CHECK-ERROR:         sadalp v0.4h, v1.2s
5345 // CHECK-ERROR:                          ^
5346 // CHECK-ERROR: error: invalid operand for instruction
5347 // CHECK-ERROR:         sadalp v12.2d, v4.8h
5348 // CHECK-ERROR:                           ^
5349
5350 //------------------------------------------------------------------------------
5351 // Unsigned integer pairwise add and accumulate long
5352 //------------------------------------------------------------------------------
5353
5354          uadalp v3.16b, v21.16b
5355          uadalp v8.4h, v5.4h
5356          uadalp v9.4s, v1.4s
5357          uadalp v0.4h, v1.2s
5358          uadalp v12.2d, v4.8h
5359
5360 // CHECK-ERROR: error: invalid operand for instruction
5361 // CHECK-ERROR:         uadalp v3.16b, v21.16b
5362 // CHECK-ERROR:                   ^
5363 // CHECK-ERROR: error: invalid operand for instruction
5364 // CHECK-ERROR:         uadalp v8.4h, v5.4h
5365 // CHECK-ERROR:                          ^
5366 // CHECK-ERROR: error: invalid operand for instruction
5367 // CHECK-ERROR:         uadalp v9.4s, v1.4s
5368 // CHECK-ERROR:                          ^
5369 // CHECK-ERROR: error: invalid operand for instruction
5370 // CHECK-ERROR:         uadalp v0.4h, v1.2s
5371 // CHECK-ERROR:                          ^
5372 // CHECK-ERROR: error: invalid operand for instruction
5373 // CHECK-ERROR:         uadalp v12.2d, v4.8h
5374 // CHECK-ERROR:                           ^
5375
5376 //------------------------------------------------------------------------------
5377 // Signed integer saturating accumulate of unsigned value
5378 //------------------------------------------------------------------------------
5379
5380          suqadd v0.16b, v31.8b
5381          suqadd v1.8b, v9.8h
5382          suqadd v13.4h, v21.4s
5383          suqadd v4.2s, v0.2d
5384
5385 // CHECK-ERROR: error: invalid operand for instruction
5386 // CHECK-ERROR:         suqadd v0.16b, v31.8b
5387 // CHECK-ERROR:                        ^
5388 // CHECK-ERROR: error: invalid operand for instruction
5389 // CHECK-ERROR:         suqadd v1.8b, v9.8h
5390 // CHECK-ERROR:                       ^
5391 // CHECK-ERROR: error: invalid operand for instruction
5392 // CHECK-ERROR:         suqadd v13.4h, v21.4s
5393 // CHECK-ERROR:                        ^
5394 // CHECK-ERROR: error: invalid operand for instruction
5395 // CHECK-ERROR:         suqadd v4.2s, v0.2d
5396 // CHECK-ERROR:                       ^
5397
5398 //------------------------------------------------------------------------------
5399 // Unsigned integer saturating accumulate of signed value
5400 //------------------------------------------------------------------------------
5401
5402          usqadd v0.16b, v31.8b
5403          usqadd v2.8h, v4.4h
5404          usqadd v13.4h, v21.4s
5405          usqadd v4.2s, v0.2d
5406
5407 // CHECK-ERROR: error: invalid operand for instruction
5408 // CHECK-ERROR:         usqadd v0.16b, v31.8b
5409 // CHECK-ERROR:                        ^
5410 // CHECK-ERROR: error: invalid operand for instruction
5411 // CHECK-ERROR:         usqadd v2.8h, v4.4h
5412 // CHECK-ERROR:                       ^
5413 // CHECK-ERROR: error: invalid operand for instruction
5414 // CHECK-ERROR:         usqadd v13.4h, v21.4s
5415 // CHECK-ERROR:                        ^
5416 // CHECK-ERROR: error: invalid operand for instruction
5417 // CHECK-ERROR:         usqadd v4.2s, v0.2d
5418 // CHECK-ERROR:                       ^
5419
5420 //------------------------------------------------------------------------------
5421 // Integer saturating absolute
5422 //------------------------------------------------------------------------------
5423
5424          sqabs v0.16b, v31.8b
5425          sqabs v2.8h, v4.4h
5426          sqabs v6.4s, v8.2s
5427          sqabs v6.2d, v8.2s
5428
5429 // CHECK-ERROR: error: invalid operand for instruction
5430 // CHECK-ERROR:         sqabs v0.16b, v31.8b
5431 // CHECK-ERROR:                       ^
5432 // CHECK-ERROR: error: invalid operand for instruction
5433 // CHECK-ERROR:         sqabs v2.8h, v4.4h
5434 // CHECK-ERROR:                      ^
5435 // CHECK-ERROR: error: invalid operand for instruction
5436 // CHECK-ERROR:         sqabs v6.4s, v8.2s
5437 // CHECK-ERROR:                      ^
5438 // CHECK-ERROR: error: invalid operand for instruction
5439 // CHECK-ERROR:         sqabs v6.2d, v8.2s
5440 // CHECK-ERROR:                      ^
5441
5442 //------------------------------------------------------------------------------
5443 // Signed integer saturating negate
5444 //------------------------------------------------------------------------------
5445
5446          sqneg v0.16b, v31.8b
5447          sqneg v2.8h, v4.4h
5448          sqneg v6.4s, v8.2s
5449          sqneg v6.2d, v8.2s
5450
5451 // CHECK-ERROR: error: invalid operand for instruction
5452 // CHECK-ERROR:         sqneg v0.16b, v31.8b
5453 // CHECK-ERROR:                       ^
5454 // CHECK-ERROR: error: invalid operand for instruction
5455 // CHECK-ERROR:         sqneg v2.8h, v4.4h
5456 // CHECK-ERROR:                      ^
5457 // CHECK-ERROR: error: invalid operand for instruction
5458 // CHECK-ERROR:         sqneg v6.4s, v8.2s
5459 // CHECK-ERROR:                      ^
5460 // CHECK-ERROR: error: invalid operand for instruction
5461 // CHECK-ERROR:         sqneg v6.2d, v8.2s
5462 // CHECK-ERROR:                      ^
5463
5464 //------------------------------------------------------------------------------
5465 // Integer absolute
5466 //------------------------------------------------------------------------------
5467
5468          abs v0.16b, v31.8b
5469          abs v2.8h, v4.4h
5470          abs v6.4s, v8.2s
5471          abs v6.2d, v8.2s
5472
5473 // CHECK-ERROR: error: invalid operand for instruction
5474 // CHECK-ERROR:         abs v0.16b, v31.8b
5475 // CHECK-ERROR:                     ^
5476 // CHECK-ERROR: error: invalid operand for instruction
5477 // CHECK-ERROR:         abs v2.8h, v4.4h
5478 // CHECK-ERROR:                    ^
5479 // CHECK-ERROR: error: invalid operand for instruction
5480 // CHECK-ERROR:         abs v6.4s, v8.2s
5481 // CHECK-ERROR:                    ^
5482 // CHECK-ERROR: error: invalid operand for instruction
5483 // CHECK-ERROR:         abs v6.2d, v8.2s
5484 // CHECK-ERROR:                    ^
5485
5486 //------------------------------------------------------------------------------
5487 // Integer count leading sign bits
5488 //------------------------------------------------------------------------------
5489
5490          cls v0.2d, v31.2d
5491
5492 // CHECK-ERROR: error: invalid operand for instruction
5493 // CHECK-ERROR:         cls v0.2d, v31.2d
5494 // CHECK-ERROR:                ^
5495
5496 //------------------------------------------------------------------------------
5497 // Integer count leading zeros
5498 //------------------------------------------------------------------------------
5499
5500          clz v0.2d, v31.2d
5501
5502 // CHECK-ERROR: error: invalid operand for instruction
5503 // CHECK-ERROR:         clz v0.2d, v31.2d
5504 // CHECK-ERROR:                ^
5505
5506 //------------------------------------------------------------------------------
5507 // Population count
5508 //------------------------------------------------------------------------------
5509
5510          cnt v2.8h, v4.8h
5511          cnt v6.4s, v8.4s
5512          cnt v6.2d, v8.2d
5513          cnt v13.4h, v21.4h
5514          cnt v4.2s, v0.2s
5515
5516 // CHECK-ERROR: error: invalid operand for instruction
5517 // CHECK-ERROR:         cnt v2.8h, v4.8h
5518 // CHECK-ERROR:                ^
5519 // CHECK-ERROR: error: invalid operand for instruction
5520 // CHECK-ERROR:         cnt v6.4s, v8.4s
5521 // CHECK-ERROR:                ^
5522 // CHECK-ERROR: error: invalid operand for instruction
5523 // CHECK-ERROR:         cnt v6.2d, v8.2d
5524 // CHECK-ERROR:                ^
5525 // CHECK-ERROR: error: invalid operand for instruction
5526 // CHECK-ERROR:         cnt v13.4h, v21.4h
5527 // CHECK-ERROR:                 ^
5528 // CHECK-ERROR: error: invalid operand for instruction
5529 // CHECK-ERROR:         cnt v4.2s, v0.2s
5530 // CHECK-ERROR:                ^
5531
5532
5533 //------------------------------------------------------------------------------
5534 // Bitwise NOT
5535 //------------------------------------------------------------------------------
5536
5537          not v2.8h, v4.8h
5538          not v6.4s, v8.4s
5539          not v6.2d, v8.2d
5540          not v13.4h, v21.4h
5541          not v4.2s, v0.2s
5542
5543 // CHECK-ERROR: error: invalid operand for instruction
5544 // CHECK-ERROR:         not v2.8h, v4.8h
5545 // CHECK-ERROR:                ^
5546 // CHECK-ERROR: error: invalid operand for instruction
5547 // CHECK-ERROR:         not v6.4s, v8.4s
5548 // CHECK-ERROR:                ^
5549 // CHECK-ERROR: error: invalid operand for instruction
5550 // CHECK-ERROR:         not v6.2d, v8.2d
5551 // CHECK-ERROR:                ^
5552 // CHECK-ERROR: error: invalid operand for instruction
5553 // CHECK-ERROR:         not v13.4h, v21.4h
5554 // CHECK-ERROR:                 ^
5555 // CHECK-ERROR: error: invalid operand for instruction
5556 // CHECK-ERROR:         not v4.2s, v0.2s
5557 // CHECK-ERROR:                ^
5558
5559 //------------------------------------------------------------------------------
5560 // Bitwise reverse
5561 //------------------------------------------------------------------------------
5562
5563          rbit v2.8h, v4.8h
5564          rbit v6.4s, v8.4s
5565          rbit v6.2d, v8.2d
5566          rbit v13.4h, v21.4h
5567          rbit v4.2s, v0.2s
5568
5569 // CHECK-ERROR: error: invalid operand for instruction
5570 // CHECK-ERROR:         rbit v2.8h, v4.8h
5571 // CHECK-ERROR:                 ^
5572 // CHECK-ERROR: error: invalid operand for instruction
5573 // CHECK-ERROR:         rbit v6.4s, v8.4s
5574 // CHECK-ERROR:                 ^
5575 // CHECK-ERROR: error: invalid operand for instruction
5576 // CHECK-ERROR:         rbit v6.2d, v8.2d
5577 // CHECK-ERROR:                 ^
5578 // CHECK-ERROR: error: invalid operand for instruction
5579 // CHECK-ERROR:         rbit v13.4h, v21.4h
5580 // CHECK-ERROR:                  ^
5581 // CHECK-ERROR: error: invalid operand for instruction
5582 // CHECK-ERROR:         rbit v4.2s, v0.2s
5583 // CHECK-ERROR:                 ^
5584
5585 //------------------------------------------------------------------------------
5586 // Floating-point absolute
5587 //------------------------------------------------------------------------------
5588
5589          fabs v0.16b, v31.16b
5590          fabs v2.8h, v4.8h
5591          fabs v1.8b, v9.8b
5592          fabs v13.4h, v21.4h
5593
5594 // CHECK-ERROR: error: invalid operand for instruction
5595 // CHECK-ERROR:         fabs v0.16b, v31.16b
5596 // CHECK-ERROR:                 ^
5597 // CHECK-ERROR: error: instruction requires: fullfp16
5598 // CHECK-ERROR:         fabs v2.8h, v4.8h
5599 // CHECK-ERROR:                 ^
5600 // CHECK-ERROR: error: invalid operand for instruction
5601 // CHECK-ERROR:         fabs v1.8b, v9.8b
5602 // CHECK-ERROR:                 ^
5603 // CHECK-ERROR: error: instruction requires: fullfp16
5604 // CHECK-ERROR:         fabs v13.4h, v21.4h
5605 // CHECK-ERROR:                  ^
5606
5607 //------------------------------------------------------------------------------
5608 // Floating-point negate
5609 //------------------------------------------------------------------------------
5610
5611          fneg v0.16b, v31.16b
5612          fneg v2.8h, v4.8h
5613          fneg v1.8b, v9.8b
5614          fneg v13.4h, v21.4h
5615
5616 // CHECK-ERROR: error: invalid operand for instruction
5617 // CHECK-ERROR:         fneg v0.16b, v31.16b
5618 // CHECK-ERROR:                 ^
5619 // CHECK-ERROR: error: instruction requires: fullfp16
5620 // CHECK-ERROR:         fneg v2.8h, v4.8h
5621 // CHECK-ERROR:                 ^
5622 // CHECK-ERROR: error: invalid operand for instruction
5623 // CHECK-ERROR:         fneg v1.8b, v9.8b
5624 // CHECK-ERROR:                 ^
5625 // CHECK-ERROR: error: instruction requires: fullfp16
5626 // CHECK-ERROR:         fneg v13.4h, v21.4h
5627 // CHECK-ERROR:                  ^
5628
5629 //------------------------------------------------------------------------------
5630 // Integer extract and narrow
5631 //------------------------------------------------------------------------------
5632
5633          xtn v0.16b, v31.8h
5634          xtn v2.8h, v4.4s
5635          xtn v6.4s, v8.2d
5636          xtn2 v1.8b, v9.8h
5637          xtn2 v13.4h, v21.4s
5638          xtn2 v4.2s, v0.2d
5639
5640 // CHECK-ERROR: error: invalid operand for instruction
5641 // CHECK-ERROR:         xtn v0.16b, v31.8h
5642 // CHECK-ERROR:             ^
5643 // CHECK-ERROR: error: invalid operand for instruction
5644 // CHECK-ERROR:         xtn v2.8h, v4.4s
5645 // CHECK-ERROR:             ^
5646 // CHECK-ERROR: error: invalid operand for instruction
5647 // CHECK-ERROR:         xtn v6.4s, v8.2d
5648 // CHECK-ERROR:             ^
5649 // CHECK-ERROR: error: invalid operand for instruction
5650 // CHECK-ERROR:         xtn2 v1.8b, v9.8h
5651 // CHECK-ERROR:              ^
5652 // CHECK-ERROR: error: invalid operand for instruction
5653 // CHECK-ERROR:         xtn2 v13.4h, v21.4s
5654 // CHECK-ERROR:              ^
5655 // CHECK-ERROR: error: invalid operand for instruction
5656 // CHECK-ERROR:         xtn2 v4.2s, v0.2d
5657 // CHECK-ERROR:              ^
5658
5659 //------------------------------------------------------------------------------
5660 // Signed integer saturating extract and unsigned narrow
5661 //------------------------------------------------------------------------------
5662
5663          sqxtun v0.16b, v31.8h
5664          sqxtun v2.8h, v4.4s
5665          sqxtun v6.4s, v8.2d
5666          sqxtun2 v1.8b, v9.8h
5667          sqxtun2 v13.4h, v21.4s
5668          sqxtun2 v4.2s, v0.2d
5669
5670 // CHECK-ERROR: error: invalid operand for instruction
5671 // CHECK-ERROR:         sqxtun v0.16b, v31.8h
5672 // CHECK-ERROR:                ^
5673 // CHECK-ERROR: error: invalid operand for instruction
5674 // CHECK-ERROR:         sqxtun v2.8h, v4.4s
5675 // CHECK-ERROR:                ^
5676 // CHECK-ERROR: error: invalid operand for instruction
5677 // CHECK-ERROR:         sqxtun v6.4s, v8.2d
5678 // CHECK-ERROR:                ^
5679 // CHECK-ERROR: error: invalid operand for instruction
5680 // CHECK-ERROR:         sqxtun2 v1.8b, v9.8h
5681 // CHECK-ERROR:                 ^
5682 // CHECK-ERROR: error: invalid operand for instruction
5683 // CHECK-ERROR:         sqxtun2 v13.4h, v21.4s
5684 // CHECK-ERROR:                 ^
5685 // CHECK-ERROR: error: invalid operand for instruction
5686 // CHECK-ERROR:         sqxtun2 v4.2s, v0.2d
5687 // CHECK-ERROR:                 ^
5688
5689 //------------------------------------------------------------------------------
5690 // Signed integer saturating extract and narrow
5691 //------------------------------------------------------------------------------
5692
5693          sqxtn v0.16b, v31.8h
5694          sqxtn v2.8h, v4.4s
5695          sqxtn v6.4s, v8.2d
5696          sqxtn2 v1.8b, v9.8h
5697          sqxtn2 v13.4h, v21.4s
5698          sqxtn2 v4.2s, v0.2d
5699
5700 // CHECK-ERROR: error: invalid operand for instruction
5701 // CHECK-ERROR:         sqxtn v0.16b, v31.8h
5702 // CHECK-ERROR:               ^
5703 // CHECK-ERROR: error: invalid operand for instruction
5704 // CHECK-ERROR:         sqxtn v2.8h, v4.4s
5705 // CHECK-ERROR:               ^
5706 // CHECK-ERROR: error: invalid operand for instruction
5707 // CHECK-ERROR:         sqxtn v6.4s, v8.2d
5708 // CHECK-ERROR:               ^
5709 // CHECK-ERROR: error: invalid operand for instruction
5710 // CHECK-ERROR:         sqxtn2 v1.8b, v9.8h
5711 // CHECK-ERROR:                ^
5712 // CHECK-ERROR: error: invalid operand for instruction
5713 // CHECK-ERROR:         sqxtn2 v13.4h, v21.4s
5714 // CHECK-ERROR:                ^
5715 // CHECK-ERROR: error: invalid operand for instruction
5716 // CHECK-ERROR:         sqxtn2 v4.2s, v0.2d
5717 // CHECK-ERROR:                ^
5718
5719 //------------------------------------------------------------------------------
5720 // Unsigned integer saturating extract and narrow
5721 //------------------------------------------------------------------------------
5722
5723          uqxtn v0.16b, v31.8h
5724          uqxtn v2.8h, v4.4s
5725          uqxtn v6.4s, v8.2d
5726          uqxtn2 v1.8b, v9.8h
5727          uqxtn2 v13.4h, v21.4s
5728          uqxtn2 v4.2s, v0.2d
5729
5730 // CHECK-ERROR: error: invalid operand for instruction
5731 // CHECK-ERROR:         uqxtn v0.16b, v31.8h
5732 // CHECK-ERROR:               ^
5733 // CHECK-ERROR: error: invalid operand for instruction
5734 // CHECK-ERROR:         uqxtn v2.8h, v4.4s
5735 // CHECK-ERROR:               ^
5736 // CHECK-ERROR: error: invalid operand for instruction
5737 // CHECK-ERROR:         uqxtn v6.4s, v8.2d
5738 // CHECK-ERROR:               ^
5739 // CHECK-ERROR: error: invalid operand for instruction
5740 // CHECK-ERROR:         uqxtn2 v1.8b, v9.8h
5741 // CHECK-ERROR:                ^
5742 // CHECK-ERROR: error: invalid operand for instruction
5743 // CHECK-ERROR:         uqxtn2 v13.4h, v21.4s
5744 // CHECK-ERROR:                ^
5745 // CHECK-ERROR: error: invalid operand for instruction
5746 // CHECK-ERROR:         uqxtn2 v4.2s, v0.2d
5747 // CHECK-ERROR:                ^
5748
5749 //------------------------------------------------------------------------------
5750 // Integer shift left long
5751 //------------------------------------------------------------------------------
5752
5753          shll2 v2.8h, v4.16b, #7
5754          shll2 v6.4s, v8.8h, #15
5755          shll2 v6.2d, v8.4s, #31
5756          shll v2.8h, v4.16b, #8
5757          shll v6.4s, v8.8h, #16
5758          shll v6.2d, v8.4s, #32
5759          shll v2.8h, v4.8b, #8
5760          shll v6.4s, v8.4h, #16
5761          shll v6.2d, v8.2s, #32
5762          shll2 v2.8h, v4.8b, #5
5763          shll2 v6.4s, v8.4h, #14
5764          shll2 v6.2d, v8.2s, #1
5765
5766 // CHECK-ERROR: error: invalid operand for instruction
5767 // CHECK-ERROR:         shll2 v2.8h, v4.16b, #7
5768 // CHECK-ERROR:                              ^
5769 // CHECK-ERROR: error: invalid operand for instruction
5770 // CHECK-ERROR:         shll2 v6.4s, v8.8h, #15
5771 // CHECK-ERROR:                             ^
5772 // CHECK-ERROR: error: invalid operand for instruction
5773 // CHECK-ERROR:         shll2 v6.2d, v8.4s, #31
5774 // CHECK-ERROR:                             ^
5775 // CHECK-ERROR: error: invalid operand for instruction
5776 // CHECK-ERROR:         shll v2.8h, v4.16b, #8
5777 // CHECK-ERROR:                     ^
5778 // CHECK-ERROR: error: invalid operand for instruction
5779 // CHECK-ERROR:         shll v6.4s, v8.8h, #16
5780 // CHECK-ERROR:                     ^
5781 // CHECK-ERROR: error: invalid operand for instruction
5782 // CHECK-ERROR:         shll v6.2d, v8.4s, #32
5783 // CHECK-ERROR:                     ^
5784 // CHECK-ERROR: error: invalid operand for instruction
5785 // CHECK-ERROR:         shll2 v2.8h, v4.8b, #5
5786 // CHECK-ERROR:                      ^
5787 // CHECK-ERROR: error: invalid operand for instruction
5788 // CHECK-ERROR:         shll2 v6.4s, v8.4h, #14
5789 // CHECK-ERROR:                      ^
5790 // CHECK-ERROR: error: invalid operand for instruction
5791 // CHECK-ERROR:         shll2 v6.2d, v8.2s, #1
5792 // CHECK-ERROR:                      ^
5793
5794 //------------------------------------------------------------------------------
5795 // Floating-point convert downsize
5796 //------------------------------------------------------------------------------
5797
5798          fcvtn v2.8h, v4.4s
5799          fcvtn v6.4s, v8.2d
5800          fcvtn2 v13.4h, v21.4s
5801          fcvtn2 v4.2s, v0.2d
5802
5803 // CHECK-ERROR: error: invalid operand for instruction
5804 // CHECK-ERROR:         fcvtn v2.8h, v4.4s
5805 // CHECK-ERROR:               ^
5806 // CHECK-ERROR: error: invalid operand for instruction
5807 // CHECK-ERROR:         fcvtn v6.4s, v8.2d
5808 // CHECK-ERROR:               ^
5809 // CHECK-ERROR: error: invalid operand for instruction
5810 // CHECK-ERROR:         fcvtn2 v13.4h, v21.4s
5811 // CHECK-ERROR:                ^
5812 // CHECK-ERROR: error: invalid operand for instruction
5813 // CHECK-ERROR:         fcvtn2 v4.2s, v0.2d
5814 // CHECK-ERROR:                ^
5815
5816 //------------------------------------------------------------------------------
5817 // Floating-point convert downsize with inexact
5818 //------------------------------------------------------------------------------
5819
5820          fcvtxn v6.4s, v8.2d
5821          fcvtxn2 v4.2s, v0.2d
5822
5823 // CHECK-ERROR: error: invalid operand for instruction
5824 // CHECK-ERROR:         fcvtxn v6.4s, v8.2d
5825 // CHECK-ERROR:                ^
5826 // CHECK-ERROR: error: invalid operand for instruction
5827 // CHECK-ERROR:         fcvtxn2 v4.2s, v0.2d
5828 // CHECK-ERROR:                 ^
5829
5830 //------------------------------------------------------------------------------
5831 // Floating-point convert upsize
5832 //------------------------------------------------------------------------------
5833
5834          fcvtl2 v9.4s, v1.4h
5835          fcvtl2 v0.2d, v1.2s
5836          fcvtl v12.4s, v4.8h
5837          fcvtl v17.2d, v28.4s
5838
5839 // CHECK-ERROR: error: invalid operand for instruction
5840 // CHECK-ERROR:         fcvtl2 v9.4s, v1.4h
5841 // CHECK-ERROR:                       ^
5842 // CHECK-ERROR: error: invalid operand for instruction
5843 // CHECK-ERROR:         fcvtl2 v0.2d, v1.2s
5844 // CHECK-ERROR:                       ^
5845 // CHECK-ERROR: error: invalid operand for instruction
5846 // CHECK-ERROR:         fcvtl v12.4s, v4.8h
5847 // CHECK-ERROR:                       ^
5848 // CHECK-ERROR: error: invalid operand for instruction
5849 // CHECK-ERROR:         fcvtl v17.2d, v28.4s
5850 // CHECK-ERROR:                       ^
5851
5852 //------------------------------------------------------------------------------
5853 // Floating-point round to integral
5854 //------------------------------------------------------------------------------
5855
5856          frintn v0.16b, v31.16b
5857          frintn v2.8h, v4.8h
5858          frintn v1.8b, v9.8b
5859          frintn v13.4h, v21.4h
5860
5861          frinta v0.16b, v31.16b
5862          frinta v2.8h, v4.8h
5863          frinta v1.8b, v9.8b
5864          frinta v13.4h, v21.4h
5865
5866          frintp v0.16b, v31.16b
5867          frintp v2.8h, v4.8h
5868          frintp v1.8b, v9.8b
5869          frintp v13.4h, v21.4h
5870
5871          frintm v0.16b, v31.16b
5872          frintm v2.8h, v4.8h
5873          frintm v1.8b, v9.8b
5874          frintm v13.4h, v21.4h
5875
5876          frintx v0.16b, v31.16b
5877          frintx v2.8h, v4.8h
5878          frintx v1.8b, v9.8b
5879          frintx v13.4h, v21.4h
5880
5881          frintz v0.16b, v31.16b
5882          frintz v2.8h, v4.8h
5883          frintz v1.8b, v9.8b
5884          frintz v13.4h, v21.4h
5885
5886          frinti v0.16b, v31.16b
5887          frinti v2.8h, v4.8h
5888          frinti v1.8b, v9.8b
5889          frinti v13.4h, v21.4h
5890
5891          fcvtns v0.16b, v31.16b
5892          fcvtns v2.8h, v4.8h
5893          fcvtns v1.8b, v9.8b
5894          fcvtns v13.4h, v21.4h
5895
5896          fcvtnu v0.16b, v31.16b
5897          fcvtnu v2.8h, v4.8h
5898          fcvtnu v1.8b, v9.8b
5899          fcvtnu v13.4h, v21.4h
5900
5901          fcvtps v0.16b, v31.16b
5902          fcvtps v2.8h, v4.8h
5903          fcvtps v1.8b, v9.8b
5904          fcvtps v13.4h, v21.4h
5905
5906          fcvtpu v0.16b, v31.16b
5907          fcvtpu v2.8h, v4.8h
5908          fcvtpu v1.8b, v9.8b
5909          fcvtpu v13.4h, v21.4h
5910
5911          fcvtms v0.16b, v31.16b
5912          fcvtms v2.8h, v4.8h
5913          fcvtms v1.8b, v9.8b
5914          fcvtms v13.4h, v21.4h
5915
5916          fcvtmu v0.16b, v31.16b
5917          fcvtmu v2.8h, v4.8h
5918          fcvtmu v1.8b, v9.8b
5919          fcvtmu v13.4h, v21.4h
5920
5921          fcvtzs v0.16b, v31.16b
5922          fcvtzs v2.8h, v4.8h
5923          fcvtzs v1.8b, v9.8b
5924          fcvtzs v13.4h, v21.4h
5925
5926          fcvtzu v0.16b, v31.16b
5927          fcvtzu v2.8h, v4.8h
5928          fcvtzu v1.8b, v9.8b
5929          fcvtzu v13.4h, v21.4h
5930
5931          fcvtas v0.16b, v31.16b
5932          fcvtas v2.8h, v4.8h
5933          fcvtas v1.8b, v9.8b
5934          fcvtas v13.4h, v21.4h
5935
5936          fcvtau v0.16b, v31.16b
5937          fcvtau v2.8h, v4.8h
5938          fcvtau v1.8b, v9.8b
5939          fcvtau v13.4h, v21.4h
5940
5941          urecpe v0.16b, v31.16b
5942          urecpe v2.8h, v4.8h
5943          urecpe v1.8b, v9.8b
5944          urecpe v13.4h, v21.4h
5945          urecpe v1.2d, v9.2d
5946
5947          ursqrte v0.16b, v31.16b
5948          ursqrte v2.8h, v4.8h
5949          ursqrte v1.8b, v9.8b
5950          ursqrte v13.4h, v21.4h
5951          ursqrte v1.2d, v9.2d
5952
5953          scvtf v0.16b, v31.16b
5954          scvtf v2.8h, v4.8h
5955          scvtf v1.8b, v9.8b
5956          scvtf v13.4h, v21.4h
5957
5958          ucvtf v0.16b, v31.16b
5959          ucvtf v2.8h, v4.8h
5960          ucvtf v1.8b, v9.8b
5961          ucvtf v13.4h, v21.4h
5962
5963          frecpe v0.16b, v31.16b
5964          frecpe v2.8h, v4.8h
5965          frecpe v1.8b, v9.8b
5966          frecpe v13.4h, v21.4h
5967
5968          frsqrte v0.16b, v31.16b
5969          frsqrte v2.8h, v4.8h
5970          frsqrte v1.8b, v9.8b
5971          frsqrte v13.4h, v21.4h
5972
5973          fsqrt v0.16b, v31.16b
5974          fsqrt v2.8h, v4.8h
5975          fsqrt v1.8b, v9.8b
5976          fsqrt v13.4h, v21.4h
5977
5978 // CHECK-ERROR: error: invalid operand for instruction
5979 // CHECK-ERROR:         frintn v0.16b, v31.16b
5980 // CHECK-ERROR:                   ^
5981 // CHECK-ERROR: error: instruction requires: fullfp16
5982 // CHECK-ERROR:         frintn v2.8h, v4.8h
5983 // CHECK-ERROR:                   ^
5984 // CHECK-ERROR: error: invalid operand for instruction
5985 // CHECK-ERROR:         frintn v1.8b, v9.8b
5986 // CHECK-ERROR:                   ^
5987 // CHECK-ERROR: error: instruction requires: fullfp16
5988 // CHECK-ERROR:         frintn v13.4h, v21.4h
5989 // CHECK-ERROR:                    ^
5990 // CHECK-ERROR: error: invalid operand for instruction
5991 // CHECK-ERROR:         frinta v0.16b, v31.16b
5992 // CHECK-ERROR:                   ^
5993 // CHECK-ERROR: error: instruction requires: fullfp16
5994 // CHECK-ERROR:         frinta v2.8h, v4.8h
5995 // CHECK-ERROR:                   ^
5996 // CHECK-ERROR: error: invalid operand for instruction
5997 // CHECK-ERROR:         frinta v1.8b, v9.8b
5998 // CHECK-ERROR:                   ^
5999 // CHECK-ERROR: error: instruction requires: fullfp16
6000 // CHECK-ERROR:         frinta v13.4h, v21.4h
6001 // CHECK-ERROR:                    ^
6002 // CHECK-ERROR: error: invalid operand for instruction
6003 // CHECK-ERROR:         frintp v0.16b, v31.16b
6004 // CHECK-ERROR:                   ^
6005 // CHECK-ERROR: error: instruction requires: fullfp16
6006 // CHECK-ERROR:         frintp v2.8h, v4.8h
6007 // CHECK-ERROR:                   ^
6008 // CHECK-ERROR: error: invalid operand for instruction
6009 // CHECK-ERROR:         frintp v1.8b, v9.8b
6010 // CHECK-ERROR:                   ^
6011 // CHECK-ERROR: error: instruction requires: fullfp16
6012 // CHECK-ERROR:         frintp v13.4h, v21.4h
6013 // CHECK-ERROR:                    ^
6014 // CHECK-ERROR: error: invalid operand for instruction
6015 // CHECK-ERROR:         frintm v0.16b, v31.16b
6016 // CHECK-ERROR:                   ^
6017 // CHECK-ERROR: error: instruction requires: fullfp16
6018 // CHECK-ERROR:         frintm v2.8h, v4.8h
6019 // CHECK-ERROR:                   ^
6020 // CHECK-ERROR: error: invalid operand for instruction
6021 // CHECK-ERROR:         frintm v1.8b, v9.8b
6022 // CHECK-ERROR:                   ^
6023 // CHECK-ERROR: error: instruction requires: fullfp16
6024 // CHECK-ERROR:         frintm v13.4h, v21.4h
6025 // CHECK-ERROR:                    ^
6026 // CHECK-ERROR: error: invalid operand for instruction
6027 // CHECK-ERROR:         frintx v0.16b, v31.16b
6028 // CHECK-ERROR:                   ^
6029 // CHECK-ERROR: error: instruction requires: fullfp16
6030 // CHECK-ERROR:         frintx v2.8h, v4.8h
6031 // CHECK-ERROR:                   ^
6032 // CHECK-ERROR: error: invalid operand for instruction
6033 // CHECK-ERROR:         frintx v1.8b, v9.8b
6034 // CHECK-ERROR:                   ^
6035 // CHECK-ERROR: error: instruction requires: fullfp16
6036 // CHECK-ERROR:         frintx v13.4h, v21.4h
6037 // CHECK-ERROR:                    ^
6038 // CHECK-ERROR: error: invalid operand for instruction
6039 // CHECK-ERROR:         frintz v0.16b, v31.16b
6040 // CHECK-ERROR:                   ^
6041 // CHECK-ERROR: error: instruction requires: fullfp16
6042 // CHECK-ERROR:         frintz v2.8h, v4.8h
6043 // CHECK-ERROR:                   ^
6044 // CHECK-ERROR: error: invalid operand for instruction
6045 // CHECK-ERROR:         frintz v1.8b, v9.8b
6046 // CHECK-ERROR:                   ^
6047 // CHECK-ERROR: error: instruction requires: fullfp16
6048 // CHECK-ERROR:         frintz v13.4h, v21.4h
6049 // CHECK-ERROR:                    ^
6050 // CHECK-ERROR: error: invalid operand for instruction
6051 // CHECK-ERROR:         frinti v0.16b, v31.16b
6052 // CHECK-ERROR:                   ^
6053 // CHECK-ERROR: error: instruction requires: fullfp16
6054 // CHECK-ERROR:         frinti v2.8h, v4.8h
6055 // CHECK-ERROR:                   ^
6056 // CHECK-ERROR: error: invalid operand for instruction
6057 // CHECK-ERROR:         frinti v1.8b, v9.8b
6058 // CHECK-ERROR:                   ^
6059 // CHECK-ERROR: error: instruction requires: fullfp16
6060 // CHECK-ERROR:         frinti v13.4h, v21.4h
6061 // CHECK-ERROR:                    ^
6062 // CHECK-ERROR: error: invalid operand for instruction
6063 // CHECK-ERROR:         fcvtns v0.16b, v31.16b
6064 // CHECK-ERROR:                   ^
6065 // CHECK-ERROR: error: instruction requires: fullfp16
6066 // CHECK-ERROR:         fcvtns v2.8h, v4.8h
6067 // CHECK-ERROR:                   ^
6068 // CHECK-ERROR: error: invalid operand for instruction
6069 // CHECK-ERROR:         fcvtns v1.8b, v9.8b
6070 // CHECK-ERROR:                   ^
6071 // CHECK-ERROR: error: instruction requires: fullfp16
6072 // CHECK-ERROR:         fcvtns v13.4h, v21.4h
6073 // CHECK-ERROR:                    ^
6074 // CHECK-ERROR: error: invalid operand for instruction
6075 // CHECK-ERROR:         fcvtnu v0.16b, v31.16b
6076 // CHECK-ERROR:                   ^
6077 // CHECK-ERROR: error: instruction requires: fullfp16
6078 // CHECK-ERROR:         fcvtnu v2.8h, v4.8h
6079 // CHECK-ERROR:                   ^
6080 // CHECK-ERROR: error: invalid operand for instruction
6081 // CHECK-ERROR:         fcvtnu v1.8b, v9.8b
6082 // CHECK-ERROR:                   ^
6083 // CHECK-ERROR: error: instruction requires: fullfp16
6084 // CHECK-ERROR:         fcvtnu v13.4h, v21.4h
6085 // CHECK-ERROR:                    ^
6086 // CHECK-ERROR: error: invalid operand for instruction
6087 // CHECK-ERROR:         fcvtps v0.16b, v31.16b
6088 // CHECK-ERROR:                   ^
6089 // CHECK-ERROR: error: instruction requires: fullfp16
6090 // CHECK-ERROR:         fcvtps v2.8h, v4.8h
6091 // CHECK-ERROR:                   ^
6092 // CHECK-ERROR: error: invalid operand for instruction
6093 // CHECK-ERROR:         fcvtps v1.8b, v9.8b
6094 // CHECK-ERROR:                   ^
6095 // CHECK-ERROR: error: instruction requires: fullfp16
6096 // CHECK-ERROR:         fcvtps v13.4h, v21.4h
6097 // CHECK-ERROR:                    ^
6098 // CHECK-ERROR: error: invalid operand for instruction
6099 // CHECK-ERROR:         fcvtpu v0.16b, v31.16b
6100 // CHECK-ERROR:                   ^
6101 // CHECK-ERROR: error: instruction requires: fullfp16
6102 // CHECK-ERROR:         fcvtpu v2.8h, v4.8h
6103 // CHECK-ERROR:                   ^
6104 // CHECK-ERROR: error: invalid operand for instruction
6105 // CHECK-ERROR:         fcvtpu v1.8b, v9.8b
6106 // CHECK-ERROR:                   ^
6107 // CHECK-ERROR: error: instruction requires: fullfp16
6108 // CHECK-ERROR:         fcvtpu v13.4h, v21.4h
6109 // CHECK-ERROR:                    ^
6110 // CHECK-ERROR: error: invalid operand for instruction
6111 // CHECK-ERROR:         fcvtms v0.16b, v31.16b
6112 // CHECK-ERROR:                   ^
6113 // CHECK-ERROR: error: instruction requires: fullfp16
6114 // CHECK-ERROR:         fcvtms v2.8h, v4.8h
6115 // CHECK-ERROR:                   ^
6116 // CHECK-ERROR: error: invalid operand for instruction
6117 // CHECK-ERROR:         fcvtms v1.8b, v9.8b
6118 // CHECK-ERROR:                   ^
6119 // CHECK-ERROR: error: instruction requires: fullfp16
6120 // CHECK-ERROR:         fcvtms v13.4h, v21.4h
6121 // CHECK-ERROR:                    ^
6122 // CHECK-ERROR: error: invalid operand for instruction
6123 // CHECK-ERROR:         fcvtmu v0.16b, v31.16b
6124 // CHECK-ERROR:                   ^
6125 // CHECK-ERROR: error: instruction requires: fullfp16
6126 // CHECK-ERROR:         fcvtmu v2.8h, v4.8h
6127 // CHECK-ERROR:                   ^
6128 // CHECK-ERROR: error: invalid operand for instruction
6129 // CHECK-ERROR:         fcvtmu v1.8b, v9.8b
6130 // CHECK-ERROR:                   ^
6131 // CHECK-ERROR: error: instruction requires: fullfp16
6132 // CHECK-ERROR:         fcvtmu v13.4h, v21.4h
6133 // CHECK-ERROR:                    ^
6134 // CHECK-ERROR: error: invalid operand for instruction
6135 // CHECK-ERROR:         fcvtzs v0.16b, v31.16b
6136 // CHECK-ERROR:                   ^
6137 // CHECK-ERROR: error: instruction requires: fullfp16
6138 // CHECK-ERROR:         fcvtzs v2.8h, v4.8h
6139 // CHECK-ERROR:                   ^
6140 // CHECK-ERROR: error: invalid operand for instruction
6141 // CHECK-ERROR:         fcvtzs v1.8b, v9.8b
6142 // CHECK-ERROR:                   ^
6143 // CHECK-ERROR: error: instruction requires: fullfp16
6144 // CHECK-ERROR:         fcvtzs v13.4h, v21.4h
6145 // CHECK-ERROR:                    ^
6146 // CHECK-ERROR: error: invalid operand for instruction
6147 // CHECK-ERROR:         fcvtzu v0.16b, v31.16b
6148 // CHECK-ERROR:                   ^
6149 // CHECK-ERROR: error: instruction requires: fullfp16
6150 // CHECK-ERROR:         fcvtzu v2.8h, v4.8h
6151 // CHECK-ERROR:                   ^
6152 // CHECK-ERROR: error: invalid operand for instruction
6153 // CHECK-ERROR:         fcvtzu v1.8b, v9.8b
6154 // CHECK-ERROR:                   ^
6155 // CHECK-ERROR: error: instruction requires: fullfp16
6156 // CHECK-ERROR:         fcvtzu v13.4h, v21.4h
6157 // CHECK-ERROR:                    ^
6158 // CHECK-ERROR: error: invalid operand for instruction
6159 // CHECK-ERROR:         fcvtas v0.16b, v31.16b
6160 // CHECK-ERROR:                   ^
6161 // CHECK-ERROR: error: instruction requires: fullfp16
6162 // CHECK-ERROR:         fcvtas v2.8h, v4.8h
6163 // CHECK-ERROR:                   ^
6164 // CHECK-ERROR: error: invalid operand for instruction
6165 // CHECK-ERROR:         fcvtas v1.8b, v9.8b
6166 // CHECK-ERROR:                   ^
6167 // CHECK-ERROR: error: instruction requires: fullfp16
6168 // CHECK-ERROR:         fcvtas v13.4h, v21.4h
6169 // CHECK-ERROR:                    ^
6170 // CHECK-ERROR: error: invalid operand for instruction
6171 // CHECK-ERROR:         fcvtau v0.16b, v31.16b
6172 // CHECK-ERROR:                   ^
6173 // CHECK-ERROR: error: instruction requires: fullfp16
6174 // CHECK-ERROR:         fcvtau v2.8h, v4.8h
6175 // CHECK-ERROR:                   ^
6176 // CHECK-ERROR: error: invalid operand for instruction
6177 // CHECK-ERROR:         fcvtau v1.8b, v9.8b
6178 // CHECK-ERROR:                   ^
6179 // CHECK-ERROR: error: instruction requires: fullfp16
6180 // CHECK-ERROR:         fcvtau v13.4h, v21.4h
6181 // CHECK-ERROR:                    ^
6182 // CHECK-ERROR: error: invalid operand for instruction
6183 // CHECK-ERROR:         urecpe v0.16b, v31.16b
6184 // CHECK-ERROR:                   ^
6185 // CHECK-ERROR: error: invalid operand for instruction
6186 // CHECK-ERROR:         urecpe v2.8h, v4.8h
6187 // CHECK-ERROR:                   ^
6188 // CHECK-ERROR: error: invalid operand for instruction
6189 // CHECK-ERROR:         urecpe v1.8b, v9.8b
6190 // CHECK-ERROR:                   ^
6191 // CHECK-ERROR: error: invalid operand for instruction
6192 // CHECK-ERROR:         urecpe v13.4h, v21.4h
6193 // CHECK-ERROR:                    ^
6194 // CHECK-ERROR: error: invalid operand for instruction
6195 // CHECK-ERROR:         urecpe v1.2d, v9.2d
6196 // CHECK-ERROR:                   ^
6197 // CHECK-ERROR: error: invalid operand for instruction
6198 // CHECK-ERROR:         ursqrte v0.16b, v31.16b
6199 // CHECK-ERROR:                    ^
6200 // CHECK-ERROR: error: invalid operand for instruction
6201 // CHECK-ERROR:         ursqrte v2.8h, v4.8h
6202 // CHECK-ERROR:                    ^
6203 // CHECK-ERROR: error: invalid operand for instruction
6204 // CHECK-ERROR:         ursqrte v1.8b, v9.8b
6205 // CHECK-ERROR:                    ^
6206 // CHECK-ERROR: error: invalid operand for instruction
6207 // CHECK-ERROR:         ursqrte v13.4h, v21.4h
6208 // CHECK-ERROR:                     ^
6209 // CHECK-ERROR: error: invalid operand for instruction
6210 // CHECK-ERROR:         ursqrte v1.2d, v9.2d
6211 // CHECK-ERROR:                    ^
6212 // CHECK-ERROR: error: invalid operand for instruction
6213 // CHECK-ERROR:         scvtf v0.16b, v31.16b
6214 // CHECK-ERROR:                  ^
6215 // CHECK-ERROR: error: instruction requires: fullfp16
6216 // CHECK-ERROR:         scvtf v2.8h, v4.8h
6217 // CHECK-ERROR:                  ^
6218 // CHECK-ERROR: error: invalid operand for instruction
6219 // CHECK-ERROR:         scvtf v1.8b, v9.8b
6220 // CHECK-ERROR:                  ^
6221 // CHECK-ERROR: error: instruction requires: fullfp16
6222 // CHECK-ERROR:         scvtf v13.4h, v21.4h
6223 // CHECK-ERROR:                   ^
6224 // CHECK-ERROR: error: invalid operand for instruction
6225 // CHECK-ERROR:         ucvtf v0.16b, v31.16b
6226 // CHECK-ERROR:                  ^
6227 // CHECK-ERROR: error: instruction requires: fullfp16
6228 // CHECK-ERROR:         ucvtf v2.8h, v4.8h
6229 // CHECK-ERROR:                  ^
6230 // CHECK-ERROR: error: invalid operand for instruction
6231 // CHECK-ERROR:         ucvtf v1.8b, v9.8b
6232 // CHECK-ERROR:                  ^
6233 // CHECK-ERROR: error: instruction requires: fullfp16
6234 // CHECK-ERROR:         ucvtf v13.4h, v21.4h
6235 // CHECK-ERROR:                   ^
6236 // CHECK-ERROR: error: invalid operand for instruction
6237 // CHECK-ERROR:         frecpe v0.16b, v31.16b
6238 // CHECK-ERROR:                   ^
6239 // CHECK-ERROR: error: instruction requires: fullfp16
6240 // CHECK-ERROR:         frecpe v2.8h, v4.8h
6241 // CHECK-ERROR:                   ^
6242 // CHECK-ERROR: error: invalid operand for instruction
6243 // CHECK-ERROR:         frecpe v1.8b, v9.8b
6244 // CHECK-ERROR:                   ^
6245 // CHECK-ERROR: error: instruction requires: fullfp16
6246 // CHECK-ERROR:         frecpe v13.4h, v21.4h
6247 // CHECK-ERROR:                    ^
6248 // CHECK-ERROR: error: invalid operand for instruction
6249 // CHECK-ERROR:         frsqrte v0.16b, v31.16b
6250 // CHECK-ERROR:                    ^
6251 // CHECK-ERROR: error: instruction requires: fullfp16
6252 // CHECK-ERROR:         frsqrte v2.8h, v4.8h
6253 // CHECK-ERROR:                    ^
6254 // CHECK-ERROR: error: invalid operand for instruction
6255 // CHECK-ERROR:         frsqrte v1.8b, v9.8b
6256 // CHECK-ERROR:                    ^
6257 // CHECK-ERROR: error: instruction requires: fullfp16
6258 // CHECK-ERROR:         frsqrte v13.4h, v21.4h
6259 // CHECK-ERROR:                     ^
6260 // CHECK-ERROR: error: invalid operand for instruction
6261 // CHECK-ERROR:         fsqrt v0.16b, v31.16b
6262 // CHECK-ERROR:                  ^
6263 // CHECK-ERROR: error: instruction requires: fullfp16
6264 // CHECK-ERROR:         fsqrt v2.8h, v4.8h
6265 // CHECK-ERROR:                  ^
6266 // CHECK-ERROR: error: invalid operand for instruction
6267 // CHECK-ERROR:         fsqrt v1.8b, v9.8b
6268 // CHECK-ERROR:                  ^
6269 // CHECK-ERROR: error: instruction requires: fullfp16
6270 // CHECK-ERROR:         fsqrt v13.4h, v21.4h
6271 // CHECK-ERROR:                   ^
6272
6273 //----------------------------------------------------------------------
6274 // Scalar Floating-point Convert To Signed Fixed-point (Immediate)
6275 //----------------------------------------------------------------------
6276
6277     fcvtzs s21, s12, #0
6278     fcvtzs d21, d12, #65
6279     fcvtzs s21, d12, #1
6280
6281 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
6282 // CHECK-ERROR:        fcvtzs s21, s12, #0
6283 // CHECK-ERROR:                         ^
6284 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
6285 // CHECK-ERROR:        fcvtzs d21, d12, #65
6286 // CHECK-ERROR:                         ^
6287 // CHECK-ERROR: error: invalid operand for instruction
6288 // CHECK-ERROR:        fcvtzs s21, d12, #1
6289 // CHECK-ERROR:                    ^
6290
6291 //----------------------------------------------------------------------
6292 // Scalar Floating-point Convert To Unsigned Fixed-point (Immediate)
6293 //----------------------------------------------------------------------
6294
6295     fcvtzu s21, s12, #33
6296     fcvtzu d21, d12, #0
6297     fcvtzu s21, d12, #1
6298
6299 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 32]
6300 // CHECK-ERROR:        fcvtzu s21, s12, #33
6301 // CHECK-ERROR:                         ^
6302 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [1, 64]
6303 // CHECK-ERROR:        fcvtzu d21, d12, #0
6304 // CHECK-ERROR:                         ^
6305 // CHECK-ERROR: error: invalid operand for instruction
6306 // CHECK-ERROR:        fcvtzu s21, d12, #1
6307 // CHECK-ERROR:                    ^
6308
6309 //----------------------------------------------------------------------
6310 // Scalar Unsigned Saturating Extract Narrow
6311 //----------------------------------------------------------------------
6312
6313         aese v0.8h, v1.8h
6314         aese v0.4s, v1.4s
6315         aese v0.2d, v1.2d
6316         aesd v0.8h, v1.8h
6317         aesmc v0.8h, v1.8h
6318         aesimc v0.8h, v1.8h
6319
6320 // CHECK:  error: invalid operand for instruction
6321 // CHECK:         aese v0.8h, v1.8h
6322 // CHECK:                 ^
6323 // CHECK:  error: invalid operand for instruction
6324 // CHECK:         aese v0.4s, v1.4s
6325 // CHECK:                 ^
6326 // CHECK:  error: invalid operand for instruction
6327 // CHECK:         aese v0.2d, v1.2d
6328 // CHECK:                 ^
6329 // CHECK:  error: invalid operand for instruction
6330 // CHECK:         aesd v0.8h, v1.8h
6331 // CHECK:                 ^
6332 // CHECK:  error: invalid operand for instruction
6333 // CHECK:         aesmc v0.8h, v1.8h
6334 // CHECK:                  ^
6335 // CHECK:  error: invalid operand for instruction
6336 // CHECK:         aesimc v0.8h, v1.8h
6337 // CHECK:                   ^
6338
6339         sha1h b0, b1
6340         sha1h h0, h1
6341         sha1h d0, d1
6342         sha1h q0, q1
6343         sha1su1 v0.16b, v1.16b
6344         sha1su1 v0.8h, v1.8h
6345         sha1su1 v0.2d, v1.2d
6346         sha256su0 v0.16b, v1.16b
6347
6348 // CHECK:  error: invalid operand for instruction
6349 // CHECK:         sha1h b0, b1
6350 // CHECK:               ^
6351 // CHECK:  error: invalid operand for instruction
6352 // CHECK:         sha1h h0, h1
6353 // CHECK:               ^
6354 // CHECK:  error: invalid operand for instruction
6355 // CHECK:         sha1h d0, d1
6356 // CHECK:               ^
6357 // CHECK:  error: invalid operand for instruction
6358 // CHECK:         sha1h q0, q1
6359 // CHECK:               ^
6360 // CHECK:  error: invalid operand for instruction
6361 // CHECK:         sha1su1 v0.16b, v1.16b
6362 // CHECK:                    ^
6363 // CHECK:  error: invalid operand for instruction
6364 // CHECK:         sha1su1 v0.8h, v1.8h
6365 // CHECK:                    ^
6366 // CHECK:  error: invalid operand for instruction
6367 // CHECK:         sha1su1 v0.2d, v1.2d
6368 // CHECK:                    ^
6369 // CHECK:  error: invalid operand for instruction
6370 // CHECK:         sha256su0 v0.16b, v1.16b
6371 // CHECK:                      ^
6372
6373         sha1c q0, q1, v2.4s
6374         sha1p q0, q1, v2.4s
6375         sha1m q0, q1, v2.4s
6376         sha1su0 v0.16b, v1.16b, v2.16b
6377         sha1su0 v0.8h, v1.8h, v2.8h
6378         sha1su0 v0.2d, v1.2d, v2.2d
6379         sha256h q0, q1, q2
6380         sha256h v0.4s, v1.4s, v2.4s
6381         sha256h2 q0, q1, q2
6382         sha256su1 v0.16b, v1.16b, v2.16b
6383
6384 // CHECK:  error: invalid operand for instruction
6385 // CHECK:         sha1c q0, q1, v2.4s
6386 // CHECK:                   ^
6387 // CHECK:  error: invalid operand for instruction
6388 // CHECK:         sha1p q0, q1, v2.4s
6389 // CHECK:                   ^
6390 // CHECK:  error: invalid operand for instruction
6391 // CHECK:         sha1m q0, q1, v2.4s
6392 // CHECK:                   ^
6393 // CHECK:  error: invalid operand for instruction
6394 // CHECK:         sha1su0 v0.16b, v1.16b, v2.16b
6395 // CHECK:                    ^
6396 // CHECK:  error: invalid operand for instruction
6397 // CHECK:         sha1su0 v0.8h, v1.8h, v2.8h
6398 // CHECK:                    ^
6399 // CHECK:  error: invalid operand for instruction
6400 // CHECK:         sha1su0 v0.2d, v1.2d, v2.2d
6401 // CHECK:                    ^
6402 // CHECK:  error: too few operands for instruction
6403 // CHECK:         sha256h q0, q1, q2
6404 // CHECK:         ^
6405 // CHECK:  error: invalid operand for instruction
6406 // CHECK:         sha256h v0.4s, v1.4s, v2.4s
6407 // CHECK:                    ^
6408 // CHECK:  error: too few operands for instruction
6409 // CHECK:         sha256h2 q0, q1, q2
6410 // CHECK:         ^
6411 // CHECK:  error: invalid operand for instruction
6412 // CHECK:         sha256su1 v0.16b, v1.16b, v2.16b
6413 // CHECK:                      ^
6414
6415 //----------------------------------------------------------------------
6416 // Bitwise extract
6417 //----------------------------------------------------------------------
6418
6419         ext v0.8b, v1.8b, v2.4h, #0x3
6420         ext v0.4h, v1.4h, v2.4h, #0x3
6421         ext v0.2s, v1.2s, v2.2s, #0x1
6422         ext v0.1d, v1.1d, v2.1d, #0x0
6423
6424 // CHECK-ERROR: error: invalid operand for instruction
6425 // CHECK-ERROR:         ext v0.8b, v1.8b, v2.4h, #0x3
6426 // CHECK-ERROR:                              ^
6427 // CHECK-ERROR: error: invalid operand for instruction
6428 // CHECK-ERROR:         ext v0.4h, v1.4h, v2.4h, #0x3
6429 // CHECK-ERROR:                ^
6430 // CHECK-ERROR: error: invalid operand for instruction
6431 // CHECK-ERROR:         ext v0.2s, v1.2s, v2.2s, #0x1
6432 // CHECK-ERROR:                ^
6433 // CHECK-ERROR: error: invalid operand for instruction
6434 // CHECK-ERROR:         ext v0.1d, v1.1d, v2.1d, #0x0
6435 // CHECK-ERROR:                ^
6436
6437         ext v0.16b, v1.16b, v2.8h, #0x3
6438         ext v0.8h, v1.8h, v2.8h, #0x3
6439         ext v0.4s, v1.4s, v2.4s, #0x1
6440         ext v0.2d, v1.2d, v2.2d, #0x0
6441
6442 // CHECK-ERROR: error: invalid operand for instruction
6443 // CHECK-ERROR:         ext v0.16b, v1.16b, v2.8h, #0x3
6444 // CHECK-ERROR:                                ^
6445 // CHECK-ERROR: error: invalid operand for instruction
6446 // CHECK-ERROR:         ext v0.8h, v1.8h, v2.8h, #0x3
6447 // CHECK-ERROR:                ^
6448 // CHECK-ERROR: error: invalid operand for instruction
6449 // CHECK-ERROR:         ext v0.4s, v1.4s, v2.4s, #0x1
6450 // CHECK-ERROR:                ^
6451 // CHECK-ERROR: error: invalid operand for instruction
6452 // CHECK-ERROR:         ext v0.2d, v1.2d, v2.2d, #0x0
6453 // CHECK-ERROR:                ^
6454
6455
6456 //----------------------------------------------------------------------
6457 // Permutation with 3 vectors
6458 //----------------------------------------------------------------------
6459
6460         uzp1 v0.16b, v1.8b, v2.8b
6461         uzp1 v0.8b, v1.4b, v2.4b
6462         uzp1 v0.8h, v1.4h, v2.4h
6463         uzp1 v0.4h, v1.2h, v2.2h
6464         uzp1 v0.4s, v1.2s, v2.2s
6465         uzp1 v0.2s, v1.1s, v2.1s
6466         uzp1 v0.2d, v1.1d, v2.1d
6467         uzp1 v0.1d, v1.1d, v2.1d
6468
6469 // CHECK-ERROR:  error: invalid operand for instruction
6470 // CHECK-ERROR:         uzp1 v0.16b, v1.8b, v2.8b
6471 // CHECK-ERROR:                      ^
6472 // CHECK-ERROR:  error: invalid operand for instruction
6473 // CHECK-ERROR:         uzp1 v0.8b, v1.4b, v2.4b
6474 // CHECK-ERROR:                     ^
6475 // CHECK-ERROR:  error: invalid operand for instruction
6476 // CHECK-ERROR:         uzp1 v0.8h, v1.4h, v2.4h
6477 // CHECK-ERROR:                     ^
6478 // CHECK-ERROR:  error: invalid operand for instruction
6479 // CHECK-ERROR:         uzp1 v0.4h, v1.2h, v2.2h
6480 // CHECK-ERROR:                     ^
6481 // CHECK-ERROR:  error: invalid operand for instruction
6482 // CHECK-ERROR:         uzp1 v0.4s, v1.2s, v2.2s
6483 // CHECK-ERROR:                     ^
6484 // CHECK-ERROR:  error: invalid operand for instruction
6485 // CHECK-ERROR:         uzp1 v0.2s, v1.1s, v2.1s
6486 // CHECK-ERROR:                     ^
6487 // CHECK-ERROR:  error: invalid operand for instruction
6488 // CHECK-ERROR:         uzp1 v0.2d, v1.1d, v2.1d
6489 // CHECK-ERROR:                     ^
6490 // CHECK-ERROR:  error: invalid operand for instruction
6491 // CHECK-ERROR:         uzp1 v0.1d, v1.1d, v2.1d
6492 // CHECK-ERROR:                 ^
6493
6494         uzp2 v0.16b, v1.8b, v2.8b
6495         uzp2 v0.8b, v1.4b, v2.4b
6496         uzp2 v0.8h, v1.4h, v2.4h
6497         uzp2 v0.4h, v1.2h, v2.2h
6498         uzp2 v0.4s, v1.2s, v2.2s
6499         uzp2 v0.2s, v1.1s, v2.1s
6500         uzp2 v0.2d, v1.1d, v2.1d
6501         uzp2 v0.1d, v1.1d, v2.1d
6502
6503 // CHECK-ERROR:  error: invalid operand for instruction
6504 // CHECK-ERROR:         uzp2 v0.16b, v1.8b, v2.8b
6505 // CHECK-ERROR:                      ^
6506 // CHECK-ERROR:  error: invalid operand for instruction
6507 // CHECK-ERROR:         uzp2 v0.8b, v1.4b, v2.4b
6508 // CHECK-ERROR:                     ^
6509 // CHECK-ERROR:  error: invalid operand for instruction
6510 // CHECK-ERROR:         uzp2 v0.8h, v1.4h, v2.4h
6511 // CHECK-ERROR:                     ^
6512 // CHECK-ERROR:  error: invalid operand for instruction
6513 // CHECK-ERROR:         uzp2 v0.4h, v1.2h, v2.2h
6514 // CHECK-ERROR:                     ^
6515 // CHECK-ERROR:  error: invalid operand for instruction
6516 // CHECK-ERROR:         uzp2 v0.4s, v1.2s, v2.2s
6517 // CHECK-ERROR:                     ^
6518 // CHECK-ERROR:  error: invalid operand for instruction
6519 // CHECK-ERROR:         uzp2 v0.2s, v1.1s, v2.1s
6520 // CHECK-ERROR:                     ^
6521 // CHECK-ERROR:  error: invalid operand for instruction
6522 // CHECK-ERROR:         uzp2 v0.2d, v1.1d, v2.1d
6523 // CHECK-ERROR:                     ^
6524 // CHECK-ERROR:  error: invalid operand for instruction
6525 // CHECK-ERROR:         uzp2 v0.1d, v1.1d, v2.1d
6526 // CHECK-ERROR:                 ^
6527
6528         zip1 v0.16b, v1.8b, v2.8b
6529         zip1 v0.8b, v1.4b, v2.4b
6530         zip1 v0.8h, v1.4h, v2.4h
6531         zip1 v0.4h, v1.2h, v2.2h
6532         zip1 v0.4s, v1.2s, v2.2s
6533         zip1 v0.2s, v1.1s, v2.1s
6534         zip1 v0.2d, v1.1d, v2.1d
6535         zip1 v0.1d, v1.1d, v2.1d
6536
6537 // CHECK-ERROR:  error: invalid operand for instruction
6538 // CHECK-ERROR:         zip1 v0.16b, v1.8b, v2.8b
6539 // CHECK-ERROR:                      ^
6540 // CHECK-ERROR:  error: invalid operand for instruction
6541 // CHECK-ERROR:         zip1 v0.8b, v1.4b, v2.4b
6542 // CHECK-ERROR:                     ^
6543 // CHECK-ERROR:  error: invalid operand for instruction
6544 // CHECK-ERROR:         zip1 v0.8h, v1.4h, v2.4h
6545 // CHECK-ERROR:                     ^
6546 // CHECK-ERROR:  error: invalid operand for instruction
6547 // CHECK-ERROR:         zip1 v0.4h, v1.2h, v2.2h
6548 // CHECK-ERROR:                     ^
6549 // CHECK-ERROR:  error: invalid operand for instruction
6550 // CHECK-ERROR:         zip1 v0.4s, v1.2s, v2.2s
6551 // CHECK-ERROR:                     ^
6552 // CHECK-ERROR:  error: invalid operand for instruction
6553 // CHECK-ERROR:         zip1 v0.2s, v1.1s, v2.1s
6554 // CHECK-ERROR:                     ^
6555 // CHECK-ERROR:  error: invalid operand for instruction
6556 // CHECK-ERROR:         zip1 v0.2d, v1.1d, v2.1d
6557 // CHECK-ERROR:                     ^
6558 // CHECK-ERROR:  error: invalid operand for instruction
6559 // CHECK-ERROR:         zip1 v0.1d, v1.1d, v2.1d
6560 // CHECK-ERROR:                 ^
6561
6562         zip2 v0.16b, v1.8b, v2.8b
6563         zip2 v0.8b, v1.4b, v2.4b
6564         zip2 v0.8h, v1.4h, v2.4h
6565         zip2 v0.4h, v1.2h, v2.2h
6566         zip2 v0.4s, v1.2s, v2.2s
6567         zip2 v0.2s, v1.1s, v2.1s
6568         zip2 v0.2d, v1.1d, v2.1d
6569         zip2 v0.1d, v1.1d, v2.1d
6570
6571 // CHECK-ERROR:  error: invalid operand for instruction
6572 // CHECK-ERROR:         zip2 v0.16b, v1.8b, v2.8b
6573 // CHECK-ERROR:                      ^
6574 // CHECK-ERROR:  error: invalid operand for instruction
6575 // CHECK-ERROR:         zip2 v0.8b, v1.4b, v2.4b
6576 // CHECK-ERROR:                     ^
6577 // CHECK-ERROR:  error: invalid operand for instruction
6578 // CHECK-ERROR:         zip2 v0.8h, v1.4h, v2.4h
6579 // CHECK-ERROR:                     ^
6580 // CHECK-ERROR:  error: invalid operand for instruction
6581 // CHECK-ERROR:         zip2 v0.4h, v1.2h, v2.2h
6582 // CHECK-ERROR:                     ^
6583 // CHECK-ERROR:  error: invalid operand for instruction
6584 // CHECK-ERROR:         zip2 v0.4s, v1.2s, v2.2s
6585 // CHECK-ERROR:                     ^
6586 // CHECK-ERROR:  error: invalid operand for instruction
6587 // CHECK-ERROR:         zip2 v0.2s, v1.1s, v2.1s
6588 // CHECK-ERROR:                     ^
6589 // CHECK-ERROR:  error: invalid operand for instruction
6590 // CHECK-ERROR:         zip2 v0.2d, v1.1d, v2.1d
6591 // CHECK-ERROR:                     ^
6592 // CHECK-ERROR:  error: invalid operand for instruction
6593 // CHECK-ERROR:         zip2 v0.1d, v1.1d, v2.1d
6594 // CHECK-ERROR:                 ^
6595
6596         trn1 v0.16b, v1.8b, v2.8b
6597         trn1 v0.8b, v1.4b, v2.4b
6598         trn1 v0.8h, v1.4h, v2.4h
6599         trn1 v0.4h, v1.2h, v2.2h
6600         trn1 v0.4s, v1.2s, v2.2s
6601         trn1 v0.2s, v1.1s, v2.1s
6602         trn1 v0.2d, v1.1d, v2.1d
6603         trn1 v0.1d, v1.1d, v2.1d
6604
6605 // CHECK-ERROR:  error: invalid operand for instruction
6606 // CHECK-ERROR:         trn1 v0.16b, v1.8b, v2.8b
6607 // CHECK-ERROR:                      ^
6608 // CHECK-ERROR:  error: invalid operand for instruction
6609 // CHECK-ERROR:         trn1 v0.8b, v1.4b, v2.4b
6610 // CHECK-ERROR:                     ^
6611 // CHECK-ERROR:  error: invalid operand for instruction
6612 // CHECK-ERROR:         trn1 v0.8h, v1.4h, v2.4h
6613 // CHECK-ERROR:                     ^
6614 // CHECK-ERROR:  error: invalid operand for instruction
6615 // CHECK-ERROR:         trn1 v0.4h, v1.2h, v2.2h
6616 // CHECK-ERROR:                     ^
6617 // CHECK-ERROR:  error: invalid operand for instruction
6618 // CHECK-ERROR:         trn1 v0.4s, v1.2s, v2.2s
6619 // CHECK-ERROR:                     ^
6620 // CHECK-ERROR:  error: invalid operand for instruction
6621 // CHECK-ERROR:         trn1 v0.2s, v1.1s, v2.1s
6622 // CHECK-ERROR:                     ^
6623 // CHECK-ERROR:  error: invalid operand for instruction
6624 // CHECK-ERROR:         trn1 v0.2d, v1.1d, v2.1d
6625 // CHECK-ERROR:                     ^
6626 // CHECK-ERROR:  error: invalid operand for instruction
6627 // CHECK-ERROR:         trn1 v0.1d, v1.1d, v2.1d
6628 // CHECK-ERROR:                 ^
6629
6630         trn2 v0.16b, v1.8b, v2.8b
6631         trn2 v0.8b, v1.4b, v2.4b
6632         trn2 v0.8h, v1.4h, v2.4h
6633         trn2 v0.4h, v1.2h, v2.2h
6634         trn2 v0.4s, v1.2s, v2.2s
6635         trn2 v0.2s, v1.1s, v2.1s
6636         trn2 v0.2d, v1.1d, v2.1d
6637         trn2 v0.1d, v1.1d, v2.1d
6638
6639 // CHECK-ERROR:  error: invalid operand for instruction
6640 // CHECK-ERROR:         trn2 v0.16b, v1.8b, v2.8b
6641 // CHECK-ERROR:                      ^
6642 // CHECK-ERROR:  error: invalid operand for instruction
6643 // CHECK-ERROR:         trn2 v0.8b, v1.4b, v2.4b
6644 // CHECK-ERROR:                     ^
6645 // CHECK-ERROR:  error: invalid operand for instruction
6646 // CHECK-ERROR:         trn2 v0.8h, v1.4h, v2.4h
6647 // CHECK-ERROR:                     ^
6648 // CHECK-ERROR:  error: invalid operand for instruction
6649 // CHECK-ERROR:         trn2 v0.4h, v1.2h, v2.2h
6650 // CHECK-ERROR:                     ^
6651 // CHECK-ERROR:  error: invalid operand for instruction
6652 // CHECK-ERROR:         trn2 v0.4s, v1.2s, v2.2s
6653 // CHECK-ERROR:                     ^
6654 // CHECK-ERROR:  error: invalid operand for instruction
6655 // CHECK-ERROR:         trn2 v0.2s, v1.1s, v2.1s
6656 // CHECK-ERROR:                     ^
6657 // CHECK-ERROR:  error: invalid operand for instruction
6658 // CHECK-ERROR:         trn2 v0.2d, v1.1d, v2.1d
6659 // CHECK-ERROR:                     ^
6660 // CHECK-ERROR:  error: invalid operand for instruction
6661 // CHECK-ERROR:         trn2 v0.1d, v1.1d, v2.1d
6662 // CHECK-ERROR:                 ^
6663
6664 //----------------------------------------------------------------------
6665 // Permutation with 3 vectors
6666 //----------------------------------------------------------------------
6667
6668         uzp1 v0.16b, v1.8b, v2.8b
6669         uzp1 v0.8b, v1.4b, v2.4b
6670         uzp1 v0.8h, v1.4h, v2.4h
6671         uzp1 v0.4h, v1.2h, v2.2h
6672         uzp1 v0.4s, v1.2s, v2.2s
6673         uzp1 v0.2s, v1.1s, v2.1s
6674         uzp1 v0.2d, v1.1d, v2.1d
6675         uzp1 v0.1d, v1.1d, v2.1d
6676
6677 // CHECK-ERROR:  error: invalid operand for instruction
6678 // CHECK-ERROR:         uzp1 v0.16b, v1.8b, v2.8b
6679 // CHECK-ERROR:                      ^
6680 // CHECK-ERROR:  error: invalid operand for instruction
6681 // CHECK-ERROR:         uzp1 v0.8b, v1.4b, v2.4b
6682 // CHECK-ERROR:                     ^
6683 // CHECK-ERROR:  error: invalid operand for instruction
6684 // CHECK-ERROR:         uzp1 v0.8h, v1.4h, v2.4h
6685 // CHECK-ERROR:                     ^
6686 // CHECK-ERROR:  error: invalid operand for instruction
6687 // CHECK-ERROR:         uzp1 v0.4h, v1.2h, v2.2h
6688 // CHECK-ERROR:                     ^
6689 // CHECK-ERROR:  error: invalid operand for instruction
6690 // CHECK-ERROR:         uzp1 v0.4s, v1.2s, v2.2s
6691 // CHECK-ERROR:                     ^
6692 // CHECK-ERROR:  error: invalid operand for instruction
6693 // CHECK-ERROR:         uzp1 v0.2s, v1.1s, v2.1s
6694 // CHECK-ERROR:                     ^
6695 // CHECK-ERROR:  error: invalid operand for instruction
6696 // CHECK-ERROR:         uzp1 v0.2d, v1.1d, v2.1d
6697 // CHECK-ERROR:                     ^
6698 // CHECK-ERROR:  error: invalid operand for instruction
6699 // CHECK-ERROR:         uzp1 v0.1d, v1.1d, v2.1d
6700 // CHECK-ERROR:                 ^
6701
6702         uzp2 v0.16b, v1.8b, v2.8b
6703         uzp2 v0.8b, v1.4b, v2.4b
6704         uzp2 v0.8h, v1.4h, v2.4h
6705         uzp2 v0.4h, v1.2h, v2.2h
6706         uzp2 v0.4s, v1.2s, v2.2s
6707         uzp2 v0.2s, v1.1s, v2.1s
6708         uzp2 v0.2d, v1.1d, v2.1d
6709         uzp2 v0.1d, v1.1d, v2.1d
6710
6711 // CHECK-ERROR:  error: invalid operand for instruction
6712 // CHECK-ERROR:         uzp2 v0.16b, v1.8b, v2.8b
6713 // CHECK-ERROR:                      ^
6714 // CHECK-ERROR:  error: invalid operand for instruction
6715 // CHECK-ERROR:         uzp2 v0.8b, v1.4b, v2.4b
6716 // CHECK-ERROR:                     ^
6717 // CHECK-ERROR:  error: invalid operand for instruction
6718 // CHECK-ERROR:         uzp2 v0.8h, v1.4h, v2.4h
6719 // CHECK-ERROR:                     ^
6720 // CHECK-ERROR:  error: invalid operand for instruction
6721 // CHECK-ERROR:         uzp2 v0.4h, v1.2h, v2.2h
6722 // CHECK-ERROR:                     ^
6723 // CHECK-ERROR:  error: invalid operand for instruction
6724 // CHECK-ERROR:         uzp2 v0.4s, v1.2s, v2.2s
6725 // CHECK-ERROR:                     ^
6726 // CHECK-ERROR:  error: invalid operand for instruction
6727 // CHECK-ERROR:         uzp2 v0.2s, v1.1s, v2.1s
6728 // CHECK-ERROR:                     ^
6729 // CHECK-ERROR:  error: invalid operand for instruction
6730 // CHECK-ERROR:         uzp2 v0.2d, v1.1d, v2.1d
6731 // CHECK-ERROR:                     ^
6732 // CHECK-ERROR:  error: invalid operand for instruction
6733 // CHECK-ERROR:         uzp2 v0.1d, v1.1d, v2.1d
6734 // CHECK-ERROR:                 ^
6735
6736         zip1 v0.16b, v1.8b, v2.8b
6737         zip1 v0.8b, v1.4b, v2.4b
6738         zip1 v0.8h, v1.4h, v2.4h
6739         zip1 v0.4h, v1.2h, v2.2h
6740         zip1 v0.4s, v1.2s, v2.2s
6741         zip1 v0.2s, v1.1s, v2.1s
6742         zip1 v0.2d, v1.1d, v2.1d
6743         zip1 v0.1d, v1.1d, v2.1d
6744
6745 // CHECK-ERROR:  error: invalid operand for instruction
6746 // CHECK-ERROR:         zip1 v0.16b, v1.8b, v2.8b
6747 // CHECK-ERROR:                      ^
6748 // CHECK-ERROR:  error: invalid operand for instruction
6749 // CHECK-ERROR:         zip1 v0.8b, v1.4b, v2.4b
6750 // CHECK-ERROR:                     ^
6751 // CHECK-ERROR:  error: invalid operand for instruction
6752 // CHECK-ERROR:         zip1 v0.8h, v1.4h, v2.4h
6753 // CHECK-ERROR:                     ^
6754 // CHECK-ERROR:  error: invalid operand for instruction
6755 // CHECK-ERROR:         zip1 v0.4h, v1.2h, v2.2h
6756 // CHECK-ERROR:                     ^
6757 // CHECK-ERROR:  error: invalid operand for instruction
6758 // CHECK-ERROR:         zip1 v0.4s, v1.2s, v2.2s
6759 // CHECK-ERROR:                     ^
6760 // CHECK-ERROR:  error: invalid operand for instruction
6761 // CHECK-ERROR:         zip1 v0.2s, v1.1s, v2.1s
6762 // CHECK-ERROR:                     ^
6763 // CHECK-ERROR:  error: invalid operand for instruction
6764 // CHECK-ERROR:         zip1 v0.2d, v1.1d, v2.1d
6765 // CHECK-ERROR:                     ^
6766 // CHECK-ERROR:  error: invalid operand for instruction
6767 // CHECK-ERROR:         zip1 v0.1d, v1.1d, v2.1d
6768 // CHECK-ERROR:                 ^
6769
6770         zip2 v0.16b, v1.8b, v2.8b
6771         zip2 v0.8b, v1.4b, v2.4b
6772         zip2 v0.8h, v1.4h, v2.4h
6773         zip2 v0.4h, v1.2h, v2.2h
6774         zip2 v0.4s, v1.2s, v2.2s
6775         zip2 v0.2s, v1.1s, v2.1s
6776         zip2 v0.2d, v1.1d, v2.1d
6777         zip2 v0.1d, v1.1d, v2.1d
6778
6779 // CHECK-ERROR:  error: invalid operand for instruction
6780 // CHECK-ERROR:         zip2 v0.16b, v1.8b, v2.8b
6781 // CHECK-ERROR:                      ^
6782 // CHECK-ERROR:  error: invalid operand for instruction
6783 // CHECK-ERROR:         zip2 v0.8b, v1.4b, v2.4b
6784 // CHECK-ERROR:                     ^
6785 // CHECK-ERROR:  error: invalid operand for instruction
6786 // CHECK-ERROR:         zip2 v0.8h, v1.4h, v2.4h
6787 // CHECK-ERROR:                     ^
6788 // CHECK-ERROR:  error: invalid operand for instruction
6789 // CHECK-ERROR:         zip2 v0.4h, v1.2h, v2.2h
6790 // CHECK-ERROR:                     ^
6791 // CHECK-ERROR:  error: invalid operand for instruction
6792 // CHECK-ERROR:         zip2 v0.4s, v1.2s, v2.2s
6793 // CHECK-ERROR:                     ^
6794 // CHECK-ERROR:  error: invalid operand for instruction
6795 // CHECK-ERROR:         zip2 v0.2s, v1.1s, v2.1s
6796 // CHECK-ERROR:                     ^
6797 // CHECK-ERROR:  error: invalid operand for instruction
6798 // CHECK-ERROR:         zip2 v0.2d, v1.1d, v2.1d
6799 // CHECK-ERROR:                     ^
6800 // CHECK-ERROR:  error: invalid operand for instruction
6801 // CHECK-ERROR:         zip2 v0.1d, v1.1d, v2.1d
6802 // CHECK-ERROR:                 ^
6803
6804         trn1 v0.16b, v1.8b, v2.8b
6805         trn1 v0.8b, v1.4b, v2.4b
6806         trn1 v0.8h, v1.4h, v2.4h
6807         trn1 v0.4h, v1.2h, v2.2h
6808         trn1 v0.4s, v1.2s, v2.2s
6809         trn1 v0.2s, v1.1s, v2.1s
6810         trn1 v0.2d, v1.1d, v2.1d
6811         trn1 v0.1d, v1.1d, v2.1d
6812
6813 // CHECK-ERROR:  error: invalid operand for instruction
6814 // CHECK-ERROR:         trn1 v0.16b, v1.8b, v2.8b
6815 // CHECK-ERROR:                      ^
6816 // CHECK-ERROR:  error: invalid operand for instruction
6817 // CHECK-ERROR:         trn1 v0.8b, v1.4b, v2.4b
6818 // CHECK-ERROR:                     ^
6819 // CHECK-ERROR:  error: invalid operand for instruction
6820 // CHECK-ERROR:         trn1 v0.8h, v1.4h, v2.4h
6821 // CHECK-ERROR:                     ^
6822 // CHECK-ERROR:  error: invalid operand for instruction
6823 // CHECK-ERROR:         trn1 v0.4h, v1.2h, v2.2h
6824 // CHECK-ERROR:                     ^
6825 // CHECK-ERROR:  error: invalid operand for instruction
6826 // CHECK-ERROR:         trn1 v0.4s, v1.2s, v2.2s
6827 // CHECK-ERROR:                     ^
6828 // CHECK-ERROR:  error: invalid operand for instruction
6829 // CHECK-ERROR:         trn1 v0.2s, v1.1s, v2.1s
6830 // CHECK-ERROR:                     ^
6831 // CHECK-ERROR:  error: invalid operand for instruction
6832 // CHECK-ERROR:         trn1 v0.2d, v1.1d, v2.1d
6833 // CHECK-ERROR:                     ^
6834 // CHECK-ERROR:  error: invalid operand for instruction
6835 // CHECK-ERROR:         trn1 v0.1d, v1.1d, v2.1d
6836 // CHECK-ERROR:                 ^
6837
6838         trn2 v0.16b, v1.8b, v2.8b
6839         trn2 v0.8b, v1.4b, v2.4b
6840         trn2 v0.8h, v1.4h, v2.4h
6841         trn2 v0.4h, v1.2h, v2.2h
6842         trn2 v0.4s, v1.2s, v2.2s
6843         trn2 v0.2s, v1.1s, v2.1s
6844         trn2 v0.2d, v1.1d, v2.1d
6845         trn2 v0.1d, v1.1d, v2.1d
6846
6847 // CHECK-ERROR:  error: invalid operand for instruction
6848 // CHECK-ERROR:         trn2 v0.16b, v1.8b, v2.8b
6849 // CHECK-ERROR:                      ^
6850 // CHECK-ERROR:  error: invalid operand for instruction
6851 // CHECK-ERROR:         trn2 v0.8b, v1.4b, v2.4b
6852 // CHECK-ERROR:                     ^
6853 // CHECK-ERROR:  error: invalid operand for instruction
6854 // CHECK-ERROR:         trn2 v0.8h, v1.4h, v2.4h
6855 // CHECK-ERROR:                     ^
6856 // CHECK-ERROR:  error: invalid operand for instruction
6857 // CHECK-ERROR:         trn2 v0.4h, v1.2h, v2.2h
6858 // CHECK-ERROR:                     ^
6859 // CHECK-ERROR:  error: invalid operand for instruction
6860 // CHECK-ERROR:         trn2 v0.4s, v1.2s, v2.2s
6861 // CHECK-ERROR:                     ^
6862 // CHECK-ERROR:  error: invalid operand for instruction
6863 // CHECK-ERROR:         trn2 v0.2s, v1.1s, v2.1s
6864 // CHECK-ERROR:                     ^
6865 // CHECK-ERROR:  error: invalid operand for instruction
6866 // CHECK-ERROR:         trn2 v0.2d, v1.1d, v2.1d
6867 // CHECK-ERROR:                     ^
6868 // CHECK-ERROR:  error: invalid operand for instruction
6869 // CHECK-ERROR:         trn2 v0.1d, v1.1d, v2.1d
6870 // CHECK-ERROR:                 ^
6871
6872 //----------------------------------------------------------------------
6873 // Floating Point  multiply (scalar, by element)
6874 //----------------------------------------------------------------------
6875       // mismatched and invalid vector types
6876       fmul    s0, s1, v1.h[0]
6877       fmul    h0, h1, v1.s[0]
6878       // invalid lane
6879       fmul    s2, s29, v10.s[4]
6880
6881 // CHECK-ERROR: error: invalid operand for instruction
6882 // CHECK-ERROR:          fmul    s0, s1, v1.h[0]
6883 // CHECK-ERROR:                             ^
6884 // CHECK-ERROR: error: invalid operand for instruction
6885 // CHECK-ERROR:          fmul    h0, h1, v1.s[0]
6886 // CHECK-ERROR:                  ^
6887 // CHECK-ERROR: vector lane must be an integer in range
6888 // CHECK-ERROR:          fmul    s2, s29, v10.s[4]
6889 // CHECK-ERROR:                                 ^
6890
6891 //----------------------------------------------------------------------
6892 // Floating Point  multiply extended (scalar, by element)
6893 //----------------------------------------------------------------------
6894       // mismatched and invalid vector types
6895       fmulx    d0, d1, v1.b[0]
6896       fmulx    h0, h1, v1.d[0]
6897       // invalid lane
6898       fmulx    d2, d29, v10.d[3]
6899
6900 // CHECK-ERROR: error: invalid operand for instruction
6901 // CHECK-ERROR:          fmulx    d0, d1, v1.b[0]
6902 // CHECK-ERROR:                              ^
6903 // CHECK-ERROR: error: invalid operand for instruction
6904 // CHECK-ERROR:          fmulx    h0, h1, v1.d[0]
6905 // CHECK-ERROR:                   ^
6906 // CHECK-ERROR: vector lane must be an integer in range
6907 // CHECK-ERROR:          fmulx    d2, d29, v10.d[3]
6908 // CHECK-ERROR:                                  ^
6909
6910 //----------------------------------------------------------------------
6911 // Floating Point fused multiply-add (scalar, by element)
6912 //----------------------------------------------------------------------
6913       // mismatched and invalid vector types
6914       fmla    b0, b1, v1.b[0]
6915       fmla    d30, s11, v1.d[1]
6916       // invalid lane
6917       fmla    s16, s22, v16.s[5]
6918
6919 // CHECK-ERROR: error: invalid operand for instruction
6920 // CHECK-ERROR:          fmla    b0, b1, v1.b[0]
6921 // CHECK-ERROR:                  ^
6922 // CHECK-ERROR: error: invalid operand for instruction
6923 // CHECK-ERROR:          fmla    d30, s11, v1.d[1]
6924 // CHECK-ERROR:                       ^
6925 // CHECK-ERROR: vector lane must be an integer in range
6926 // CHECK-ERROR:          fmla    s16, s22, v16.s[5]
6927 // CHECK-ERROR:                                  ^
6928
6929 //----------------------------------------------------------------------
6930 // Floating Point fused multiply-subtract (scalar, by element)
6931 //----------------------------------------------------------------------
6932     // mismatched and invalid vector types
6933     fmls    s29, h10, v28.s[1]
6934     fmls    h7, h17, v26.s[2]
6935     // invalid lane
6936     fmls    d16, d22, v16.d[-1]
6937
6938 // CHECK-ERROR: error: invalid operand for instruction
6939 // CHECK-ERROR:          fmls    s29, h10, v28.s[1]
6940 // CHECK-ERROR:                       ^
6941 // CHECK-ERROR: error: invalid operand for instruction
6942 // CHECK-ERROR:          fmls    h7, h17, v26.s[2]
6943 // CHECK-ERROR:                  ^
6944 // CHECK-ERROR: error: vector lane must be an integer in range [0, 1]
6945 // CHECK-ERROR:          fmls    d16, d22, v16.d[-1]
6946 // CHECK-ERROR:                                  ^
6947
6948 //----------------------------------------------------------------------
6949 // Scalar Signed saturating doubling multiply-add long
6950 // (scalar, by element)
6951 //----------------------------------------------------------------------
6952     // mismatched and invalid vector types
6953     sqdmlal s0, h0, v0.s[0]
6954     sqdmlal s8, s9, v14.s[1]
6955     // invalid lane
6956     sqdmlal d4, s5, v1.s[5]
6957     // invalid vector index
6958     sqdmlal s0, h0, v17.h[0]
6959
6960 // CHECK-ERROR: error: invalid operand for instruction
6961 // CHECK-ERROR:          sqdmlal s0, h0, v0.s[0]
6962 // CHECK-ERROR:                             ^
6963 // CHECK-ERROR: error: invalid operand for instruction
6964 // CHECK-ERROR:          sqdmlal s8, s9, v14.s[1]
6965 // CHECK-ERROR:                  ^
6966 // CHECK-ERROR: vector lane must be an integer in range
6967 // CHECK-ERROR:          sqdmlal d4, s5, v1.s[5]
6968 // CHECK-ERROR:                               ^
6969 // CHECK-ERROR: error: invalid operand for instruction
6970 // CHECK-ERROR:          sqdmlal s0, h0, v17.h[0]
6971 // CHECK-ERROR:                           ^
6972
6973 //----------------------------------------------------------------------
6974 // Scalar Signed saturating doubling multiply-subtract long
6975 // (scalar, by element)
6976 //----------------------------------------------------------------------
6977     // mismatched and invalid vector types
6978     sqdmlsl s1, h1, v1.d[0]
6979     sqdmlsl d1, h1, v13.s[0]
6980     // invalid lane
6981     sqdmlsl d1, s1, v13.s[4]
6982     // invalid vector index
6983     sqdmlsl s1, h1, v20.h[7]
6984
6985 // CHECK-ERROR: error: invalid operand for instruction
6986 // CHECK-ERROR:          sqdmlsl s1, h1, v1.d[0]
6987 // CHECK-ERROR:                             ^
6988 // CHECK-ERROR: error: invalid operand for instruction
6989 // CHECK-ERROR:          sqdmlsl d1, h1, v13.s[0]
6990 // CHECK-ERROR:                      ^
6991 // CHECK-ERROR: vector lane must be an integer in range
6992 // CHECK-ERROR:          sqdmlsl d1, s1, v13.s[4]
6993 // CHECK-ERROR:                                ^
6994 // CHECK-ERROR: error: invalid operand for instruction
6995 // CHECK-ERROR:          sqdmlsl s1, h1, v20.h[7]
6996 // CHECK-ERROR:                           ^
6997
6998 //----------------------------------------------------------------------
6999 // Scalar Signed saturating doubling multiply long (scalar, by element)
7000 //----------------------------------------------------------------------
7001     // mismatched and invalid vector types
7002     // invalid lane
7003     // invalid vector index
7004     // mismatched and invalid vector types
7005     sqdmull s1, h1, v1.s[1]
7006     sqdmull s1, s1, v4.s[0]
7007     // invalid lane
7008     sqdmull s12, h17, v9.h[9]
7009     // invalid vector index
7010     sqdmull s1, h1, v16.h[5]
7011
7012 // CHECK-ERROR: error: invalid operand for instruction
7013 // CHECK-ERROR:          sqdmull s1, h1, v1.s[1]
7014 // CHECK-ERROR:                             ^
7015 // CHECK-ERROR: error: invalid operand for instruction
7016 // CHECK-ERROR:          sqdmull s1, s1, v4.s[0]
7017 // CHECK-ERROR:                  ^
7018 // CHECK-ERROR: vector lane must be an integer in range
7019 // CHECK-ERROR:          sqdmull s12, h17, v9.h[9]
7020 // CHECK-ERROR:                                 ^
7021 // CHECK-ERROR: error: invalid operand for instruction
7022 // CHECK-ERROR:          sqdmull s1, h1, v16.h[5]
7023 // CHECK-ERROR:                           ^
7024
7025 //----------------------------------------------------------------------
7026 // Scalar Signed saturating doubling multiply returning
7027 // high half (scalar, by element)
7028 //----------------------------------------------------------------------
7029     // mismatched and invalid vector types
7030     sqdmulh h0, s1, v0.h[0]
7031     sqdmulh s25, s26, v27.h[3]
7032     // invalid lane
7033     sqdmulh s25, s26, v27.s[4]
7034     // invalid vector index
7035     sqdmulh s0, h1, v30.h[0]
7036
7037 // CHECK-ERROR: error: invalid operand for instruction
7038 // CHECK-ERROR:          sqdmulh h0, s1, v0.h[0]
7039 // CHECK-ERROR:                      ^
7040 // CHECK-ERROR: error: invalid operand for instruction
7041 // CHECK-ERROR:          sqdmulh s25, s26, v27.h[3]
7042 // CHECK-ERROR:                  ^
7043 // CHECK-ERROR: vector lane must be an integer in range
7044 // CHECK-ERROR:          sqdmulh s25, s26, v27.s[4]
7045 // CHECK-ERROR:                                  ^
7046 // CHECK-ERROR: error: invalid operand for instruction
7047 // CHECK-ERROR:          sqdmulh s0, h1, v30.h[0]
7048 // CHECK-ERROR:                      ^
7049
7050 //----------------------------------------------------------------------
7051 // Scalar Signed saturating rounding doubling multiply
7052 // returning high half (scalar, by element)
7053 //----------------------------------------------------------------------
7054     // mismatched and invalid vector types
7055     sqrdmulh h31, h30, v14.s[2]
7056     sqrdmulh s5, h6, v7.s[2]
7057     // invalid lane
7058     sqrdmulh h31, h30, v14.h[9]
7059     // invalid vector index
7060     sqrdmulh h31, h30, v20.h[4]
7061
7062 // CHECK-ERROR: error: invalid operand for instruction
7063 // CHECK-ERROR:          sqrdmulh h31, h30, v14.s[2]
7064 // CHECK-ERROR:                                 ^
7065 // CHECK-ERROR: error: invalid operand for instruction
7066 // CHECK-ERROR:          sqrdmulh s5, h6, v7.s[2]
7067 // CHECK-ERROR:                       ^
7068 // CHECK-ERROR: vector lane must be an integer in range
7069 // CHECK-ERROR:          sqrdmulh h31, h30, v14.h[9]
7070 // CHECK-ERROR:                                 ^
7071 // CHECK-ERROR: error: invalid operand for instruction
7072 // CHECK-ERROR:          sqrdmulh h31, h30, v20.h[4]
7073 // CHECK-ERROR:                              ^
7074
7075 //----------------------------------------------------------------------
7076 // Scalar Duplicate element (scalar)
7077 //----------------------------------------------------------------------
7078       // mismatched and invalid vector types
7079       dup b0, v1.d[0]
7080       dup h0, v31.b[8]
7081       dup s0, v2.h[4]
7082       dup d0, v17.s[3]
7083       // invalid  lane
7084       dup d0, v17.d[4]
7085       dup s0, v1.s[7]
7086       dup h0, v31.h[16]
7087       dup b1, v3.b[16]
7088 // CHECK-ERROR: error: invalid operand for instruction
7089 // CHECK-ERROR:          dup b0, v1.d[0]
7090 // CHECK-ERROR:                     ^
7091 // CHECK-ERROR: error: invalid operand for instruction
7092 // CHECK-ERROR:          dup h0, v31.b[8]
7093 // CHECK-ERROR:                      ^
7094 // CHECK-ERROR: error: invalid operand for instruction
7095 // CHECK-ERROR:          dup s0, v2.h[4]
7096 // CHECK-ERROR:                     ^
7097 // CHECK-ERROR: error: invalid operand for instruction
7098 // CHECK-ERROR:          dup d0, v17.s[3]
7099 // CHECK-ERROR:                      ^
7100 // CHECK-ERROR: vector lane must be an integer in range
7101 // CHECK-ERROR:          dup d0, v17.d[4]
7102 // CHECK-ERROR:                        ^
7103 // CHECK-ERROR: vector lane must be an integer in range
7104 // CHECK-ERROR:          dup s0, v1.s[7]
7105 // CHECK-ERROR:                       ^
7106 // CHECK-ERROR: vector lane must be an integer in range
7107 // CHECK-ERROR:          dup h0, v31.h[16]
7108 // CHECK-ERROR:                        ^
7109 // CHECK-ERROR: vector lane must be an integer in range
7110 // CHECK-ERROR:          dup b1, v3.b[16]
7111 // CHECK-ERROR:                       ^
7112
7113 //----------------------------------------------------------------------
7114 // Table look up
7115 //----------------------------------------------------------------------
7116
7117         tbl v0.8b, {v1.8b}, v2.8b
7118         tbl v0.8b, {v1.8b, v2.8b}, v2.8b
7119         tbl v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7120         tbl v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7121         tbl v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7122
7123 // CHECK-ERROR: error: invalid operand for instruction
7124 // CHECK-ERROR:        tbl v0.8b, {v1.8b}, v2.8b
7125 // CHECK-ERROR:                   ^
7126 // CHECK-ERROR: error: invalid operand for instruction
7127 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b}, v2.8b
7128 // CHECK-ERROR:                   ^
7129 // CHECK-ERROR: error: invalid operand for instruction
7130 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7131 // CHECK-ERROR:                   ^
7132 // CHECK-ERROR: error: invalid operand for instruction
7133 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7134 // CHECK-ERROR:                   ^
7135 // CHECK-ERROR: error: invalid number of vectors
7136 // CHECK-ERROR:        tbl v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7137 // CHECK-ERROR:                                                    ^
7138
7139         tbx v0.8b, {v1.8b}, v2.8b
7140         tbx v0.8b, {v1.8b, v2.8b}, v2.8b
7141         tbx v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7142         tbx v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7143         tbx v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7144
7145 // CHECK-ERROR: error: invalid operand for instruction
7146 // CHECK-ERROR:        tbx v0.8b, {v1.8b}, v2.8b
7147 // CHECK-ERROR:                   ^
7148 // CHECK-ERROR: error: invalid operand for instruction
7149 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b}, v2.8b
7150 // CHECK-ERROR:                   ^
7151 // CHECK-ERROR: error: invalid operand for instruction
7152 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7153 // CHECK-ERROR:                   ^
7154 // CHECK-ERROR: error: invalid operand for instruction
7155 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7156 // CHECK-ERROR:                   ^
7157 // CHECK-ERROR: error: invalid number of vectors
7158 // CHECK-ERROR:        tbx v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7159 // CHECK-ERROR:                                                    ^
7160
7161 //----------------------------------------------------------------------
7162 // Scalar Floating-point Convert To Lower Precision Narrow, Rounding To
7163 // Odd
7164 //----------------------------------------------------------------------
7165
7166     fcvtxn s0, s1
7167
7168 // CHECK-ERROR: error: invalid operand for instruction
7169 // CHECK-ERROR:        fcvtxn s0, s1
7170 // CHECK-ERROR:                   ^
7171
7172 //----------------------------------------------------------------------
7173 // Scalar Floating-point Convert To Signed Integer, Rounding To Nearest
7174 // With Ties To Away
7175 //----------------------------------------------------------------------
7176
7177     fcvtas s0, d0
7178     fcvtas d0, s0
7179
7180 // CHECK-ERROR: error: invalid operand for instruction
7181 // CHECK-ERROR:        fcvtas s0, d0
7182 // CHECK-ERROR:                   ^
7183 // CHECK-ERROR: error: invalid operand for instruction
7184 // CHECK-ERROR:        fcvtas d0, s0
7185 // CHECK-ERROR:                   ^
7186
7187 //----------------------------------------------------------------------
7188 // Scalar Floating-point Convert To Unsigned Integer, Rounding To
7189 // Nearest With Ties To Away
7190 //----------------------------------------------------------------------
7191
7192     fcvtau s0, d0
7193     fcvtau d0, s0
7194
7195 // CHECK-ERROR: error: invalid operand for instruction
7196 // CHECK-ERROR:        fcvtau s0, d0
7197 // CHECK-ERROR:                   ^
7198 // CHECK-ERROR: error: invalid operand for instruction
7199 // CHECK-ERROR:        fcvtau d0, s0
7200 // CHECK-ERROR:                   ^
7201
7202 //----------------------------------------------------------------------
7203 // Scalar Floating-point Convert To Signed Integer, Rounding Toward
7204 // Minus Infinity
7205 //----------------------------------------------------------------------
7206
7207     fcvtms s0, d0
7208     fcvtms d0, s0
7209
7210 // CHECK-ERROR: error: invalid operand for instruction
7211 // CHECK-ERROR:        fcvtms s0, d0
7212 // CHECK-ERROR:                   ^
7213 // CHECK-ERROR: error: invalid operand for instruction
7214 // CHECK-ERROR:        fcvtms d0, s0
7215 // CHECK-ERROR:                   ^
7216
7217 //----------------------------------------------------------------------
7218 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward
7219 // Minus Infinity
7220 //----------------------------------------------------------------------
7221
7222     fcvtmu s0, d0
7223     fcvtmu d0, s0
7224
7225 // CHECK-ERROR: error: invalid operand for instruction
7226 // CHECK-ERROR:        fcvtmu s0, d0
7227 // CHECK-ERROR:                   ^
7228 // CHECK-ERROR: error: invalid operand for instruction
7229 // CHECK-ERROR:        fcvtmu d0, s0
7230 // CHECK-ERROR:                   ^
7231
7232 //----------------------------------------------------------------------
7233 // Scalar Floating-point Convert To Signed Integer, Rounding To Nearest
7234 // With Ties To Even
7235 //----------------------------------------------------------------------
7236
7237     fcvtns s0, d0
7238     fcvtns d0, s0
7239
7240 // CHECK-ERROR: error: invalid operand for instruction
7241 // CHECK-ERROR:        fcvtns s0, d0
7242 // CHECK-ERROR:                   ^
7243 // CHECK-ERROR: error: invalid operand for instruction
7244 // CHECK-ERROR:        fcvtns d0, s0
7245 // CHECK-ERROR:                   ^
7246
7247 //----------------------------------------------------------------------
7248 // Scalar Floating-point Convert To Unsigned Integer, Rounding To
7249 // Nearest With Ties To Even
7250 //----------------------------------------------------------------------
7251
7252     fcvtnu s0, d0
7253     fcvtnu d0, s0
7254
7255 // CHECK-ERROR: error: invalid operand for instruction
7256 // CHECK-ERROR:        fcvtnu s0, d0
7257 // CHECK-ERROR:                   ^
7258 // CHECK-ERROR: error: invalid operand for instruction
7259 // CHECK-ERROR:        fcvtnu d0, s0
7260 // CHECK-ERROR:                   ^
7261
7262 //----------------------------------------------------------------------
7263 // Scalar Floating-point Convert To Signed Integer, Rounding Toward
7264 // Positive Infinity
7265 //----------------------------------------------------------------------
7266
7267     fcvtps s0, d0
7268     fcvtps d0, s0
7269
7270 // CHECK-ERROR: error: invalid operand for instruction
7271 // CHECK-ERROR:        fcvtps s0, d0
7272 // CHECK-ERROR:                   ^
7273 // CHECK-ERROR: error: invalid operand for instruction
7274 // CHECK-ERROR:        fcvtps d0, s0
7275 // CHECK-ERROR:                   ^
7276
7277 //----------------------------------------------------------------------
7278 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward
7279 // Positive Infinity
7280 //----------------------------------------------------------------------
7281
7282     fcvtpu s0, d0
7283     fcvtpu d0, s0
7284
7285 // CHECK-ERROR: error: invalid operand for instruction
7286 // CHECK-ERROR:        fcvtpu s0, d0
7287 // CHECK-ERROR:                   ^
7288 // CHECK-ERROR: error: invalid operand for instruction
7289 // CHECK-ERROR:        fcvtpu d0, s0
7290 // CHECK-ERROR:                   ^
7291
7292 //----------------------------------------------------------------------
7293 // Scalar Floating-point Convert To Signed Integer, Rounding Toward Zero
7294 //----------------------------------------------------------------------
7295
7296     fcvtzs s0, d0
7297     fcvtzs d0, s0
7298
7299 // CHECK-ERROR: error: invalid operand for instruction
7300 // CHECK-ERROR:        fcvtzs s0, d0
7301 // CHECK-ERROR:                   ^
7302 // CHECK-ERROR: error: invalid operand for instruction
7303 // CHECK-ERROR:        fcvtzs d0, s0
7304 // CHECK-ERROR:                   ^
7305
7306 //----------------------------------------------------------------------
7307 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward 
7308 // Zero
7309 //----------------------------------------------------------------------
7310
7311     fcvtzu s0, d0
7312     fcvtzu d0, s0
7313
7314 // CHECK-ERROR: error: invalid operand for instruction
7315 // CHECK-ERROR:        fcvtzu s0, d0
7316 // CHECK-ERROR:                   ^
7317 // CHECK-ERROR: error: invalid operand for instruction
7318 // CHECK-ERROR:        fcvtzu d0, s0
7319 // CHECK-ERROR:                   ^
7320
7321 //----------------------------------------------------------------------
7322 // Scalar Floating-point Absolute Difference
7323 //----------------------------------------------------------------------
7324
7325
7326     fabd s29, d24, s20
7327     fabd d29, s24, d20
7328
7329 // CHECK-ERROR: error: invalid operand for instruction
7330 // CHECK-ERROR:        fabd s29, d24, s20
7331 // CHECK-ERROR:                  ^
7332 // CHECK-ERROR: error: invalid operand for instruction
7333 // CHECK-ERROR:        fabd d29, s24, d20
7334 // CHECK-ERROR:                  ^