1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+neon < %s 2> %t
2 // RUN: FileCheck --check-prefix=CHECK-ERROR < %t %s
4 //------------------------------------------------------------------------------
5 // Vector Integer Add/sub
6 //------------------------------------------------------------------------------
8 // Mismatched vector types
9 add v0.16b, v1.8b, v2.8b
10 sub v0.2d, v1.2d, v2.2s
12 // CHECK-ERROR: error: invalid operand for instruction
13 // CHECK-ERROR: add v0.16b, v1.8b, v2.8b
15 // CHECK-ERROR: error: invalid operand for instruction
16 // CHECK-ERROR: sub v0.2d, v1.2d, v2.2s
19 //------------------------------------------------------------------------------
20 // Vector Floating-Point Add/sub
21 //------------------------------------------------------------------------------
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
28 // CHECK-ERROR: error: invalid operand for instruction
29 // CHECK-ERROR: fadd v0.2d, v1.2s, v2.2s
31 // CHECK-ERROR: error: invalid operand for instruction
32 // CHECK-ERROR: fsub v0.4s, v1.2s, v2.4s
34 // CHECK-ERROR: error: invalid operand for instruction
35 // CHECK-ERROR: fsub v0.8b, v1.8b, v2.8b
38 //----------------------------------------------------------------------
40 //----------------------------------------------------------------------
42 // Mismatched and invalid vector types
43 mul v0.16b, v1.8b, v2.8b
44 mul v0.2d, v1.2d, v2.2d
46 // CHECK-ERROR: error: invalid operand for instruction
47 // CHECK-ERROR: mul v0.16b, v1.8b, v2.8b
49 // CHECK-ERROR: error: invalid operand for instruction
50 // CHECK-ERROR: mul v0.2d, v1.2d, v2.2d
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
60 // CHECK-ERROR: error: invalid operand for instruction
61 // CHECK-ERROR: fmul v0.16b, v1.8b, v2.8b
63 // CHECK-ERROR: error: invalid operand for instruction
64 // CHECK-ERROR: fdiv v0.2s, v1.2d, v2.2d
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
81 // CHECK-ERROR: error: invalid operand for instruction
82 // CHECK-ERROR: and v0.8b, v1.16b, v2.8b
84 // CHECK-ERROR: error: invalid operand for instruction
85 // CHECK-ERROR: orr v0.4h, v1.4h, v2.4h
87 // CHECK-ERROR: error: invalid operand for instruction
88 // CHECK-ERROR: eor v0.2s, v1.2s, v2.2s
90 // CHECK-ERROR: error: invalid operand for instruction
91 // CHECK-ERROR: bsl v0.8b, v1.16b, v2.8b
93 // CHECK-ERROR: error: invalid operand for instruction
94 // CHECK-ERROR: bsl v0.2s, v1.2s, v2.2s
96 // CHECK-ERROR: error: invalid operand for instruction
97 // CHECK-ERROR: bit v0.2d, v1.2d, v2.2d
99 // CHECK-ERROR: error: invalid operand for instruction
100 // CHECK-ERROR: bif v0.4h, v1.4h, v2.4h
102 // CHECK-ERROR: error: invalid operand for instruction
103 // CHECK-ERROR: orn v0.8b, v1.16b, v2.16b
105 // CHECK-ERROR: error: invalid operand for instruction
106 // CHECK-ERROR: bic v0.2d, v1.2d, v2.2d
109 //----------------------------------------------------------------------
110 // Vector Integer Multiply-accumulate and Multiply-subtract
111 //----------------------------------------------------------------------
113 // Mismatched and invalid vector types
114 mla v0.16b, v1.8b, v2.8b
115 mls v0.2d, v1.2d, v2.2d
117 // CHECK-ERROR: error: invalid operand for instruction
118 // CHECK-ERROR: mla v0.16b, v1.8b, v2.8b
120 // CHECK-ERROR: error: invalid operand for instruction
121 // CHECK-ERROR: mls v0.2d, v1.2d, v2.2d
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
131 // CHECK-ERROR: error: invalid operand for instruction
132 // CHECK-ERROR: fmla v0.2s, v1.2d, v2.2d
134 // CHECK-ERROR: error: invalid operand for instruction
135 // CHECK-ERROR: fmls v0.16b, v1.8b, v2.8b
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)
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
155 // CHECK-ERROR: error: invalid operand for instruction
156 // CHECK-ERROR: movi v0.2s, #-1
158 // CHECK-ERROR: error: invalid operand for instruction
159 // CHECK-ERROR: mvni v1.4s, #256
161 // CHECK-ERROR: error: invalid operand for instruction
162 // CHECK-ERROR: bic v15.4h, #1, lsl #7
164 // CHECK-ERROR: error: invalid operand for instruction
165 // CHECK-ERROR: orr v31.2s, #1, lsl #25
167 // CHECK-ERROR: error: invalid operand for instruction
168 // CHECK-ERROR: movi v5.4h, #10, lsl #16
170 // CHECK-ERROR: error: invalid operand for instruction
171 // CHECK-ERROR: movi v5.8b, #1, lsl #8
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
186 // CHECK-ERROR: error: invalid operand for instruction
187 // CHECK-ERROR: movi v0.2s, #-1, msl #8
189 // CHECK-ERROR: error: invalid operand for instruction
190 // CHECK-ERROR: mvni v7.4s, #256, msl #16
192 // CHECK-ERROR: error: invalid operand for instruction
193 // CHECK-ERROR: movi v3.2s, #1, msl #0
195 // CHECK-ERROR: error: invalid operand for instruction
196 // CHECK-ERROR: mvni v17.4s, #255, msl #32
198 // CHECK-ERROR: error: invalid operand for instruction
199 // CHECK-ERROR: movi v5.4h, #31, msl #8
202 //----------------------------------------------------------------------
203 // Vector Immediate - per byte
204 //----------------------------------------------------------------------
205 // out of range immediate (0 to 0xff)
209 // CHECK-ERROR: error: invalid operand for instruction
210 // CHECK-ERROR: movi v0.8b, #-1
212 // CHECK-ERROR: error: invalid operand for instruction
213 // CHECK-ERROR: movi v1.16b, #256
217 //----------------------------------------------------------------------
218 // Vector Move Immediate - bytemask, per doubleword
219 //---------------------------------------------------------------------
220 // invalid bytemask (0x00 or 0xff)
221 movi v0.2d, #0x10ff00ff00ff00ff
223 // CHECK:ERROR: error: invalid operand for instruction
224 // CHECK:ERROR: movi v0.2d, #0x10ff00ff00ff00ff
227 //----------------------------------------------------------------------
228 // Vector Move Immediate - bytemask, one doubleword
229 //----------------------------------------------------------------------
230 // invalid bytemask (0x00 or 0xff)
231 movi v0.2d, #0xffff00ff001f00ff
233 // CHECK:ERROR: error: invalid operand for instruction
234 // CHECK:ERROR: movi v0.2d, #0xffff00ff001f00ff
236 //----------------------------------------------------------------------
237 // Vector Floating Point Move Immediate
238 //----------------------------------------------------------------------
239 // invalid vector type (2s, 4s, 2d)
242 // CHECK:ERROR: error: invalid operand for instruction
243 // CHECK:ERROR: fmov v0.4h, #1.0
246 //----------------------------------------------------------------------
247 // Vector Move - register
248 //----------------------------------------------------------------------
249 // invalid vector type (8b, 16b)
251 // CHECK:ERROR: error: invalid operand for instruction
252 // CHECK:ERROR: mov v0.2s, v31.8b
255 //----------------------------------------------------------------------
256 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
257 //----------------------------------------------------------------------
259 // Mismatched and invalid vector types (2d)
260 saba v0.16b, v1.8b, v2.8b
261 uaba v0.2d, v1.2d, v2.2d
263 // CHECK-ERROR: error: invalid operand for instruction
264 // CHECK-ERROR: saba v0.16b, v1.8b, v2.8b
266 // CHECK-ERROR: error: invalid operand for instruction
267 // CHECK-ERROR: uaba v0.2d, v1.2d, v2.2d
270 //----------------------------------------------------------------------
271 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
272 // Vector Absolute Difference (Signed, Unsigned)
274 // Mismatched and invalid vector types (2d)
275 uaba v0.16b, v1.8b, v2.8b
276 saba v0.2d, v1.2d, v2.2d
277 uabd v0.4s, v1.2s, v2.2s
278 sabd v0.4h, v1.8h, v8.8h
280 // CHECK-ERROR: error: invalid operand for instruction
281 // CHECK-ERROR: uaba v0.16b, v1.8b, v2.8b
283 // CHECK-ERROR: error: invalid operand for instruction
284 // CHECK-ERROR: saba v0.2d, v1.2d, v2.2d
286 // CHECK-ERROR: error: invalid operand for instruction
287 // CHECK-ERROR: uabd v0.4s, v1.2s, v2.2s
289 // CHECK-ERROR: error: invalid operand for instruction
290 // CHECK-ERROR: sabd v0.4h, v1.8h, v8.8h
293 //----------------------------------------------------------------------
294 // Vector Absolute Difference (Floating Point)
295 //----------------------------------------------------------------------
296 // Mismatched and invalid vector types
297 fabd v0.2s, v1.4s, v2.2d
298 fabd v0.4h, v1.4h, v2.4h
300 // CHECK-ERROR: error: invalid operand for instruction
301 // CHECK-ERROR: fabd v0.2s, v1.4s, v2.2d
303 // CHECK-ERROR: error: invalid operand for instruction
304 // CHECK-ERROR: fabd v0.4h, v1.4h, v2.4h
306 //----------------------------------------------------------------------
307 // Vector Multiply (Polynomial)
308 //----------------------------------------------------------------------
310 // Mismatched and invalid vector types
311 pmul v0.8b, v1.8b, v2.16b
312 pmul v0.2s, v1.2s, v2.2s
314 // CHECK-ERROR: error: invalid operand for instruction
315 // CHECK-ERROR: pmul v0.8b, v1.8b, v2.16b
317 // CHECK-ERROR: error: invalid operand for instruction
318 // CHECK-ERROR: pmul v0.2s, v1.2s, v2.2s
321 //----------------------------------------------------------------------
322 // Scalar Integer Add and Sub
323 //----------------------------------------------------------------------
325 // Mismatched registers
329 // CHECK-ERROR: error: invalid operand for instruction
330 // CHECK-ERROR: add d0, s1, d2
332 // CHECK-ERROR: error: invalid operand for instruction
333 // CHECK-ERROR: sub s1, d1, d2
336 //----------------------------------------------------------------------
337 // Vector Reciprocal Step (Floating Point)
338 //----------------------------------------------------------------------
340 // Mismatched and invalid vector types
341 frecps v0.4s, v1.2d, v2.4s
342 frecps v0.8h, v1.8h, v2.8h
344 // CHECK-ERROR: error: invalid operand for instruction
345 // CHECK-ERROR: frecps v0.4s, v1.2d, v2.4s
347 // CHECK-ERROR: error: invalid operand for instruction
348 // CHECK-ERROR: frecps v0.8h, v1.8h, v2.8h
351 //----------------------------------------------------------------------
352 // Vector Reciprocal Square Root Step (Floating Point)
353 //----------------------------------------------------------------------
355 // Mismatched and invalid vector types
356 frsqrts v0.2d, v1.2d, v2.2s
357 frsqrts v0.4h, v1.4h, v2.4h
359 // CHECK-ERROR: error: invalid operand for instruction
360 // CHECK-ERROR: frsqrts v0.2d, v1.2d, v2.2s
362 // CHECK-ERROR: error: invalid operand for instruction
363 // CHECK-ERROR: frsqrts v0.4h, v1.4h, v2.4h
367 //----------------------------------------------------------------------
368 // Vector Absolute Compare Mask Less Than Or Equal (Floating Point)
369 //----------------------------------------------------------------------
371 // Mismatched and invalid vector types
372 facge v0.2d, v1.2s, v2.2d
373 facge v0.4h, v1.4h, v2.4h
374 facle v0.8h, v1.4h, v2.4h
376 // CHECK-ERROR: error: invalid operand for instruction
377 // CHECK-ERROR: facge v0.2d, v1.2s, v2.2d
379 // CHECK-ERROR: error: invalid operand for instruction
380 // CHECK-ERROR: facge v0.4h, v1.4h, v2.4h
382 // CHECK-ERROR: error: invalid operand for instruction
383 // CHECK-ERROR: facle v0.8h, v1.4h, v2.4h
385 //----------------------------------------------------------------------
386 // Vector Absolute Compare Mask Less Than (Floating Point)
387 //----------------------------------------------------------------------
389 // Mismatched and invalid vector types
390 facgt v0.2d, v1.2d, v2.4s
391 facgt v0.8h, v1.8h, v2.8h
392 faclt v0.8b, v1.8b, v2.8b
394 // CHECK-ERROR: error: invalid operand for instruction
395 // CHECK-ERROR: facgt v0.2d, v1.2d, v2.4s
397 // CHECK-ERROR: error: invalid operand for instruction
398 // CHECK-ERROR: facgt v0.8h, v1.8h, v2.8h
400 // CHECK-ERROR: error: invalid operand for instruction
401 // CHECK-ERROR: faclt v0.8b, v1.8b, v2.8b
405 //----------------------------------------------------------------------
406 // Vector Compare Mask Equal (Integer)
407 //----------------------------------------------------------------------
409 // Mismatched vector types
410 cmeq c0.2d, v1.2d, v2.2s
412 // CHECK-ERROR: error: invalid operand for instruction
413 // CHECK-ERROR: cmeq c0.2d, v1.2d, v2.2s
416 //----------------------------------------------------------------------
417 // Vector Compare Mask Higher or Same (Unsigned Integer)
418 // Vector Compare Mask Less or Same (Unsigned Integer)
419 // CMLS is alias for CMHS with operands reversed.
420 //----------------------------------------------------------------------
422 // Mismatched vector types
423 cmhs c0.4h, v1.8b, v2.8b
424 cmls c0.16b, v1.16b, v2.2d
426 // CHECK-ERROR: error: invalid operand for instruction
427 // CHECK-ERROR: cmhs c0.4h, v1.8b, v2.8b
429 // CHECK-ERROR: error: invalid operand for instruction
430 // CHECK-ERROR: cmls c0.16b, v1.16b, v2.2d
433 //----------------------------------------------------------------------
434 // Vector Compare Mask Greater Than or Equal (Integer)
435 // Vector Compare Mask Less Than or Equal (Integer)
436 // CMLE is alias for CMGE with operands reversed.
437 //----------------------------------------------------------------------
439 // Mismatched vector types
440 cmge c0.8h, v1.8b, v2.8b
441 cmle c0.4h, v1.2s, v2.2s
443 // CHECK-ERROR: error: invalid operand for instruction
444 // CHECK-ERROR: cmge c0.8h, v1.8b, v2.8b
446 // CHECK-ERROR: error: invalid operand for instruction
447 // CHECK-ERROR: cmle c0.4h, v1.2s, v2.2s
450 //----------------------------------------------------------------------
451 // Vector Compare Mask Higher (Unsigned Integer)
452 // Vector Compare Mask Lower (Unsigned Integer)
453 // CMLO is alias for CMHI with operands reversed.
454 //----------------------------------------------------------------------
456 // Mismatched vector types
457 cmhi c0.4s, v1.4s, v2.16b
458 cmlo c0.8b, v1.8b, v2.2s
460 // CHECK-ERROR: error: invalid operand for instruction
461 // CHECK-ERROR: cmhi c0.4s, v1.4s, v2.16b
463 // CHECK-ERROR: error: invalid operand for instruction
464 // CHECK-ERROR: cmlo c0.8b, v1.8b, v2.2s
467 //----------------------------------------------------------------------
468 // Vector Compare Mask Greater Than (Integer)
469 // Vector Compare Mask Less Than (Integer)
470 // CMLT is alias for CMGT with operands reversed.
471 //----------------------------------------------------------------------
473 // Mismatched vector types
474 cmgt c0.8b, v1.4s, v2.16b
475 cmlt c0.8h, v1.16b, v2.4s
477 // CHECK-ERROR: error: invalid operand for instruction
478 // CHECK-ERROR: cmgt c0.8b, v1.4s, v2.16b
480 // CHECK-ERROR: error: invalid operand for instruction
481 // CHECK-ERROR: cmlt c0.8h, v1.16b, v2.4s
484 //----------------------------------------------------------------------
485 // Vector Compare Mask Bitwise Test (Integer)
486 //----------------------------------------------------------------------
488 // Mismatched vector types
489 cmtst c0.16b, v1.16b, v2.4s
491 // CHECK-ERROR: error: invalid operand for instruction
492 // CHECK-ERROR: cmtst c0.16b, v1.16b, v2.4s
495 //----------------------------------------------------------------------
496 // Vector Compare Mask Equal (Floating Point)
497 //----------------------------------------------------------------------
499 // Mismatched and invalid vector types
500 fcmeq v0.2d, v1.2s, v2.2d
501 fcmeq v0.16b, v1.16b, v2.16b
502 fcmeq v0.8b, v1.4h, v2.4h
504 // CHECK-ERROR: error: invalid operand for instruction
505 // CHECK-ERROR: fcmeq v0.2d, v1.2s, v2.2d
507 // CHECK-ERROR: error: invalid operand for instruction
508 // CHECK-ERROR: fcmeq v0.16b, v1.16b, v2.16b
510 // CHECK-ERROR: error: invalid operand for instruction
511 // CHECK-ERROR: fcmeq v0.8b, v1.4h, v2.4h
514 //----------------------------------------------------------------------
515 // Vector Compare Mask Greater Than Or Equal (Floating Point)
516 // Vector Compare Mask Less Than Or Equal (Floating Point)
517 // FCMLE is alias for FCMGE with operands reversed.
518 //----------------------------------------------------------------------
520 // Mismatched and invalid vector types
521 fcmge v31.4s, v29.2s, v28.4s
522 fcmge v3.8b, v8.2s, v12.2s
523 fcmle v17.8h, v15.2d, v13.2d
525 // CHECK-ERROR: error: invalid operand for instruction
526 // CHECK-ERROR: fcmge v31.4s, v29.2s, v28.4s
528 // CHECK-ERROR: error: invalid operand for instruction
529 // CHECK-ERROR: fcmge v3.8b, v8.2s, v12.2s
531 // CHECK-ERROR: error: invalid operand for instruction
532 // CHECK-ERROR: fcmle v17.8h, v15.2d, v13.2d
535 //----------------------------------------------------------------------
536 // Vector Compare Mask Greater Than (Floating Point)
537 // Vector Compare Mask Less Than (Floating Point)
538 // FCMLT is alias for FCMGT with operands reversed.
539 //----------------------------------------------------------------------
541 // Mismatched and invalid vector types
542 fcmgt v0.2d, v31.2s, v16.2s
543 fcmgt v4.4s, v7.4s, v15.4h
544 fcmlt v29.2d, v5.2d, v2.16b
546 // CHECK-ERROR: error: invalid operand for instruction
547 // CHECK-ERROR: fcmgt v0.2d, v31.2s, v16.2s
549 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
550 // CHECK-ERROR: fcmgt v4.4s, v7.4s, v15.4h
552 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
553 // CHECK-ERROR: fcmlt v29.2d, v5.2d, v2.16b
556 //----------------------------------------------------------------------
557 // Vector Compare Mask Equal to Zero (Integer)
558 //----------------------------------------------------------------------
559 // Mismatched vector types and invalid imm
560 // Mismatched vector types
561 cmeq c0.2d, v1.2s, #0
562 cmeq c0.2d, v1.2d, #1
564 // CHECK-ERROR: error: invalid operand for instruction
565 // CHECK-ERROR: cmeq c0.2d, v1.2s, #0
567 // CHECK-ERROR: error: invalid operand for instruction
568 // CHECK-ERROR: cmeq c0.2d, v1.2d, #1
571 //----------------------------------------------------------------------
572 // Vector Compare Mask Greater Than or Equal to Zero (Signed Integer)
573 //----------------------------------------------------------------------
574 // Mismatched vector types and invalid imm
575 cmge c0.8h, v1.8b, #0
576 cmge c0.4s, v1.4s, #-1
578 // CHECK-ERROR: error: invalid operand for instruction
579 // CHECK-ERROR: cmge c0.8h, v1.8b, #0
581 // CHECK-ERROR: error: invalid operand for instruction
582 // CHECK-ERROR: cmge c0.4s, v1.4s, #-1
585 //----------------------------------------------------------------------
586 // Vector Compare Mask Greater Than Zero (Signed Integer)
587 //----------------------------------------------------------------------
588 // Mismatched vector types and invalid imm
589 cmgt c0.8b, v1.4s, #0
590 cmgt c0.8b, v1.8b, #-255
592 // CHECK-ERROR: error: invalid operand for instruction
593 // CHECK-ERROR: cmgt c0.8b, v1.4s, #0
595 // CHECK-ERROR: error: invalid operand for instruction
596 // CHECK-ERROR: cmgt c0.8b, v1.8b, #-255
599 //----------------------------------------------------------------------
600 // Vector Compare Mask Less Than or Equal To Zero (Signed Integer)
601 //----------------------------------------------------------------------
602 // Mismatched vector types and invalid imm
603 cmle c0.4h, v1.2s, #0
604 cmle c0.16b, v1.16b, #16
606 // CHECK-ERROR: error: invalid operand for instruction
607 // CHECK-ERROR: cmle c0.4h, v1.2s, #0
609 // CHECK-ERROR: error: invalid operand for instruction
610 // CHECK-ERROR: cmle c0.16b, v1.16b, #16
612 //----------------------------------------------------------------------
613 // Vector Compare Mask Less Than Zero (Signed Integer)
614 //----------------------------------------------------------------------
615 // Mismatched vector types and invalid imm
616 cmlt c0.8h, v1.16b, #0
617 cmlt c0.8h, v1.8h, #-15
619 // CHECK-ERROR: error: invalid operand for instruction
620 // CHECK-ERROR: cmlt c0.8h, v1.16b, #0
622 // CHECK-ERROR: error: invalid operand for instruction
623 // CHECK-ERROR: cmlt c0.8h, v1.8h, #-15
626 //----------------------------------------------------------------------
627 // Vector Compare Mask Equal to Zero (Floating Point)
628 //----------------------------------------------------------------------
630 // Mismatched and invalid vector types, invalid imm
631 fcmeq v0.2d, v1.2s, #0.0
632 fcmeq v0.16b, v1.16b, #0.0
633 fcmeq v0.8b, v1.4h, #1.0
634 fcmeq v0.8b, v1.4h, #1
636 // CHECK-ERROR: error: invalid operand for instruction
637 // CHECK-ERROR: fcmeq v0.2d, v1.2s, #0.0
639 // CHECK-ERROR: error: invalid operand for instruction
640 // CHECK-ERROR: fcmeq v0.16b, v1.16b, #0.0
642 // CHECK-ERROR: error: invalid operand for instruction
643 // CHECK-ERROR: fcmeq v0.8b, v1.4h, #1.0
645 // CHECK-ERROR: error: Expected floating-point immediate
646 // CHECK-ERROR: fcmeq v0.8b, v1.4h, #1
648 //----------------------------------------------------------------------
649 // Vector Compare Mask Greater Than or Equal to Zero (Floating Point)
650 //----------------------------------------------------------------------
652 // Mismatched and invalid vector types, invalid imm
653 fcmge v31.4s, v29.2s, #0.0
654 fcmge v3.8b, v8.2s, #0.0
655 fcmle v17.8h, v15.2d, #-1.0
656 fcmle v17.8h, v15.2d, #0
658 // CHECK-ERROR: error: invalid operand for instruction
659 // CHECK-ERROR: fcmge v31.4s, v29.2s, #0.0
661 // CHECK-ERROR: error: invalid operand for instruction
662 // CHECK-ERROR: fcmge v3.8b, v8.2s, #0.0
664 // CHECK-ERROR: error: invalid operand for instruction
665 // CHECK-ERROR: fcmle v17.8h, v15.2d, #-1.0
667 // CHECK-ERROR: error: Expected floating-point immediate
668 // CHECK-ERROR: fcmle v17.8h, v15.2d, #0
670 //----------------------------------------------------------------------
671 // Vector Compare Mask Greater Than Zero (Floating Point)
672 //----------------------------------------------------------------------
673 // Mismatched and invalid vector types, invalid imm
674 fcmgt v0.2d, v31.2s, #0.0
675 fcmgt v4.4s, v7.4h, #0.0
676 fcmlt v29.2d, v5.2d, #255.0
677 fcmlt v29.2d, v5.2d, #255
679 // CHECK-ERROR: error: invalid operand for instruction
680 // CHECK-ERROR: fcmgt v0.2d, v31.2s, #0.0
682 // CHECK-ERROR: error: invalid operand for instruction
683 // CHECK-ERROR: fcmgt v4.4s, v7.4h, #0.0
685 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
686 // CHECK-ERROR: fcmlt v29.2d, v5.2d, #255.0
688 // CHECK-ERROR: error: Expected floating-point immediate
689 // CHECK-ERROR: fcmlt v29.2d, v5.2d, #255
692 //----------------------------------------------------------------------
693 // Vector Compare Mask Less Than or Equal To Zero (Floating Point)
694 //----------------------------------------------------------------------
695 // Mismatched and invalid vector types, invalid imm
696 fcmge v31.4s, v29.2s, #0.0
697 fcmge v3.8b, v8.2s, #0.0
698 fcmle v17.2d, v15.2d, #15.0
699 fcmle v17.2d, v15.2d, #15
701 // CHECK-ERROR: error: invalid operand for instruction
702 // CHECK-ERROR: fcmge v31.4s, v29.2s, #0.0
704 // CHECK-ERROR: error: invalid operand for instruction
705 // CHECK-ERROR: fcmge v3.8b, v8.2s, #0.0
707 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
708 // CHECK-ERROR: fcmle v17.2d, v15.2d, #15.0
710 // CHECK-ERROR: error: Expected floating-point immediate
711 // CHECK-ERROR: fcmle v17.2d, v15.2d, #15
714 //----------------------------------------------------------------------
715 // Vector Compare Mask Less Than Zero (Floating Point)
716 //----------------------------------------------------------------------
717 // Mismatched and invalid vector types, invalid imm
718 fcmgt v0.2d, v31.2s, #0.0
719 fcmgt v4.4s, v7.4h, #0.0
720 fcmlt v29.2d, v5.2d, #16.0
721 fcmlt v29.2d, v5.2d, #2
723 // CHECK-ERROR: error: invalid operand for instruction
724 // CHECK-ERROR: fcmgt v0.2d, v31.2s, #0.0
726 // CHECK-ERROR: error: invalid operand for instruction
727 // CHECK-ERROR: fcmgt v4.4s, v7.4h, #0.0
729 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
730 // CHECK-ERROR: fcmlt v29.2d, v5.2d, #16.0
732 // CHECK-ERROR: error: Expected floating-point immediate
733 // CHECK-ERROR: fcmlt v29.2d, v5.2d, #2
736 /-----------------------------------------------------------------------
737 // Vector Integer Halving Add (Signed)
738 // Vector Integer Halving Add (Unsigned)
739 // Vector Integer Halving Sub (Signed)
740 // Vector Integer Halving Sub (Unsigned)
741 //----------------------------------------------------------------------
742 // Mismatched and invalid vector types (2d)
743 shadd v0.2d, v1.2d, v2.2d
744 uhadd v4.2s, v5.2s, v5.4h
745 shsub v11.4h, v12.8h, v13.4h
746 uhsub v31.16b, v29.8b, v28.8b
748 // CHECK-ERROR: error: invalid operand for instruction
749 // CHECK-ERROR: shadd v0.2d, v1.2d, v2.2d
751 // CHECK-ERROR: error: invalid operand for instruction
752 // CHECK-ERROR: uhadd v4.2s, v5.2s, v5.4h
754 // CHECK-ERROR: error: invalid operand for instruction
755 // CHECK-ERROR: shsub v11.4h, v12.8h, v13.4h
757 // CHECK-ERROR: error: invalid operand for instruction
758 // CHECK-ERROR: uhsub v31.16b, v29.8b, v28.8b
761 //----------------------------------------------------------------------
762 // Vector Integer Rouding Halving Add (Signed)
763 // Vector Integer Rouding Halving Add (Unsigned)
764 //----------------------------------------------------------------------
766 // Mismatched and invalid vector types (2d)
767 srhadd v0.2s, v1.2s, v2.2d
768 urhadd v0.16b, v1.16b, v2.8h
770 // CHECK-ERROR: error: invalid operand for instruction
771 // CHECK-ERROR: srhadd v0.2s, v1.2s, v2.2d
773 // CHECK-ERROR: error: invalid operand for instruction
774 // CHECK-ERROR: urhadd v0.16b, v1.16b, v2.8h
777 //----------------------------------------------------------------------
778 // Vector Integer Saturating Add (Signed)
779 // Vector Integer Saturating Add (Unsigned)
780 // Vector Integer Saturating Sub (Signed)
781 // Vector Integer Saturating Sub (Unsigned)
782 //----------------------------------------------------------------------
784 // Mismatched vector types
785 sqadd v0.2s, v1.2s, v2.2d
786 uqadd v31.8h, v1.4h, v2.4h
787 sqsub v10.8h, v1.16b, v2.16b
788 uqsub v31.8b, v1.8b, v2.4s
790 // CHECK-ERROR: error: invalid operand for instruction
791 // CHECK-ERROR: sqadd v0.2s, v1.2s, v2.2d
793 // CHECK-ERROR: error: invalid operand for instruction
794 // CHECK-ERROR: uqadd v31.8h, v1.4h, v2.4h
796 // CHECK-ERROR: error: invalid operand for instruction
797 // CHECK-ERROR: sqsub v10.8h, v1.16b, v2.16b
799 // CHECK-ERROR: error: invalid operand for instruction
800 // CHECK-ERROR: uqsub v31.8b, v1.8b, v2.4s
803 //----------------------------------------------------------------------
804 // Scalar Integer Saturating Add (Signed)
805 // Scalar Integer Saturating Add (Unsigned)
806 // Scalar Integer Saturating Sub (Signed)
807 // Scalar Integer Saturating Sub (Unsigned)
808 //----------------------------------------------------------------------
810 // Mismatched registers
816 // CHECK-ERROR: error: invalid operand for instruction
817 // CHECK-ERROR: sqadd d0, s31, d2
819 // CHECK-ERROR: error: invalid operand for instruction
820 // CHECK-ERROR: uqadd s0, s1, d2
822 // CHECK-ERROR: error: invalid operand for instruction
823 // CHECK-ERROR: sqsub b0, b2, s18
825 // CHECK-ERROR: error: invalid operand for instruction
826 // CHECK-ERROR: uqsub h1, h2, d2
830 //----------------------------------------------------------------------
831 // Vector Shift Left (Signed and Unsigned Integer)
832 //----------------------------------------------------------------------
833 // Mismatched vector types
834 sshl v0.4s, v15.2s, v16.2s
835 ushl v1.16b, v25.16b, v6.8h
837 // CHECK-ERROR: error: invalid operand for instruction
838 // CHECK-ERROR: sshl v0.4s, v15.2s, v16.2s
840 // CHECK-ERROR: error: invalid operand for instruction
841 // CHECK-ERROR: ushl v1.16b, v25.16b, v6.8h
844 //----------------------------------------------------------------------
845 // Vector Saturating Shift Left (Signed and Unsigned Integer)
846 //----------------------------------------------------------------------
847 // Mismatched vector types
848 sqshl v0.2s, v15.4s, v16.2d
849 uqshl v1.8b, v25.4h, v6.8h
851 // CHECK-ERROR: error: invalid operand for instruction
852 // CHECK-ERROR: sqshl v0.2s, v15.4s, v16.2d
854 // CHECK-ERROR: error: invalid operand for instruction
855 // CHECK-ERROR: uqshl v1.8b, v25.4h, v6.8h
858 //----------------------------------------------------------------------
859 // Vector Rouding Shift Left (Signed and Unsigned Integer)
860 //----------------------------------------------------------------------
861 // Mismatched vector types
862 srshl v0.8h, v15.8h, v16.16b
863 urshl v1.2d, v25.2d, v6.4s
865 // CHECK-ERROR: error: invalid operand for instruction
866 // CHECK-ERROR: srshl v0.8h, v15.8h, v16.16b
868 // CHECK-ERROR: error: invalid operand for instruction
869 // CHECK-ERROR: urshl v1.2d, v25.2d, v6.4s
872 //----------------------------------------------------------------------
873 // Vector Saturating Rouding Shift Left (Signed and Unsigned Integer)
874 //----------------------------------------------------------------------
875 // Mismatched vector types
876 sqrshl v0.2s, v15.8h, v16.16b
877 uqrshl v1.4h, v25.4h, v6.2d
879 // CHECK-ERROR: error: invalid operand for instruction
880 // CHECK-ERROR: sqrshl v0.2s, v15.8h, v16.16b
882 // CHECK-ERROR: error: invalid operand for instruction
883 // CHECK-ERROR: uqrshl v1.4h, v25.4h, v6.2d
886 //----------------------------------------------------------------------
887 // Scalar Integer Shift Left (Signed, Unsigned)
888 //----------------------------------------------------------------------
889 // Mismatched and invalid vector types
893 // CHECK-ERROR: error: invalid operand for instruction
894 // CHECK-ERROR: sshl d0, d1, s2
896 // CHECK-ERROR: error: invalid operand for instruction
897 // CHECK-ERROR: ushl b2, b0, b1
900 //----------------------------------------------------------------------
901 // Scalar Integer Saturating Shift Left (Signed, Unsigned)
902 //----------------------------------------------------------------------
904 // Mismatched vector types
910 // CHECK-ERROR: error: invalid operand for instruction
911 // CHECK-ERROR: sqshl b0, b1, s0
913 // CHECK-ERROR: error: invalid operand for instruction
914 // CHECK-ERROR: uqshl h0, h1, b0
916 // CHECK-ERROR: error: invalid operand for instruction
917 // CHECK-ERROR: sqshl s0, s1, h0
919 // CHECK-ERROR: error: invalid operand for instruction
920 // CHECK-ERROR: uqshl d0, d1, b0
923 //----------------------------------------------------------------------
924 // Scalar Integer Rouding Shift Left (Signed, Unsigned)
925 //----------------------------------------------------------------------
926 // Mismatched and invalid vector types
930 // CHECK-ERROR: error: invalid operand for instruction
931 // CHECK-ERROR: srshl h0, h1, h2
933 // CHECK-ERROR: error: invalid operand for instruction
934 // CHECK-ERROR: urshl s0, s1, s2
938 //----------------------------------------------------------------------
939 // Scalar Integer Saturating Rounding Shift Left (Signed, Unsigned)
940 //----------------------------------------------------------------------
942 // Mismatched vector types
948 // CHECK-ERROR: error: invalid operand for instruction
949 // CHECK-ERROR: sqrshl b0, b1, s0
951 // CHECK-ERROR: error: invalid operand for instruction
952 // CHECK-ERROR: uqrshl h0, h1, b0
954 // CHECK-ERROR: error: invalid operand for instruction
955 // CHECK-ERROR: sqrshl s0, s1, h0
957 // CHECK-ERROR: error: invalid operand for instruction
958 // CHECK-ERROR: uqrshl d0, d1, b0
962 //----------------------------------------------------------------------
963 // Vector Maximum (Signed, Unsigned)
964 //----------------------------------------------------------------------
965 // Mismatched and invalid vector types
966 smax v0.2d, v1.2d, v2.2d
967 umax v0.4h, v1.4h, v2.2s
969 // CHECK-ERROR: error: invalid operand for instruction
970 // CHECK-ERROR: smax v0.2d, v1.2d, v2.2d
972 // CHECK-ERROR: error: invalid operand for instruction
973 // CHECK-ERROR: umax v0.4h, v1.4h, v2.2s
976 //----------------------------------------------------------------------
977 // Vector Minimum (Signed, Unsigned)
978 //----------------------------------------------------------------------
979 // Mismatched and invalid vector types
980 smin v0.2d, v1.2d, v2.2d
981 umin v0.2s, v1.2s, v2.8b
983 // CHECK-ERROR: error: invalid operand for instruction
984 // CHECK-ERROR: smin v0.2d, v1.2d, v2.2d
986 // CHECK-ERROR: error: invalid operand for instruction
987 // CHECK-ERROR: umin v0.2s, v1.2s, v2.8b
991 //----------------------------------------------------------------------
992 // Vector Maximum (Floating Point)
993 //----------------------------------------------------------------------
994 // Mismatched and invalid vector types
995 fmax v0.2s, v1.2s, v2.4s
996 fmax v0.8b, v1.8b, v2.8b
998 // CHECK-ERROR: error: invalid operand for instruction
999 // CHECK-ERROR: fmax v0.2s, v1.2s, v2.4s
1001 // CHECK-ERROR: error: invalid operand for instruction
1002 // CHECK-ERROR: fmax v0.8b, v1.8b, v2.8b
1004 //----------------------------------------------------------------------
1005 // Vector Minimum (Floating Point)
1006 //----------------------------------------------------------------------
1007 // Mismatched and invalid vector types
1008 fmin v0.4s, v1.4s, v2.2d
1009 fmin v0.8h, v1.8h, v2.8h
1011 // CHECK-ERROR: error: invalid operand for instruction
1012 // CHECK-ERROR: fmin v0.4s, v1.4s, v2.2d
1014 // CHECK-ERROR: error: invalid operand for instruction
1015 // CHECK-ERROR: fmin v0.8h, v1.8h, v2.8h
1018 //----------------------------------------------------------------------
1019 // Vector maxNum (Floating Point)
1020 //----------------------------------------------------------------------
1021 // Mismatched and invalid vector types
1022 fmaxnm v0.2s, v1.2s, v2.2d
1023 fmaxnm v0.4h, v1.8h, v2.4h
1025 // CHECK-ERROR: error: invalid operand for instruction
1026 // CHECK-ERROR: fmaxnm v0.2s, v1.2s, v2.2d
1028 // CHECK-ERROR: error: invalid operand for instruction
1029 // CHECK-ERROR: fmaxnm v0.4h, v1.8h, v2.4h
1032 //----------------------------------------------------------------------
1033 // Vector minNum (Floating Point)
1034 //----------------------------------------------------------------------
1035 // Mismatched and invalid vector types
1036 fminnm v0.4s, v1.2s, v2.4s
1037 fminnm v0.16b, v0.16b, v0.16b
1039 // CHECK-ERROR: error: invalid operand for instruction
1040 // CHECK-ERROR: fminnm v0.4s, v1.2s, v2.4s
1042 // CHECK-ERROR: error: invalid operand for instruction
1043 // CHECK-ERROR: fminnm v0.16b, v0.16b, v0.16b
1047 //----------------------------------------------------------------------
1048 // Vector Maximum Pairwise (Signed, Unsigned)
1049 //----------------------------------------------------------------------
1050 // Mismatched and invalid vector types
1051 smaxp v0.2d, v1.2d, v2.2d
1052 umaxp v0.4h, v1.4h, v2.2s
1054 // CHECK-ERROR: error: invalid operand for instruction
1055 // CHECK-ERROR: smaxp v0.2d, v1.2d, v2.2d
1057 // CHECK-ERROR: error: invalid operand for instruction
1058 // CHECK-ERROR: umaxp v0.4h, v1.4h, v2.2s
1061 //----------------------------------------------------------------------
1062 // Vector Minimum Pairwise (Signed, Unsigned)
1063 //----------------------------------------------------------------------
1064 // Mismatched and invalid vector types
1065 sminp v0.2d, v1.2d, v2.2d
1066 uminp v0.2s, v1.2s, v2.8b
1068 // CHECK-ERROR: error: invalid operand for instruction
1069 // CHECK-ERROR: sminp v0.2d, v1.2d, v2.2d
1071 // CHECK-ERROR: error: invalid operand for instruction
1072 // CHECK-ERROR: uminp v0.2s, v1.2s, v2.8b
1076 //----------------------------------------------------------------------
1077 // Vector Maximum Pairwise (Floating Point)
1078 //----------------------------------------------------------------------
1079 // Mismatched and invalid vector types
1080 fmaxp v0.2s, v1.2s, v2.4s
1081 fmaxp v0.8b, v1.8b, v2.8b
1083 // CHECK-ERROR: error: invalid operand for instruction
1084 // CHECK-ERROR: fmaxp v0.2s, v1.2s, v2.4s
1086 // CHECK-ERROR: error: invalid operand for instruction
1087 // CHECK-ERROR: fmaxp v0.8b, v1.8b, v2.8b
1089 //----------------------------------------------------------------------
1090 // Vector Minimum Pairwise (Floating Point)
1091 //----------------------------------------------------------------------
1092 // Mismatched and invalid vector types
1093 fminp v0.4s, v1.4s, v2.2d
1094 fminp v0.8h, v1.8h, v2.8h
1096 // CHECK-ERROR: error: invalid operand for instruction
1097 // CHECK-ERROR: fminp v0.4s, v1.4s, v2.2d
1099 // CHECK-ERROR: error: invalid operand for instruction
1100 // CHECK-ERROR: fminp v0.8h, v1.8h, v2.8h
1103 //----------------------------------------------------------------------
1104 // Vector maxNum Pairwise (Floating Point)
1105 //----------------------------------------------------------------------
1106 // Mismatched and invalid vector types
1107 fmaxnmp v0.2s, v1.2s, v2.2d
1108 fmaxnmp v0.4h, v1.8h, v2.4h
1110 // CHECK-ERROR: error: invalid operand for instruction
1111 // CHECK-ERROR: fmaxnmp v0.2s, v1.2s, v2.2d
1113 // CHECK-ERROR: error: invalid operand for instruction
1114 // CHECK-ERROR: fmaxnmp v0.4h, v1.8h, v2.4h
1117 //----------------------------------------------------------------------
1118 // Vector minNum Pairwise (Floating Point)
1119 //----------------------------------------------------------------------
1120 // Mismatched and invalid vector types
1121 fminnmp v0.4s, v1.2s, v2.4s
1122 fminnmp v0.16b, v0.16b, v0.16b
1124 // CHECK-ERROR: error: invalid operand for instruction
1125 // CHECK-ERROR: fminnmp v0.4s, v1.2s, v2.4s
1127 // CHECK-ERROR: error: invalid operand for instruction
1128 // CHECK-ERROR: fminnmp v0.16b, v0.16b, v0.16b
1132 //----------------------------------------------------------------------
1133 // Vector Add Pairwise (Integer)
1134 //----------------------------------------------------------------------
1136 // Mismatched vector types
1137 addp v0.16b, v1.8b, v2.8b
1139 // CHECK-ERROR: error: invalid operand for instruction
1140 // CHECK-ERROR: addp v0.16b, v1.8b, v2.8b
1143 //----------------------------------------------------------------------
1144 // Vector Add Pairwise (Floating Point)
1145 //----------------------------------------------------------------------
1146 // Mismatched and invalid vector types
1147 faddp v0.16b, v1.8b, v2.8b
1148 faddp v0.2d, v1.2d, v2.8h
1150 // CHECK-ERROR: error: invalid operand for instruction
1151 // CHECK-ERROR: faddp v0.16b, v1.8b, v2.8b
1153 // CHECK-ERROR: error: invalid operand for instruction
1154 // CHECK-ERROR: faddp v0.2d, v1.2d, v2.8h
1158 //----------------------------------------------------------------------
1159 // Vector Saturating Doubling Multiply High
1160 //----------------------------------------------------------------------
1161 // Mismatched and invalid vector types
1162 sqdmulh v2.4h, v25.8h, v3.4h
1163 sqdmulh v12.2d, v5.2d, v13.2d
1164 sqdmulh v3.8b, v1.8b, v30.8b
1166 // CHECK-ERROR: error: invalid operand for instruction
1167 // CHECK-ERROR: sqdmulh v2.4h, v25.8h, v3.4h
1169 // CHECK-ERROR: error: invalid operand for instruction
1170 // CHECK-ERROR: sqdmulh v12.2d, v5.2d, v13.2d
1172 // CHECK-ERROR: error: invalid operand for instruction
1173 // CHECK-ERROR: sqdmulh v3.8b, v1.8b, v30.8b
1176 //----------------------------------------------------------------------
1177 // Vector Saturating Rouding Doubling Multiply High
1178 //----------------------------------------------------------------------
1179 // Mismatched and invalid vector types
1180 sqrdmulh v2.2s, v25.4s, v3.4s
1181 sqrdmulh v12.16b, v5.16b, v13.16b
1182 sqrdmulh v3.4h, v1.4h, v30.2d
1185 // CHECK-ERROR: error: invalid operand for instruction
1186 // CHECK-ERROR: sqrdmulh v2.2s, v25.4s, v3.4s
1188 // CHECK-ERROR: error: invalid operand for instruction
1189 // CHECK-ERROR: sqrdmulh v12.16b, v5.16b, v13.16b
1191 // CHECK-ERROR: error: invalid operand for instruction
1192 // CHECK-ERROR: sqrdmulh v3.4h, v1.4h, v30.2d
1195 //----------------------------------------------------------------------
1196 // Vector Multiply Extended
1197 //----------------------------------------------------------------------
1198 // Mismatched and invalid vector types
1199 fmulx v21.2s, v5.2s, v13.2d
1200 fmulx v1.4h, v25.4h, v3.4h
1202 // CHECK-ERROR: error: invalid operand for instruction
1203 // CHECK-ERROR: fmulx v21.2s, v5.2s, v13.2d
1205 // CHECK-ERROR: error: invalid operand for instruction
1206 // CHECK-ERROR: fmulx v1.4h, v25.4h, v3.4h
1209 //------------------------------------------------------------------------------
1210 // Vector Shift Left by Immediate
1211 //------------------------------------------------------------------------------
1212 // Mismatched vector types and out of range
1213 shl v0.4s, v15,2s, #3
1214 shl v0.2d, v17.4s, #3
1215 shl v0.8b, v31.8b, #-1
1216 shl v0.8b, v31.8b, #8
1217 shl v0.4s, v21.4s, #32
1218 shl v0.2d, v1.2d, #64
1220 // CHECK-ERROR: error: expected comma before next operand
1221 // CHECK-ERROR: shl v0.4s, v15,2s, #3
1223 // CHECK-ERROR: error: invalid operand for instruction
1224 // CHECK-ERROR: shl v0.2d, v17.4s, #3
1226 // CHECK-ERROR: error: expected integer in range [0, 7]
1227 // CHECK-ERROR: shl v0.8b, v31.8b, #-1
1229 // CHECK-ERROR: error: expected integer in range [0, 7]
1230 // CHECK-ERROR: shl v0.8b, v31.8b, #8
1232 // CHECK-ERROR: error: expected integer in range [0, 31]
1233 // CHECK-ERROR: shl v0.4s, v21.4s, #32
1235 // CHECK-ERROR: error: expected integer in range [0, 63]
1236 // CHECK-ERROR: shl v0.2d, v1.2d, #64
1239 //----------------------------------------------------------------------
1240 // Vector Shift Left Long by Immediate
1241 //----------------------------------------------------------------------
1242 // Mismatched vector types
1243 sshll v0.4s, v15.2s, #3
1244 ushll v1.16b, v25.16b, #6
1245 sshll2 v0.2d, v3.8s, #15
1246 ushll2 v1.4s, v25.4s, #7
1249 sshll v0.8h, v1.8b, #-1
1250 sshll v0.8h, v1.8b, #9
1251 ushll v0.4s, v1.4h, #17
1252 ushll v0.2d, v1.2s, #33
1253 sshll2 v0.8h, v1.16b, #9
1254 sshll2 v0.4s, v1.8h, #17
1255 ushll2 v0.2d, v1.4s, #33
1257 // CHECK-ERROR: error: invalid operand for instruction
1258 // CHECK-ERROR: sshll v0.4s, v15.2s, #3
1260 // CHECK-ERROR: error: invalid operand for instruction
1261 // CHECK-ERROR: ushll v1.16b, v25.16b, #6
1263 // CHECK-ERROR: error: invalid operand for instruction
1264 // CHECK-ERROR: sshll2 v0.2d, v3.8s, #15
1266 // CHECK-ERROR: error: invalid operand for instruction
1267 // CHECK-ERROR: ushll2 v1.4s, v25.4s, #7
1269 // CHECK-ERROR: error: expected integer in range [0, 7]
1270 // CHECK-ERROR: sshll v0.8h, v1.8b, #-1
1272 // CHECK-ERROR: error: expected integer in range [0, 7]
1273 // CHECK-ERROR: sshll v0.8h, v1.8b, #9
1275 // CHECK-ERROR: error: expected integer in range [0, 15]
1276 // CHECK-ERROR: ushll v0.4s, v1.4h, #17
1278 // CHECK-ERROR: error: expected integer in range [0, 31]
1279 // CHECK-ERROR: ushll v0.2d, v1.2s, #33
1281 // CHECK-ERROR: error: expected integer in range [0, 7]
1282 // CHECK-ERROR: sshll2 v0.8h, v1.16b, #9
1284 // CHECK-ERROR: error: expected integer in range [0, 15]
1285 // CHECK-ERROR: sshll2 v0.4s, v1.8h, #17
1287 // CHECK-ERROR: error: expected integer in range [0, 31]
1288 // CHECK-ERROR: ushll2 v0.2d, v1.4s, #33
1292 //------------------------------------------------------------------------------
1293 // Vector shift right by immediate
1294 //------------------------------------------------------------------------------
1295 sshr v0.8b, v1.8h, #3
1296 sshr v0.4h, v1.4s, #3
1297 sshr v0.2s, v1.2d, #3
1298 sshr v0.16b, v1.16b, #9
1299 sshr v0.8h, v1.8h, #17
1300 sshr v0.4s, v1.4s, #33
1301 sshr v0.2d, v1.2d, #65
1303 // CHECK-ERROR: error: invalid operand for instruction
1304 // CHECK-ERROR: sshr v0.8b, v1.8h, #3
1306 // CHECK-ERROR: error: invalid operand for instruction
1307 // CHECK-ERROR: sshr v0.4h, v1.4s, #3
1309 // CHECK-ERROR: error: invalid operand for instruction
1310 // CHECK-ERROR: sshr v0.2s, v1.2d, #3
1312 // CHECK-ERROR: error: expected integer in range [1, 8]
1313 // CHECK-ERROR: sshr v0.16b, v1.16b, #9
1315 // CHECK-ERROR: error: expected integer in range [1, 16]
1316 // CHECK-ERROR: sshr v0.8h, v1.8h, #17
1318 // CHECK-ERROR: error: expected integer in range [1, 32]
1319 // CHECK-ERROR: sshr v0.4s, v1.4s, #33
1321 // CHECK-ERROR: error: expected integer in range [1, 64]
1322 // CHECK-ERROR: sshr v0.2d, v1.2d, #65
1325 //------------------------------------------------------------------------------
1326 // Vector shift right by immediate
1327 //------------------------------------------------------------------------------
1328 ushr v0.8b, v1.8h, #3
1329 ushr v0.4h, v1.4s, #3
1330 ushr v0.2s, v1.2d, #3
1331 ushr v0.16b, v1.16b, #9
1332 ushr v0.8h, v1.8h, #17
1333 ushr v0.4s, v1.4s, #33
1334 ushr v0.2d, v1.2d, #65
1336 // CHECK-ERROR: error: invalid operand for instruction
1337 // CHECK-ERROR: ushr v0.8b, v1.8h, #3
1339 // CHECK-ERROR: error: invalid operand for instruction
1340 // CHECK-ERROR: ushr v0.4h, v1.4s, #3
1342 // CHECK-ERROR: error: invalid operand for instruction
1343 // CHECK-ERROR: ushr v0.2s, v1.2d, #3
1345 // CHECK-ERROR: error: expected integer in range [1, 8]
1346 // CHECK-ERROR: ushr v0.16b, v1.16b, #9
1348 // CHECK-ERROR: error: expected integer in range [1, 16]
1349 // CHECK-ERROR: ushr v0.8h, v1.8h, #17
1351 // CHECK-ERROR: error: expected integer in range [1, 32]
1352 // CHECK-ERROR: ushr v0.4s, v1.4s, #33
1354 // CHECK-ERROR: error: expected integer in range [1, 64]
1355 // CHECK-ERROR: ushr v0.2d, v1.2d, #65
1358 //------------------------------------------------------------------------------
1359 // Vector shift right and accumulate by immediate
1360 //------------------------------------------------------------------------------
1361 ssra v0.8b, v1.8h, #3
1362 ssra v0.4h, v1.4s, #3
1363 ssra v0.2s, v1.2d, #3
1364 ssra v0.16b, v1.16b, #9
1365 ssra v0.8h, v1.8h, #17
1366 ssra v0.4s, v1.4s, #33
1367 ssra v0.2d, v1.2d, #65
1369 // CHECK-ERROR: error: invalid operand for instruction
1370 // CHECK-ERROR: ssra v0.8b, v1.8h, #3
1372 // CHECK-ERROR: error: invalid operand for instruction
1373 // CHECK-ERROR: ssra v0.4h, v1.4s, #3
1375 // CHECK-ERROR: error: invalid operand for instruction
1376 // CHECK-ERROR: ssra v0.2s, v1.2d, #3
1378 // CHECK-ERROR: error: expected integer in range [1, 8]
1379 // CHECK-ERROR: ssra v0.16b, v1.16b, #9
1381 // CHECK-ERROR: error: expected integer in range [1, 16]
1382 // CHECK-ERROR: ssra v0.8h, v1.8h, #17
1384 // CHECK-ERROR: error: expected integer in range [1, 32]
1385 // CHECK-ERROR: ssra v0.4s, v1.4s, #33
1387 // CHECK-ERROR: error: expected integer in range [1, 64]
1388 // CHECK-ERROR: ssra v0.2d, v1.2d, #65
1391 //------------------------------------------------------------------------------
1392 // Vector shift right and accumulate by immediate
1393 //------------------------------------------------------------------------------
1394 usra v0.8b, v1.8h, #3
1395 usra v0.4h, v1.4s, #3
1396 usra v0.2s, v1.2d, #3
1397 usra v0.16b, v1.16b, #9
1398 usra v0.8h, v1.8h, #17
1399 usra v0.4s, v1.4s, #33
1400 usra v0.2d, v1.2d, #65
1402 // CHECK-ERROR: error: invalid operand for instruction
1403 // CHECK-ERROR: usra v0.8b, v1.8h, #3
1405 // CHECK-ERROR: error: invalid operand for instruction
1406 // CHECK-ERROR: usra v0.4h, v1.4s, #3
1408 // CHECK-ERROR: error: invalid operand for instruction
1409 // CHECK-ERROR: usra v0.2s, v1.2d, #3
1411 // CHECK-ERROR: error: expected integer in range [1, 8]
1412 // CHECK-ERROR: usra v0.16b, v1.16b, #9
1414 // CHECK-ERROR: error: expected integer in range [1, 16]
1415 // CHECK-ERROR: usra v0.8h, v1.8h, #17
1417 // CHECK-ERROR: error: expected integer in range [1, 32]
1418 // CHECK-ERROR: usra v0.4s, v1.4s, #33
1420 // CHECK-ERROR: error: expected integer in range [1, 64]
1421 // CHECK-ERROR: usra v0.2d, v1.2d, #65
1424 //------------------------------------------------------------------------------
1425 // Vector rounding shift right by immediate
1426 //------------------------------------------------------------------------------
1427 srshr v0.8b, v1.8h, #3
1428 srshr v0.4h, v1.4s, #3
1429 srshr v0.2s, v1.2d, #3
1430 srshr v0.16b, v1.16b, #9
1431 srshr v0.8h, v1.8h, #17
1432 srshr v0.4s, v1.4s, #33
1433 srshr v0.2d, v1.2d, #65
1435 // CHECK-ERROR: error: invalid operand for instruction
1436 // CHECK-ERROR: srshr v0.8b, v1.8h, #3
1438 // CHECK-ERROR: error: invalid operand for instruction
1439 // CHECK-ERROR: srshr v0.4h, v1.4s, #3
1441 // CHECK-ERROR: error: invalid operand for instruction
1442 // CHECK-ERROR: srshr v0.2s, v1.2d, #3
1444 // CHECK-ERROR: error: expected integer in range [1, 8]
1445 // CHECK-ERROR: srshr v0.16b, v1.16b, #9
1447 // CHECK-ERROR: error: expected integer in range [1, 16]
1448 // CHECK-ERROR: srshr v0.8h, v1.8h, #17
1450 // CHECK-ERROR: error: expected integer in range [1, 32]
1451 // CHECK-ERROR: srshr v0.4s, v1.4s, #33
1453 // CHECK-ERROR: error: expected integer in range [1, 64]
1454 // CHECK-ERROR: srshr v0.2d, v1.2d, #65
1457 //------------------------------------------------------------------------------
1458 // Vecotr rounding shift right by immediate
1459 //------------------------------------------------------------------------------
1460 urshr v0.8b, v1.8h, #3
1461 urshr v0.4h, v1.4s, #3
1462 urshr v0.2s, v1.2d, #3
1463 urshr v0.16b, v1.16b, #9
1464 urshr v0.8h, v1.8h, #17
1465 urshr v0.4s, v1.4s, #33
1466 urshr v0.2d, v1.2d, #65
1468 // CHECK-ERROR: error: invalid operand for instruction
1469 // CHECK-ERROR: urshr v0.8b, v1.8h, #3
1471 // CHECK-ERROR: error: invalid operand for instruction
1472 // CHECK-ERROR: urshr v0.4h, v1.4s, #3
1474 // CHECK-ERROR: error: invalid operand for instruction
1475 // CHECK-ERROR: urshr v0.2s, v1.2d, #3
1477 // CHECK-ERROR: error: expected integer in range [1, 8]
1478 // CHECK-ERROR: urshr v0.16b, v1.16b, #9
1480 // CHECK-ERROR: error: expected integer in range [1, 16]
1481 // CHECK-ERROR: urshr v0.8h, v1.8h, #17
1483 // CHECK-ERROR: error: expected integer in range [1, 32]
1484 // CHECK-ERROR: urshr v0.4s, v1.4s, #33
1486 // CHECK-ERROR: error: expected integer in range [1, 64]
1487 // CHECK-ERROR: urshr v0.2d, v1.2d, #65
1490 //------------------------------------------------------------------------------
1491 // Vector rounding shift right and accumulate by immediate
1492 //------------------------------------------------------------------------------
1493 srsra v0.8b, v1.8h, #3
1494 srsra v0.4h, v1.4s, #3
1495 srsra v0.2s, v1.2d, #3
1496 srsra v0.16b, v1.16b, #9
1497 srsra v0.8h, v1.8h, #17
1498 srsra v0.4s, v1.4s, #33
1499 srsra v0.2d, v1.2d, #65
1501 // CHECK-ERROR: error: invalid operand for instruction
1502 // CHECK-ERROR: srsra v0.8b, v1.8h, #3
1504 // CHECK-ERROR: error: invalid operand for instruction
1505 // CHECK-ERROR: srsra v0.4h, v1.4s, #3
1507 // CHECK-ERROR: error: invalid operand for instruction
1508 // CHECK-ERROR: srsra v0.2s, v1.2d, #3
1510 // CHECK-ERROR: error: expected integer in range [1, 8]
1511 // CHECK-ERROR: srsra v0.16b, v1.16b, #9
1513 // CHECK-ERROR: error: expected integer in range [1, 16]
1514 // CHECK-ERROR: srsra v0.8h, v1.8h, #17
1516 // CHECK-ERROR: error: expected integer in range [1, 32]
1517 // CHECK-ERROR: srsra v0.4s, v1.4s, #33
1519 // CHECK-ERROR: error: expected integer in range [1, 64]
1520 // CHECK-ERROR: srsra v0.2d, v1.2d, #65
1523 //------------------------------------------------------------------------------
1524 // Vector rounding shift right and accumulate by immediate
1525 //------------------------------------------------------------------------------
1526 ursra v0.8b, v1.8h, #3
1527 ursra v0.4h, v1.4s, #3
1528 ursra v0.2s, v1.2d, #3
1529 ursra v0.16b, v1.16b, #9
1530 ursra v0.8h, v1.8h, #17
1531 ursra v0.4s, v1.4s, #33
1532 ursra v0.2d, v1.2d, #65
1534 // CHECK-ERROR: error: invalid operand for instruction
1535 // CHECK-ERROR: ursra v0.8b, v1.8h, #3
1537 // CHECK-ERROR: error: invalid operand for instruction
1538 // CHECK-ERROR: ursra v0.4h, v1.4s, #3
1540 // CHECK-ERROR: error: invalid operand for instruction
1541 // CHECK-ERROR: ursra v0.2s, v1.2d, #3
1543 // CHECK-ERROR: error: expected integer in range [1, 8]
1544 // CHECK-ERROR: ursra v0.16b, v1.16b, #9
1546 // CHECK-ERROR: error: expected integer in range [1, 16]
1547 // CHECK-ERROR: ursra v0.8h, v1.8h, #17
1549 // CHECK-ERROR: error: expected integer in range [1, 32]
1550 // CHECK-ERROR: ursra v0.4s, v1.4s, #33
1552 // CHECK-ERROR: error: expected integer in range [1, 64]
1553 // CHECK-ERROR: ursra v0.2d, v1.2d, #65
1556 //------------------------------------------------------------------------------
1557 // Vector shift right and insert by immediate
1558 //------------------------------------------------------------------------------
1559 sri v0.8b, v1.8h, #3
1560 sri v0.4h, v1.4s, #3
1561 sri v0.2s, v1.2d, #3
1562 sri v0.16b, v1.16b, #9
1563 sri v0.8h, v1.8h, #17
1564 sri v0.4s, v1.4s, #33
1565 sri v0.2d, v1.2d, #65
1567 // CHECK-ERROR: error: invalid operand for instruction
1568 // CHECK-ERROR: sri v0.8b, v1.8h, #3
1570 // CHECK-ERROR: error: invalid operand for instruction
1571 // CHECK-ERROR: sri v0.4h, v1.4s, #3
1573 // CHECK-ERROR: error: invalid operand for instruction
1574 // CHECK-ERROR: sri v0.2s, v1.2d, #3
1576 // CHECK-ERROR: error: expected integer in range [1, 8]
1577 // CHECK-ERROR: sri v0.16b, v1.16b, #9
1579 // CHECK-ERROR: error: expected integer in range [1, 16]
1580 // CHECK-ERROR: sri v0.8h, v1.8h, #17
1582 // CHECK-ERROR: error: expected integer in range [1, 32]
1583 // CHECK-ERROR: sri v0.4s, v1.4s, #33
1585 // CHECK-ERROR: error: expected integer in range [1, 64]
1586 // CHECK-ERROR: sri v0.2d, v1.2d, #65
1589 //------------------------------------------------------------------------------
1590 // Vector shift left and insert by immediate
1591 //------------------------------------------------------------------------------
1592 sli v0.8b, v1.8h, #3
1593 sli v0.4h, v1.4s, #3
1594 sli v0.2s, v1.2d, #3
1595 sli v0.16b, v1.16b, #8
1596 sli v0.8h, v1.8h, #16
1597 sli v0.4s, v1.4s, #32
1598 sli v0.2d, v1.2d, #64
1600 // CHECK-ERROR: error: invalid operand for instruction
1601 // CHECK-ERROR: sli v0.8b, v1.8h, #3
1603 // CHECK-ERROR: error: invalid operand for instruction
1604 // CHECK-ERROR: sli v0.4h, v1.4s, #3
1606 // CHECK-ERROR: error: invalid operand for instruction
1607 // CHECK-ERROR: sli v0.2s, v1.2d, #3
1609 // CHECK-ERROR: error: expected integer in range [0, 7]
1610 // CHECK-ERROR: sli v0.16b, v1.16b, #8
1612 // CHECK-ERROR: error: expected integer in range [0, 15]
1613 // CHECK-ERROR: sli v0.8h, v1.8h, #16
1615 // CHECK-ERROR: error: expected integer in range [0, 31]
1616 // CHECK-ERROR: sli v0.4s, v1.4s, #32
1618 // CHECK-ERROR: error: expected integer in range [0, 63]
1619 // CHECK-ERROR: sli v0.2d, v1.2d, #64
1622 //------------------------------------------------------------------------------
1623 // Vector saturating shift left unsigned by immediate
1624 //------------------------------------------------------------------------------
1625 sqshlu v0.8b, v1.8h, #3
1626 sqshlu v0.4h, v1.4s, #3
1627 sqshlu v0.2s, v1.2d, #3
1628 sqshlu v0.16b, v1.16b, #8
1629 sqshlu v0.8h, v1.8h, #16
1630 sqshlu v0.4s, v1.4s, #32
1631 sqshlu v0.2d, v1.2d, #64
1633 // CHECK-ERROR: error: invalid operand for instruction
1634 // CHECK-ERROR: sqshlu v0.8b, v1.8h, #3
1636 // CHECK-ERROR: error: invalid operand for instruction
1637 // CHECK-ERROR: sqshlu v0.4h, v1.4s, #3
1639 // CHECK-ERROR: error: invalid operand for instruction
1640 // CHECK-ERROR: sqshlu v0.2s, v1.2d, #3
1642 // CHECK-ERROR: error: expected integer in range [0, 7]
1643 // CHECK-ERROR: sqshlu v0.16b, v1.16b, #8
1645 // CHECK-ERROR: error: expected integer in range [0, 15]
1646 // CHECK-ERROR: sqshlu v0.8h, v1.8h, #16
1648 // CHECK-ERROR: error: expected integer in range [0, 31]
1649 // CHECK-ERROR: sqshlu v0.4s, v1.4s, #32
1651 // CHECK-ERROR: error: expected integer in range [0, 63]
1652 // CHECK-ERROR: sqshlu v0.2d, v1.2d, #64
1655 //------------------------------------------------------------------------------
1656 // Vector saturating shift left by immediate
1657 //------------------------------------------------------------------------------
1658 sqshl v0.8b, v1.8h, #3
1659 sqshl v0.4h, v1.4s, #3
1660 sqshl v0.2s, v1.2d, #3
1661 sqshl v0.16b, v1.16b, #8
1662 sqshl v0.8h, v1.8h, #16
1663 sqshl v0.4s, v1.4s, #32
1664 sqshl v0.2d, v1.2d, #64
1666 // CHECK-ERROR: error: invalid operand for instruction
1667 // CHECK-ERROR: sqshl v0.8b, v1.8h, #3
1669 // CHECK-ERROR: error: invalid operand for instruction
1670 // CHECK-ERROR: sqshl v0.4h, v1.4s, #3
1672 // CHECK-ERROR: error: invalid operand for instruction
1673 // CHECK-ERROR: sqshl v0.2s, v1.2d, #3
1675 // CHECK-ERROR: error: expected integer in range [0, 7]
1676 // CHECK-ERROR: sqshl v0.16b, v1.16b, #8
1678 // CHECK-ERROR: error: expected integer in range [0, 15]
1679 // CHECK-ERROR: sqshl v0.8h, v1.8h, #16
1681 // CHECK-ERROR: error: expected integer in range [0, 31]
1682 // CHECK-ERROR: sqshl v0.4s, v1.4s, #32
1684 // CHECK-ERROR: error: expected integer in range [0, 63]
1685 // CHECK-ERROR: sqshl v0.2d, v1.2d, #64
1688 //------------------------------------------------------------------------------
1689 // Vector saturating shift left by immediate
1690 //------------------------------------------------------------------------------
1691 uqshl v0.8b, v1.8h, #3
1692 uqshl v0.4h, v1.4s, #3
1693 uqshl v0.2s, v1.2d, #3
1694 uqshl v0.16b, v1.16b, #8
1695 uqshl v0.8h, v1.8h, #16
1696 uqshl v0.4s, v1.4s, #32
1697 uqshl v0.2d, v1.2d, #64
1699 // CHECK-ERROR: error: invalid operand for instruction
1700 // CHECK-ERROR: uqshl v0.8b, v1.8h, #3
1702 // CHECK-ERROR: error: invalid operand for instruction
1703 // CHECK-ERROR: uqshl v0.4h, v1.4s, #3
1705 // CHECK-ERROR: error: invalid operand for instruction
1706 // CHECK-ERROR: uqshl v0.2s, v1.2d, #3
1708 // CHECK-ERROR: error: expected integer in range [0, 7]
1709 // CHECK-ERROR: uqshl v0.16b, v1.16b, #8
1711 // CHECK-ERROR: error: expected integer in range [0, 15]
1712 // CHECK-ERROR: uqshl v0.8h, v1.8h, #16
1714 // CHECK-ERROR: error: expected integer in range [0, 31]
1715 // CHECK-ERROR: uqshl v0.4s, v1.4s, #32
1717 // CHECK-ERROR: error: expected integer in range [0, 63]
1718 // CHECK-ERROR: uqshl v0.2d, v1.2d, #64
1721 //------------------------------------------------------------------------------
1722 // Vector shift right narrow by immediate
1723 //------------------------------------------------------------------------------
1724 shrn v0.8b, v1.8b, #3
1725 shrn v0.4h, v1.4h, #3
1726 shrn v0.2s, v1.2s, #3
1727 shrn2 v0.16b, v1.8h, #17
1728 shrn2 v0.8h, v1.4s, #33
1729 shrn2 v0.4s, v1.2d, #65
1731 // CHECK-ERROR: error: invalid operand for instruction
1732 // CHECK-ERROR: shrn v0.8b, v1.8b, #3
1734 // CHECK-ERROR: error: invalid operand for instruction
1735 // CHECK-ERROR: shrn v0.4h, v1.4h, #3
1737 // CHECK-ERROR: error: invalid operand for instruction
1738 // CHECK-ERROR: shrn v0.2s, v1.2s, #3
1740 // CHECK-ERROR: error: expected integer in range [1, 8]
1741 // CHECK-ERROR: shrn2 v0.16b, v1.8h, #17
1743 // CHECK-ERROR: error: expected integer in range [1, 16]
1744 // CHECK-ERROR: shrn2 v0.8h, v1.4s, #33
1746 // CHECK-ERROR: error: expected integer in range [1, 32]
1747 // CHECK-ERROR: shrn2 v0.4s, v1.2d, #65
1750 //------------------------------------------------------------------------------
1751 // Vector saturating shift right unsigned narrow by immediate
1752 //------------------------------------------------------------------------------
1753 sqshrun v0.8b, v1.8b, #3
1754 sqshrun v0.4h, v1.4h, #3
1755 sqshrun v0.2s, v1.2s, #3
1756 sqshrun2 v0.16b, v1.8h, #17
1757 sqshrun2 v0.8h, v1.4s, #33
1758 sqshrun2 v0.4s, v1.2d, #65
1760 // CHECK-ERROR: error: invalid operand for instruction
1761 // CHECK-ERROR: sqshrun v0.8b, v1.8b, #3
1763 // CHECK-ERROR: error: invalid operand for instruction
1764 // CHECK-ERROR: sqshrun v0.4h, v1.4h, #3
1766 // CHECK-ERROR: error: invalid operand for instruction
1767 // CHECK-ERROR: sqshrun v0.2s, v1.2s, #3
1769 // CHECK-ERROR: error: expected integer in range [1, 8]
1770 // CHECK-ERROR: sqshrun2 v0.16b, v1.8h, #17
1772 // CHECK-ERROR: error: expected integer in range [1, 16]
1773 // CHECK-ERROR: sqshrun2 v0.8h, v1.4s, #33
1775 // CHECK-ERROR: error: expected integer in range [1, 32]
1776 // CHECK-ERROR: sqshrun2 v0.4s, v1.2d, #65
1779 //------------------------------------------------------------------------------
1780 // Vector rounding shift right narrow by immediate
1781 //------------------------------------------------------------------------------
1782 rshrn v0.8b, v1.8b, #3
1783 rshrn v0.4h, v1.4h, #3
1784 rshrn v0.2s, v1.2s, #3
1785 rshrn2 v0.16b, v1.8h, #17
1786 rshrn2 v0.8h, v1.4s, #33
1787 rshrn2 v0.4s, v1.2d, #65
1789 // CHECK-ERROR: error: invalid operand for instruction
1790 // CHECK-ERROR: rshrn v0.8b, v1.8b, #3
1792 // CHECK-ERROR: error: invalid operand for instruction
1793 // CHECK-ERROR: rshrn v0.4h, v1.4h, #3
1795 // CHECK-ERROR: error: invalid operand for instruction
1796 // CHECK-ERROR: rshrn v0.2s, v1.2s, #3
1798 // CHECK-ERROR: error: expected integer in range [1, 8]
1799 // CHECK-ERROR: rshrn2 v0.16b, v1.8h, #17
1801 // CHECK-ERROR: error: expected integer in range [1, 16]
1802 // CHECK-ERROR: rshrn2 v0.8h, v1.4s, #33
1804 // CHECK-ERROR: error: expected integer in range [1, 32]
1805 // CHECK-ERROR: rshrn2 v0.4s, v1.2d, #65
1808 //------------------------------------------------------------------------------
1809 // Vector saturating shift right rounded unsigned narrow by immediate
1810 //------------------------------------------------------------------------------
1811 sqrshrun v0.8b, v1.8b, #3
1812 sqrshrun v0.4h, v1.4h, #3
1813 sqrshrun v0.2s, v1.2s, #3
1814 sqrshrun2 v0.16b, v1.8h, #17
1815 sqrshrun2 v0.8h, v1.4s, #33
1816 sqrshrun2 v0.4s, v1.2d, #65
1818 // CHECK-ERROR: error: invalid operand for instruction
1819 // CHECK-ERROR: sqrshrun v0.8b, v1.8b, #3
1821 // CHECK-ERROR: error: invalid operand for instruction
1822 // CHECK-ERROR: sqrshrun v0.4h, v1.4h, #3
1824 // CHECK-ERROR: error: invalid operand for instruction
1825 // CHECK-ERROR: sqrshrun v0.2s, v1.2s, #3
1827 // CHECK-ERROR: error: expected integer in range [1, 8]
1828 // CHECK-ERROR: sqrshrun2 v0.16b, v1.8h, #17
1830 // CHECK-ERROR: error: expected integer in range [1, 16]
1831 // CHECK-ERROR: sqrshrun2 v0.8h, v1.4s, #33
1833 // CHECK-ERROR: error: expected integer in range [1, 32]
1834 // CHECK-ERROR: sqrshrun2 v0.4s, v1.2d, #65
1837 //------------------------------------------------------------------------------
1838 // Vector saturating shift right narrow by immediate
1839 //------------------------------------------------------------------------------
1840 sqshrn v0.8b, v1.8b, #3
1841 sqshrn v0.4h, v1.4h, #3
1842 sqshrn v0.2s, v1.2s, #3
1843 sqshrn2 v0.16b, v1.8h, #17
1844 sqshrn2 v0.8h, v1.4s, #33
1845 sqshrn2 v0.4s, v1.2d, #65
1847 // CHECK-ERROR: error: invalid operand for instruction
1848 // CHECK-ERROR: sqshrn v0.8b, v1.8b, #3
1850 // CHECK-ERROR: error: invalid operand for instruction
1851 // CHECK-ERROR: sqshrn v0.4h, v1.4h, #3
1853 // CHECK-ERROR: error: invalid operand for instruction
1854 // CHECK-ERROR: sqshrn v0.2s, v1.2s, #3
1856 // CHECK-ERROR: error: expected integer in range [1, 8]
1857 // CHECK-ERROR: sqshrn2 v0.16b, v1.8h, #17
1859 // CHECK-ERROR: error: expected integer in range [1, 16]
1860 // CHECK-ERROR: sqshrn2 v0.8h, v1.4s, #33
1862 // CHECK-ERROR: error: expected integer in range [1, 32]
1863 // CHECK-ERROR: sqshrn2 v0.4s, v1.2d, #65
1866 //------------------------------------------------------------------------------
1867 // Vector saturating shift right narrow by immediate
1868 //------------------------------------------------------------------------------
1869 uqshrn v0.8b, v1.8b, #3
1870 uqshrn v0.4h, v1.4h, #3
1871 uqshrn v0.2s, v1.2s, #3
1872 uqshrn2 v0.16b, v1.8h, #17
1873 uqshrn2 v0.8h, v1.4s, #33
1874 uqshrn2 v0.4s, v1.2d, #65
1876 // CHECK-ERROR: error: invalid operand for instruction
1877 // CHECK-ERROR: uqshrn v0.8b, v1.8b, #3
1879 // CHECK-ERROR: error: invalid operand for instruction
1880 // CHECK-ERROR: uqshrn v0.4h, v1.4h, #3
1882 // CHECK-ERROR: error: invalid operand for instruction
1883 // CHECK-ERROR: uqshrn v0.2s, v1.2s, #3
1885 // CHECK-ERROR: error: expected integer in range [1, 8]
1886 // CHECK-ERROR: uqshrn2 v0.16b, v1.8h, #17
1888 // CHECK-ERROR: error: expected integer in range [1, 16]
1889 // CHECK-ERROR: uqshrn2 v0.8h, v1.4s, #33
1891 // CHECK-ERROR: error: expected integer in range [1, 32]
1892 // CHECK-ERROR: uqshrn2 v0.4s, v1.2d, #65
1895 //------------------------------------------------------------------------------
1896 // Vector saturating shift right rounded narrow by immediate
1897 //------------------------------------------------------------------------------
1898 sqrshrn v0.8b, v1.8b, #3
1899 sqrshrn v0.4h, v1.4h, #3
1900 sqrshrn v0.2s, v1.2s, #3
1901 sqrshrn2 v0.16b, v1.8h, #17
1902 sqrshrn2 v0.8h, v1.4s, #33
1903 sqrshrn2 v0.4s, v1.2d, #65
1905 // CHECK-ERROR: error: invalid operand for instruction
1906 // CHECK-ERROR: sqrshrn v0.8b, v1.8b, #3
1908 // CHECK-ERROR: error: invalid operand for instruction
1909 // CHECK-ERROR: sqrshrn v0.4h, v1.4h, #3
1911 // CHECK-ERROR: error: invalid operand for instruction
1912 // CHECK-ERROR: sqrshrn v0.2s, v1.2s, #3
1914 // CHECK-ERROR: error: expected integer in range [1, 8]
1915 // CHECK-ERROR: sqrshrn2 v0.16b, v1.8h, #17
1917 // CHECK-ERROR: error: expected integer in range [1, 16]
1918 // CHECK-ERROR: sqrshrn2 v0.8h, v1.4s, #33
1920 // CHECK-ERROR: error: expected integer in range [1, 32]
1921 // CHECK-ERROR: sqrshrn2 v0.4s, v1.2d, #65
1924 //------------------------------------------------------------------------------
1925 // Vector saturating shift right rounded narrow by immediate
1926 //------------------------------------------------------------------------------
1927 uqrshrn v0.8b, v1.8b, #3
1928 uqrshrn v0.4h, v1.4h, #3
1929 uqrshrn v0.2s, v1.2s, #3
1930 uqrshrn2 v0.16b, v1.8h, #17
1931 uqrshrn2 v0.8h, v1.4s, #33
1932 uqrshrn2 v0.4s, v1.2d, #65
1934 // CHECK-ERROR: error: invalid operand for instruction
1935 // CHECK-ERROR: uqrshrn v0.8b, v1.8b, #3
1937 // CHECK-ERROR: error: invalid operand for instruction
1938 // CHECK-ERROR: uqrshrn v0.4h, v1.4h, #3
1940 // CHECK-ERROR: error: invalid operand for instruction
1941 // CHECK-ERROR: uqrshrn v0.2s, v1.2s, #3
1943 // CHECK-ERROR: error: expected integer in range [1, 8]
1944 // CHECK-ERROR: uqrshrn2 v0.16b, v1.8h, #17
1946 // CHECK-ERROR: error: expected integer in range [1, 16]
1947 // CHECK-ERROR: uqrshrn2 v0.8h, v1.4s, #33
1949 // CHECK-ERROR: error: expected integer in range [1, 32]
1950 // CHECK-ERROR: uqrshrn2 v0.4s, v1.2d, #65
1953 //------------------------------------------------------------------------------
1954 // Fixed-point convert to floating-point
1955 //------------------------------------------------------------------------------
1956 scvtf v0.2s, v1.2d, #3
1957 scvtf v0.4s, v1.4h, #3
1958 scvtf v0.2d, v1.2s, #3
1959 ucvtf v0.2s, v1.2s, #33
1960 ucvtf v0.4s, v1.4s, #33
1961 ucvtf v0.2d, v1.2d, #65
1963 // CHECK-ERROR: error: invalid operand for instruction
1964 // CHECK-ERROR: scvtf v0.2s, v1.2d, #3
1966 // CHECK-ERROR: error: invalid operand for instruction
1967 // CHECK-ERROR: scvtf v0.4s, v1.4h, #3
1969 // CHECK-ERROR: error: invalid operand for instruction
1970 // CHECK-ERROR: scvtf v0.2d, v1.2s, #3
1972 // CHECK-ERROR: error: expected integer in range [1, 32]
1973 // CHECK-ERROR: ucvtf v0.2s, v1.2s, #33
1975 // CHECK-ERROR: error: expected integer in range [1, 32]
1976 // CHECK-ERROR: ucvtf v0.4s, v1.4s, #33
1978 // CHECK-ERROR: error: expected integer in range [1, 64]
1979 // CHECK-ERROR: ucvtf v0.2d, v1.2d, #65
1982 //------------------------------------------------------------------------------
1983 // Floating-point convert to fixed-point
1984 //------------------------------------------------------------------------------
1985 fcvtzs v0.2s, v1.2d, #3
1986 fcvtzs v0.4s, v1.4h, #3
1987 fcvtzs v0.2d, v1.2s, #3
1988 fcvtzu v0.2s, v1.2s, #33
1989 fcvtzu v0.4s, v1.4s, #33
1990 fcvtzu v0.2d, v1.2d, #65
1992 // CHECK-ERROR: error: invalid operand for instruction
1993 // CHECK-ERROR: fcvtzs v0.2s, v1.2d, #3
1995 // CHECK-ERROR: error: invalid operand for instruction
1996 // CHECK-ERROR: fcvtzs v0.4s, v1.4h, #3
1998 // CHECK-ERROR: error: invalid operand for instruction
1999 // CHECK-ERROR: fcvtzs v0.2d, v1.2s, #3
2001 // CHECK-ERROR: error: expected integer in range [1, 32]
2002 // CHECK-ERROR: fcvtzu v0.2s, v1.2s, #33
2004 // CHECK-ERROR: error: expected integer in range [1, 32]
2005 // CHECK-ERROR: fcvtzu v0.4s, v1.4s, #33
2007 // CHECK-ERROR: error: expected integer in range [1, 64]
2008 // CHECK-ERROR: fcvtzu v0.2d, v1.2d, #65