[AArch64 NEON] Accept both #0.0 and #0 for comparing with floating point zero in...
[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: invalid operand for instruction
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: invalid operand for instruction
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: invalid operand for instruction
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: invalid operand for instruction
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: invalid operand for instruction
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 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
591 // CHECK-ERROR:        fcmgt v4.4s, v7.4s, v15.4h
592 // CHECK-ERROR:                                ^
593 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
594 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, v2.16b
595 // CHECK-ERROR:                                ^
596
597 //----------------------------------------------------------------------
598 // Vector Compare Mask Equal to Zero (Integer)
599 //----------------------------------------------------------------------
600         // Mismatched vector types and invalid imm
601          // Mismatched vector types
602          cmeq c0.2d, v1.2s, #0
603          cmeq c0.2d, v1.2d, #1
604
605 // CHECK-ERROR: error: invalid operand for instruction
606 // CHECK-ERROR:        cmeq c0.2d, v1.2s, #0
607 // CHECK-ERROR:                       ^
608 // CHECK-ERROR: error: invalid operand for instruction
609 // CHECK-ERROR:        cmeq c0.2d, v1.2d, #1
610 // CHECK-ERROR:                            ^
611
612 //----------------------------------------------------------------------
613 // Vector Compare Mask Greater Than or Equal to Zero (Signed Integer)
614 //----------------------------------------------------------------------
615         // Mismatched vector types and invalid imm
616          cmge c0.8h, v1.8b, #0
617          cmge c0.4s, v1.4s, #-1
618
619 // CHECK-ERROR: error: invalid operand for instruction
620 // CHECK-ERROR:        cmge c0.8h, v1.8b, #0
621 // CHECK-ERROR:                       ^
622 // CHECK-ERROR: error: invalid operand for instruction
623 // CHECK-ERROR:         cmge c0.4s, v1.4s, #-1
624 // CHECK-ERROR:                             ^
625
626 //----------------------------------------------------------------------
627 // Vector Compare Mask Greater Than Zero (Signed Integer)
628 //----------------------------------------------------------------------
629         // Mismatched vector types and invalid imm
630          cmgt c0.8b, v1.4s, #0
631          cmgt c0.8b, v1.8b, #-255
632
633 // CHECK-ERROR: error: invalid operand for instruction
634 // CHECK-ERROR:         cmgt c0.8b, v1.4s, #0
635 // CHECK-ERROR:                        ^
636 // CHECK-ERROR: error: invalid operand for instruction
637 // CHECK-ERROR:         cmgt c0.8b, v1.8b, #-255
638 // CHECK-ERROR:                             ^
639
640 //----------------------------------------------------------------------
641 // Vector Compare Mask Less Than or Equal To Zero (Signed Integer)
642 //----------------------------------------------------------------------
643         // Mismatched vector types and invalid imm
644          cmle c0.4h, v1.2s, #0
645          cmle c0.16b, v1.16b, #16
646
647 // CHECK-ERROR: error: invalid operand for instruction
648 // CHECK-ERROR:        cmle c0.4h, v1.2s, #0
649 // CHECK-ERROR:                       ^
650 // CHECK-ERROR: error: invalid operand for instruction
651 // CHECK-ERROR:         cmle c0.16b, v1.16b, #16
652 // CHECK-ERROR:                               ^
653 //----------------------------------------------------------------------
654 // Vector Compare Mask Less Than Zero (Signed Integer)
655 //----------------------------------------------------------------------
656         // Mismatched vector types and invalid imm
657          cmlt c0.8h, v1.16b, #0
658          cmlt c0.8h, v1.8h, #-15
659
660 // CHECK-ERROR: error: invalid operand for instruction
661 // CHECK-ERROR:         cmlt c0.8h, v1.16b, #0
662 // CHECK-ERROR:                        ^
663 // CHECK-ERROR: error: invalid operand for instruction
664 // CHECK-ERROR:         cmlt c0.8h, v1.8h, #-15
665 // CHECK-ERROR:                             ^
666
667 //----------------------------------------------------------------------
668 // Vector Compare Mask Equal to Zero (Floating Point)
669 //----------------------------------------------------------------------
670
671         // Mismatched and invalid vector types, invalid imm
672         fcmeq v0.2d, v1.2s, #0.0
673         fcmeq v0.16b, v1.16b, #0.0
674         fcmeq v0.8b, v1.4h, #1.0
675         fcmeq v0.8b, v1.4h, #1
676
677 // CHECK-ERROR: error: invalid operand for instruction
678 // CHECK-ERROR:        fcmeq v0.2d, v1.2s, #0.0
679 // CHECK-ERROR:                        ^
680 // CHECK-ERROR: error: invalid operand for instruction
681 // CHECK-ERROR:        fcmeq v0.16b, v1.16b, #0.0
682 // CHECK-ERROR:                 ^
683 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
684 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1.0
685 // CHECK-ERROR:                             ^
686 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
687 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1
688 // CHECK-ERROR:                             ^
689 //----------------------------------------------------------------------
690 // Vector Compare Mask Greater Than or Equal to Zero (Floating Point)
691 //----------------------------------------------------------------------
692
693         // Mismatched and invalid vector types, invalid imm
694          fcmge v31.4s, v29.2s, #0.0
695          fcmge v3.8b, v8.2s, #0.0
696          fcmle v17.8h, v15.2d, #-1.0
697          fcmle v17.8h, v15.2d, #2
698
699 // CHECK-ERROR: error: invalid operand for instruction
700 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
701 // CHECK-ERROR:                          ^
702 // CHECK-ERROR: error: invalid operand for instruction
703 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
704 // CHECK-ERROR:                 ^
705 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
706 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #-1.0
707 // CHECK-ERROR:                               ^
708 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
709 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #2
710 // CHECK-ERROR:                               ^
711 //----------------------------------------------------------------------
712 // Vector Compare Mask Greater Than Zero (Floating Point)
713 //----------------------------------------------------------------------
714         // Mismatched and invalid vector types, invalid imm
715          fcmgt v0.2d, v31.2s, #0.0
716          fcmgt v4.4s, v7.4h, #0.0
717          fcmlt v29.2d, v5.2d, #255.0
718          fcmlt v29.2d, v5.2d, #255
719
720 // CHECK-ERROR: error: invalid operand for instruction
721 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
722 // CHECK-ERROR:                         ^
723 // CHECK-ERROR: error: invalid operand for instruction
724 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
725 // CHECK-ERROR:                        ^
726 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
727 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255.0
728 // CHECK-ERROR:                              ^
729 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
730 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255
731 // CHECK-ERROR:                              ^
732
733 //----------------------------------------------------------------------
734 // Vector Compare Mask Less Than or Equal To Zero (Floating Point)
735 //----------------------------------------------------------------------
736         // Mismatched and invalid vector types, invalid imm
737          fcmge v31.4s, v29.2s, #0.0
738          fcmge v3.8b, v8.2s, #0.0
739          fcmle v17.2d, v15.2d, #15.0
740          fcmle v17.2d, v15.2d, #15
741
742 // CHECK-ERROR: error: invalid operand for instruction
743 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
744 // CHECK-ERROR:                          ^
745 // CHECK-ERROR: error: invalid operand for instruction
746 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
747 // CHECK-ERROR:                 ^
748 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
749 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15.0
750 // CHECK-ERROR:                               ^
751 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
752 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15
753 // CHECK-ERROR:                              ^
754
755 //----------------------------------------------------------------------
756 // Vector Compare Mask Less Than Zero (Floating Point)
757 //----------------------------------------------------------------------
758         // Mismatched and invalid vector types, invalid imm
759          fcmgt v0.2d, v31.2s, #0.0
760          fcmgt v4.4s, v7.4h, #0.0
761          fcmlt v29.2d, v5.2d, #16.0
762          fcmlt v29.2d, v5.2d, #2
763
764 // CHECK-ERROR: error: invalid operand for instruction
765 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
766 // CHECK-ERROR:                         ^
767 // CHECK-ERROR: error: invalid operand for instruction
768 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
769 // CHECK-ERROR:                        ^
770 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
771 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #16.0
772 // CHECK-ERROR:                              ^
773 // CHECK-ERROR: error: only #0.0 is acceptable as immediate
774 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #2
775 // CHECK-ERROR:                              ^
776
777 /-----------------------------------------------------------------------
778 // Vector Integer Halving Add (Signed)
779 // Vector Integer Halving Add (Unsigned)
780 // Vector Integer Halving Sub (Signed)
781 // Vector Integer Halving Sub (Unsigned)
782 //----------------------------------------------------------------------
783         // Mismatched and invalid vector types (2d)
784         shadd v0.2d, v1.2d, v2.2d
785         uhadd v4.2s, v5.2s, v5.4h
786         shsub v11.4h, v12.8h, v13.4h
787         uhsub v31.16b, v29.8b, v28.8b
788
789 // CHECK-ERROR: error: invalid operand for instruction
790 // CHECK-ERROR:        shadd v0.2d, v1.2d, v2.2d
791 // CHECK-ERROR:                 ^
792 // CHECK-ERROR: error: invalid operand for instruction
793 // CHECK-ERROR:        uhadd v4.2s, v5.2s, v5.4h
794 // CHECK-ERROR:                               ^
795 // CHECK-ERROR: error: invalid operand for instruction
796 // CHECK-ERROR:        shsub v11.4h, v12.8h, v13.4h
797 // CHECK-ERROR:                          ^
798 // CHECK-ERROR: error: invalid operand for instruction
799 // CHECK-ERROR:        uhsub v31.16b, v29.8b, v28.8b
800 // CHECK-ERROR:                          ^
801
802 //----------------------------------------------------------------------
803 // Vector Integer Rouding Halving Add (Signed)
804 // Vector Integer Rouding Halving Add (Unsigned)
805 //----------------------------------------------------------------------
806
807         // Mismatched and invalid vector types (2d)
808         srhadd v0.2s, v1.2s, v2.2d
809         urhadd v0.16b, v1.16b, v2.8h
810
811 // CHECK-ERROR: error: invalid operand for instruction
812 // CHECK-ERROR:        srhadd v0.2s, v1.2s, v2.2d
813 // CHECK-ERROR:                                ^
814 // CHECK-ERROR: error: invalid operand for instruction
815 // CHECK-ERROR:        urhadd v0.16b, v1.16b, v2.8h
816 // CHECK-ERROR:                                  ^
817
818 //----------------------------------------------------------------------
819 // Vector Integer Saturating Add (Signed)
820 // Vector Integer Saturating Add (Unsigned)
821 // Vector Integer Saturating Sub (Signed)
822 // Vector Integer Saturating Sub (Unsigned)
823 //----------------------------------------------------------------------
824
825         // Mismatched vector types
826         sqadd v0.2s, v1.2s, v2.2d
827         uqadd v31.8h, v1.4h, v2.4h
828         sqsub v10.8h, v1.16b, v2.16b
829         uqsub v31.8b, v1.8b, v2.4s
830
831 // CHECK-ERROR: error: invalid operand for instruction
832 // CHECK-ERROR:        sqadd v0.2s, v1.2s, v2.2d
833 // CHECK-ERROR:                               ^
834 // CHECK-ERROR: error: invalid operand for instruction
835 // CHECK-ERROR:        uqadd v31.8h, v1.4h, v2.4h
836 // CHECK-ERROR:                         ^
837 // CHECK-ERROR: error: invalid operand for instruction
838 // CHECK-ERROR:        sqsub v10.8h, v1.16b, v2.16b
839 // CHECK-ERROR:                         ^
840 // CHECK-ERROR: error: invalid operand for instruction
841 // CHECK-ERROR:        uqsub v31.8b, v1.8b, v2.4s
842 // CHECK-ERROR:                                ^
843
844 //----------------------------------------------------------------------
845 // Scalar Integer Saturating Add (Signed)
846 // Scalar Integer Saturating Add (Unsigned)
847 // Scalar Integer Saturating Sub (Signed)
848 // Scalar Integer Saturating Sub (Unsigned)
849 //----------------------------------------------------------------------
850
851       // Mismatched registers
852          sqadd d0, s31, d2
853          uqadd s0, s1, d2
854          sqsub b0, b2, s18
855          uqsub h1, h2, d2
856
857 // CHECK-ERROR: error: invalid operand for instruction
858 // CHECK-ERROR:        sqadd d0, s31, d2
859 // CHECK-ERROR:                  ^
860 // CHECK-ERROR: error: invalid operand for instruction
861 // CHECK-ERROR:        uqadd s0, s1, d2
862 // CHECK-ERROR:                      ^
863 // CHECK-ERROR: error: invalid operand for instruction
864 // CHECK-ERROR:        sqsub b0, b2, s18
865 // CHECK-ERROR:                      ^
866 // CHECK-ERROR: error: invalid operand for instruction
867 // CHECK-ERROR:        uqsub h1, h2, d2
868 // CHECK-ERROR:                      ^
869
870 //----------------------------------------------------------------------
871 // Scalar Integer Saturating Doubling Multiply Half High (Signed)
872 //----------------------------------------------------------------------
873
874     sqdmulh h10, s11, h12
875     sqdmulh s20, h21, s2
876
877 // CHECK-ERROR: error: invalid operand for instruction
878 // CHECK-ERROR:        sqdmulh h10, s11, h12
879 // CHECK-ERROR:                     ^
880 // CHECK-ERROR: error: invalid operand for instruction
881 // CHECK-ERROR:        sqdmulh s20, h21, s2
882 // CHECK-ERROR:                     ^
883
884 //------------------------------------------------------------------------
885 // Scalar Integer Saturating Rounding Doubling Multiply Half High (Signed)
886 //------------------------------------------------------------------------
887
888     sqrdmulh h10, s11, h12
889     sqrdmulh s20, h21, s2
890
891 // CHECK-ERROR: error: invalid operand for instruction
892 // CHECK-ERROR:        sqrdmulh h10, s11, h12
893 // CHECK-ERROR:                      ^
894 // CHECK-ERROR: error: invalid operand for instruction
895 // CHECK-ERROR:        sqrdmulh s20, h21, s2
896 // CHECK-ERROR:                      ^
897
898 //----------------------------------------------------------------------
899 // Vector Shift Left (Signed and Unsigned Integer)
900 //----------------------------------------------------------------------
901         // Mismatched vector types
902         sshl v0.4s, v15.2s, v16.2s
903         ushl v1.16b, v25.16b, v6.8h
904
905 // CHECK-ERROR: error: invalid operand for instruction
906 // CHECK-ERROR:        sshl v0.4s, v15.2s, v16.2s
907 // CHECK-ERROR:                        ^
908 // CHECK-ERROR: error: invalid operand for instruction
909 // CHECK-ERROR:        ushl v1.16b, v25.16b, v6.8h
910 // CHECK-ERROR:                                 ^
911
912 //----------------------------------------------------------------------
913 // Vector Saturating Shift Left (Signed and Unsigned Integer)
914 //----------------------------------------------------------------------
915         // Mismatched vector types
916         sqshl v0.2s, v15.4s, v16.2d
917         uqshl v1.8b, v25.4h, v6.8h
918
919 // CHECK-ERROR: error: invalid operand for instruction
920 // CHECK-ERROR:        sqshl v0.2s, v15.4s, v16.2d 
921 // CHECK-ERROR:                         ^
922 // CHECK-ERROR: error: invalid operand for instruction
923 // CHECK-ERROR:        uqshl v1.8b, v25.4h, v6.8h
924 // CHECK-ERROR:                         ^
925
926 //----------------------------------------------------------------------
927 // Vector Rouding Shift Left (Signed and Unsigned Integer)
928 //----------------------------------------------------------------------
929         // Mismatched vector types
930         srshl v0.8h, v15.8h, v16.16b
931         urshl v1.2d, v25.2d, v6.4s
932
933 // CHECK-ERROR: error: invalid operand for instruction
934 // CHECK-ERROR:        srshl v0.8h, v15.8h, v16.16b
935 // CHECK-ERROR:                                 ^
936 // CHECK-ERROR: error: invalid operand for instruction
937 // CHECK-ERROR:        urshl v1.2d, v25.2d, v6.4s
938 // CHECK-ERROR:                                ^
939
940 //----------------------------------------------------------------------
941 // Vector Saturating Rouding Shift Left (Signed and Unsigned Integer)
942 //----------------------------------------------------------------------
943         // Mismatched vector types
944         sqrshl v0.2s, v15.8h, v16.16b
945         uqrshl v1.4h, v25.4h,  v6.2d
946
947 // CHECK-ERROR: error: invalid operand for instruction
948 // CHECK-ERROR:        sqrshl v0.2s, v15.8h, v16.16b
949 // CHECK-ERROR:                          ^
950 // CHECK-ERROR: error: invalid operand for instruction
951 // CHECK-ERROR:        uqrshl v1.4h, v25.4h,  v6.2d
952 // CHECK-ERROR:                                  ^
953
954 //----------------------------------------------------------------------
955 // Scalar Integer Shift Left (Signed, Unsigned)
956 //----------------------------------------------------------------------
957         // Mismatched and invalid vector types
958         sshl d0, d1, s2
959         ushl b2, b0, b1
960
961 // CHECK-ERROR: error: invalid operand for instruction
962 // CHECK-ERROR:        sshl d0, d1, s2
963 // CHECK-ERROR:                     ^
964 // CHECK-ERROR: error: invalid operand for instruction
965 // CHECK-ERROR:        ushl b2, b0, b1
966 // CHECK-ERROR:             ^
967
968 //----------------------------------------------------------------------
969 // Scalar Integer Saturating Shift Left (Signed, Unsigned)
970 //----------------------------------------------------------------------
971
972         // Mismatched vector types
973         sqshl b0, s1, b0
974         uqshl h0, b1, h0
975         sqshl s0, h1, s0
976         uqshl d0, b1, d0
977
978 // CHECK-ERROR: error: invalid operand for instruction
979 // CHECK-ERROR:        sqshl b0, s1, b0
980 // CHECK-ERROR:                  ^
981 // CHECK-ERROR: error: invalid operand for instruction
982 // CHECK-ERROR:        uqshl h0, b1, h0
983 // CHECK-ERROR:                  ^
984 // CHECK-ERROR: error: invalid operand for instruction
985 // CHECK-ERROR:        sqshl s0, h1, s0
986 // CHECK-ERROR:                  ^
987 // CHECK-ERROR: error: invalid operand for instruction
988 // CHECK-ERROR:        uqshl d0, b1, d0
989 // CHECK-ERROR:                  ^
990
991 //----------------------------------------------------------------------
992 // Scalar Integer Rouding Shift Left (Signed, Unsigned)
993 //----------------------------------------------------------------------
994         // Mismatched and invalid vector types
995         srshl h0, h1, h2
996         urshl s0, s1, s2
997
998 // CHECK-ERROR: error: invalid operand for instruction
999 // CHECK-ERROR:        srshl h0, h1, h2
1000 // CHECK-ERROR:              ^
1001 // CHECK-ERROR: error: invalid operand for instruction
1002 // CHECK-ERROR:        urshl s0, s1, s2
1003 // CHECK-ERROR:              ^
1004
1005
1006 //----------------------------------------------------------------------
1007 // Scalar Integer Saturating Rounding Shift Left (Signed, Unsigned)
1008 //----------------------------------------------------------------------
1009
1010         // Mismatched vector types
1011         sqrshl b0, b1, s0
1012         uqrshl h0, h1, b0
1013         sqrshl s0, s1, h0
1014         uqrshl d0, d1, b0
1015
1016 // CHECK-ERROR: error: invalid operand for instruction
1017 // CHECK-ERROR:        sqrshl b0, b1, s0
1018 // CHECK-ERROR:                       ^
1019 // CHECK-ERROR: error: invalid operand for instruction
1020 // CHECK-ERROR:        uqrshl h0, h1, b0
1021 // CHECK-ERROR:                       ^
1022 // CHECK-ERROR: error: invalid operand for instruction
1023 // CHECK-ERROR:        sqrshl s0, s1, h0
1024 // CHECK-ERROR:                       ^
1025 // CHECK-ERROR: error: invalid operand for instruction
1026 // CHECK-ERROR:        uqrshl d0, d1, b0
1027 // CHECK-ERROR:                       ^
1028
1029
1030 //----------------------------------------------------------------------
1031 // Vector Maximum (Signed, Unsigned)
1032 //----------------------------------------------------------------------
1033         // Mismatched and invalid vector types
1034         smax v0.2d, v1.2d, v2.2d
1035         umax v0.4h, v1.4h, v2.2s
1036
1037 // CHECK-ERROR: error: invalid operand for instruction
1038 // CHECK-ERROR:        smax v0.2d, v1.2d, v2.2d
1039 // CHECK-ERROR:                ^
1040 // CHECK-ERROR: error: invalid operand for instruction
1041 // CHECK-ERROR:        umax v0.4h, v1.4h, v2.2s
1042 // CHECK-ERROR:                              ^
1043
1044 //----------------------------------------------------------------------
1045 // Vector Minimum (Signed, Unsigned)
1046 //----------------------------------------------------------------------
1047         // Mismatched and invalid vector types
1048         smin v0.2d, v1.2d, v2.2d
1049         umin v0.2s, v1.2s, v2.8b
1050
1051 // CHECK-ERROR: error: invalid operand for instruction
1052 // CHECK-ERROR:        smin v0.2d, v1.2d, v2.2d
1053 // CHECK-ERROR:                ^
1054 // CHECK-ERROR: error: invalid operand for instruction
1055 // CHECK-ERROR:        umin v0.2s, v1.2s, v2.8b
1056 // CHECK-ERROR:                             ^
1057
1058
1059 //----------------------------------------------------------------------
1060 // Vector Maximum (Floating Point)
1061 //----------------------------------------------------------------------
1062         // Mismatched and invalid vector types
1063         fmax v0.2s, v1.2s, v2.4s
1064         fmax v0.8b, v1.8b, v2.8b
1065
1066 // CHECK-ERROR: error: invalid operand for instruction
1067 // CHECK-ERROR:        fmax v0.2s, v1.2s, v2.4s
1068 // CHECK-ERROR:                              ^
1069 // CHECK-ERROR: error: invalid operand for instruction
1070 // CHECK-ERROR:        fmax v0.8b, v1.8b, v2.8b
1071 // CHECK-ERROR:                ^
1072 //----------------------------------------------------------------------
1073 // Vector Minimum (Floating Point)
1074 //----------------------------------------------------------------------
1075         // Mismatched and invalid vector types
1076         fmin v0.4s, v1.4s, v2.2d
1077         fmin v0.8h, v1.8h, v2.8h
1078
1079 // CHECK-ERROR: error: invalid operand for instruction
1080 // CHECK-ERROR:        fmin v0.4s, v1.4s, v2.2d
1081 // CHECK-ERROR:                              ^
1082 // CHECK-ERROR: error: invalid operand for instruction
1083 // CHECK-ERROR:        fmin v0.8h, v1.8h, v2.8h
1084 // CHECK-ERROR:                ^
1085
1086 //----------------------------------------------------------------------
1087 // Vector maxNum (Floating Point)
1088 //----------------------------------------------------------------------
1089         // Mismatched and invalid vector types
1090         fmaxnm v0.2s, v1.2s, v2.2d
1091         fmaxnm v0.4h, v1.8h, v2.4h
1092
1093 // CHECK-ERROR: error: invalid operand for instruction
1094 // CHECK-ERROR:        fmaxnm v0.2s, v1.2s, v2.2d
1095 // CHECK-ERROR:                                ^
1096 // CHECK-ERROR: error: invalid operand for instruction
1097 // CHECK-ERROR:        fmaxnm v0.4h, v1.8h, v2.4h
1098 // CHECK-ERROR:                  ^
1099
1100 //----------------------------------------------------------------------
1101 // Vector minNum (Floating Point)
1102 //----------------------------------------------------------------------
1103         // Mismatched and invalid vector types
1104         fminnm v0.4s, v1.2s, v2.4s
1105         fminnm v0.16b, v0.16b, v0.16b
1106
1107 // CHECK-ERROR: error: invalid operand for instruction
1108 // CHECK-ERROR:        fminnm v0.4s, v1.2s, v2.4s
1109 // CHECK-ERROR:                         ^
1110 // CHECK-ERROR: error: invalid operand for instruction
1111 // CHECK-ERROR:        fminnm v0.16b, v0.16b, v0.16b
1112 // CHECK-ERROR:                  ^
1113
1114
1115 //----------------------------------------------------------------------
1116 // Vector Maximum Pairwise (Signed, Unsigned)
1117 //----------------------------------------------------------------------
1118         // Mismatched and invalid vector types
1119         smaxp v0.2d, v1.2d, v2.2d
1120         umaxp v0.4h, v1.4h, v2.2s
1121
1122 // CHECK-ERROR: error: invalid operand for instruction
1123 // CHECK-ERROR:        smaxp v0.2d, v1.2d, v2.2d
1124 // CHECK-ERROR:                 ^
1125 // CHECK-ERROR: error: invalid operand for instruction
1126 // CHECK-ERROR:        umaxp v0.4h, v1.4h, v2.2s
1127 // CHECK-ERROR:                               ^
1128
1129 //----------------------------------------------------------------------
1130 // Vector Minimum Pairwise (Signed, Unsigned)
1131 //----------------------------------------------------------------------
1132         // Mismatched and invalid vector types
1133         sminp v0.2d, v1.2d, v2.2d
1134         uminp v0.2s, v1.2s, v2.8b
1135
1136 // CHECK-ERROR: error: invalid operand for instruction
1137 // CHECK-ERROR:        sminp v0.2d, v1.2d, v2.2d
1138 // CHECK-ERROR:                 ^
1139 // CHECK-ERROR: error: invalid operand for instruction
1140 // CHECK-ERROR:        uminp v0.2s, v1.2s, v2.8b
1141 // CHECK-ERROR:                               ^
1142
1143
1144 //----------------------------------------------------------------------
1145 // Vector Maximum Pairwise (Floating Point)
1146 //----------------------------------------------------------------------
1147         // Mismatched and invalid vector types
1148         fmaxp v0.2s, v1.2s, v2.4s
1149         fmaxp v0.8b, v1.8b, v2.8b
1150
1151 // CHECK-ERROR: error: invalid operand for instruction
1152 // CHECK-ERROR:        fmaxp v0.2s, v1.2s, v2.4s
1153 // CHECK-ERROR:                               ^
1154 // CHECK-ERROR: error: invalid operand for instruction
1155 // CHECK-ERROR:        fmaxp v0.8b, v1.8b, v2.8b
1156 // CHECK-ERROR:                 ^
1157 //----------------------------------------------------------------------
1158 // Vector Minimum Pairwise (Floating Point)
1159 //----------------------------------------------------------------------
1160         // Mismatched and invalid vector types
1161         fminp v0.4s, v1.4s, v2.2d
1162         fminp v0.8h, v1.8h, v2.8h
1163
1164 // CHECK-ERROR: error: invalid operand for instruction
1165 // CHECK-ERROR:        fminp v0.4s, v1.4s, v2.2d
1166 // CHECK-ERROR:                               ^
1167 // CHECK-ERROR: error: invalid operand for instruction
1168 // CHECK-ERROR:        fminp v0.8h, v1.8h, v2.8h
1169 // CHECK-ERROR:                 ^
1170
1171 //----------------------------------------------------------------------
1172 // Vector maxNum Pairwise (Floating Point)
1173 //----------------------------------------------------------------------
1174         // Mismatched and invalid vector types
1175         fmaxnmp v0.2s, v1.2s, v2.2d
1176         fmaxnmp v0.4h, v1.8h, v2.4h
1177
1178 // CHECK-ERROR: error: invalid operand for instruction
1179 // CHECK-ERROR:        fmaxnmp v0.2s, v1.2s, v2.2d
1180 // CHECK-ERROR:                                 ^
1181 // CHECK-ERROR: error: invalid operand for instruction
1182 // CHECK-ERROR:        fmaxnmp v0.4h, v1.8h, v2.4h
1183 // CHECK-ERROR:                   ^
1184
1185 //----------------------------------------------------------------------
1186 // Vector minNum Pairwise (Floating Point)
1187 //----------------------------------------------------------------------
1188         // Mismatched and invalid vector types
1189         fminnmp v0.4s, v1.2s, v2.4s
1190         fminnmp v0.16b, v0.16b, v0.16b
1191
1192 // CHECK-ERROR: error: invalid operand for instruction
1193 // CHECK-ERROR:        fminnmp v0.4s, v1.2s, v2.4s
1194 // CHECK-ERROR:                          ^
1195 // CHECK-ERROR: error: invalid operand for instruction
1196 // CHECK-ERROR:        fminnmp v0.16b, v0.16b, v0.16b
1197 // CHECK-ERROR:                   ^
1198
1199
1200 //----------------------------------------------------------------------
1201 // Vector Add Pairwise (Integer)
1202 //----------------------------------------------------------------------
1203
1204         // Mismatched vector types
1205         addp v0.16b, v1.8b, v2.8b
1206
1207 // CHECK-ERROR: error: invalid operand for instruction
1208 // CHECK-ERROR:         addp v0.16b, v1.8b, v2.8b
1209 // CHECK-ERROR:                         ^
1210
1211 //----------------------------------------------------------------------
1212 // Vector Add Pairwise (Floating Point)
1213 //----------------------------------------------------------------------
1214         // Mismatched and invalid vector types
1215         faddp v0.16b, v1.8b, v2.8b
1216         faddp v0.2d, v1.2d, v2.8h
1217
1218 // CHECK-ERROR: error: invalid operand for instruction
1219 // CHECK-ERROR:         faddp v0.16b, v1.8b, v2.8b
1220 // CHECK-ERROR:                  ^
1221 // CHECK-ERROR: error: invalid operand for instruction
1222 // CHECK-ERROR:         faddp v0.2d, v1.2d, v2.8h
1223 // CHECK-ERROR:                                ^
1224
1225
1226 //----------------------------------------------------------------------
1227 // Vector Saturating Doubling Multiply High
1228 //----------------------------------------------------------------------
1229          // Mismatched and invalid vector types
1230          sqdmulh v2.4h, v25.8h, v3.4h
1231          sqdmulh v12.2d, v5.2d, v13.2d
1232          sqdmulh v3.8b, v1.8b, v30.8b
1233
1234 // CHECK-ERROR: error: invalid operand for instruction
1235 // CHECK-ERROR:         sqdmulh v2.4h, v25.8h, v3.4h
1236 // CHECK-ERROR:                            ^
1237 // CHECK-ERROR: error: invalid operand for instruction
1238 // CHECK-ERROR:         sqdmulh v12.2d, v5.2d, v13.2d
1239 // CHECK-ERROR:                     ^
1240 // CHECK-ERROR: error: invalid operand for instruction
1241 // CHECK-ERROR:         sqdmulh v3.8b, v1.8b, v30.8b
1242 // CHECK-ERROR:                    ^
1243
1244 //----------------------------------------------------------------------
1245 // Vector Saturating Rouding Doubling Multiply High
1246 //----------------------------------------------------------------------
1247          // Mismatched and invalid vector types
1248          sqrdmulh v2.2s, v25.4s, v3.4s
1249          sqrdmulh v12.16b, v5.16b, v13.16b
1250          sqrdmulh v3.4h, v1.4h, v30.2d
1251
1252
1253 // CHECK-ERROR: error: invalid operand for instruction
1254 // CHECK-ERROR:         sqrdmulh v2.2s, v25.4s, v3.4s
1255 // CHECK-ERROR:                             ^
1256 // CHECK-ERROR: error: invalid operand for instruction
1257 // CHECK-ERROR:         sqrdmulh v12.16b, v5.16b, v13.16b
1258 // CHECK-ERROR:                       ^
1259 // CHECK-ERROR: error: invalid operand for instruction
1260 // CHECK-ERROR:         sqrdmulh v3.4h, v1.4h, v30.2d
1261 // CHECK-ERROR:                                    ^
1262
1263 //----------------------------------------------------------------------
1264 // Vector Multiply Extended
1265 //----------------------------------------------------------------------
1266          // Mismatched and invalid vector types
1267       fmulx v21.2s, v5.2s, v13.2d
1268       fmulx v1.4h, v25.4h, v3.4h
1269
1270 // CHECK-ERROR: error: invalid operand for instruction
1271 // CHECK-ERROR:         fmulx v21.2s, v5.2s, v13.2d
1272 // CHECK-ERROR:                                  ^
1273 // CHECK-ERROR: error: invalid operand for instruction
1274 // CHECK-ERROR:         fmulx v1.4h, v25.4h, v3.4h
1275 // CHECK-ERROR:                  ^
1276
1277 //------------------------------------------------------------------------------
1278 // Vector Shift Left by Immediate
1279 //------------------------------------------------------------------------------
1280          // Mismatched vector types and out of range
1281          shl v0.4s, v15,2s, #3
1282          shl v0.2d, v17.4s, #3
1283          shl v0.8b, v31.8b, #-1
1284          shl v0.8b, v31.8b, #8
1285          shl v0.4s, v21.4s, #32
1286          shl v0.2d, v1.2d, #64
1287
1288 // CHECK-ERROR: error: expected comma before next operand
1289 // CHECK-ERROR:         shl v0.4s, v15,2s, #3
1290 // CHECK-ERROR:                         ^
1291 // CHECK-ERROR: error: invalid operand for instruction
1292 // CHECK-ERROR:         shl v0.2d, v17.4s, #3
1293 // CHECK-ERROR:                        ^
1294 // CHECK-ERROR: error: expected integer in range [0, 7]
1295 // CHECK-ERROR:         shl v0.8b, v31.8b, #-1
1296 // CHECK-ERROR:                            ^
1297 // CHECK-ERROR: error: expected integer in range [0, 7]
1298 // CHECK-ERROR:         shl v0.8b, v31.8b, #8
1299 // CHECK-ERROR:                            ^
1300 // CHECK-ERROR: error: expected integer in range [0, 31]
1301 // CHECK-ERROR:         shl v0.4s, v21.4s, #32
1302 // CHECK-ERROR:                            ^
1303 // CHECK-ERROR: error: expected integer in range [0, 63]
1304 // CHECK-ERROR:         shl v0.2d, v1.2d, #64
1305 // CHECK-ERROR:                           ^
1306
1307 //----------------------------------------------------------------------
1308 // Vector Shift Left Long by Immediate
1309 //----------------------------------------------------------------------
1310         // Mismatched vector types
1311         sshll v0.4s, v15.2s, #3
1312         ushll v1.16b, v25.16b, #6
1313         sshll2 v0.2d, v3.8s, #15
1314         ushll2 v1.4s, v25.4s, #7
1315
1316         // Out of range 
1317         sshll v0.8h, v1.8b, #-1
1318         sshll v0.8h, v1.8b, #9
1319         ushll v0.4s, v1.4h, #17
1320         ushll v0.2d, v1.2s, #33
1321         sshll2 v0.8h, v1.16b, #9
1322         sshll2 v0.4s, v1.8h, #17
1323         ushll2 v0.2d, v1.4s, #33
1324
1325 // CHECK-ERROR: error: invalid operand for instruction
1326 // CHECK-ERROR:        sshll v0.4s, v15.2s, #3
1327 // CHECK-ERROR:                         ^
1328 // CHECK-ERROR: error: invalid operand for instruction
1329 // CHECK-ERROR:        ushll v1.16b, v25.16b, #6
1330 // CHECK-ERROR:                 ^
1331 // CHECK-ERROR: error: invalid operand for instruction
1332 // CHECK-ERROR:        sshll2 v0.2d, v3.8s, #15
1333 // CHECK-ERROR:                      ^
1334 // CHECK-ERROR: error: invalid operand for instruction
1335 // CHECK-ERROR:        ushll2 v1.4s, v25.4s, #7
1336 // CHECK-ERROR:                          ^
1337 // CHECK-ERROR: error: expected integer in range [0, 7]
1338 // CHECK-ERROR:        sshll v0.8h, v1.8b, #-1
1339 // CHECK-ERROR:                            ^
1340 // CHECK-ERROR: error: expected integer in range [0, 7]
1341 // CHECK-ERROR:        sshll v0.8h, v1.8b, #9
1342 // CHECK-ERROR:                            ^
1343 // CHECK-ERROR: error: expected integer in range [0, 15]
1344 // CHECK-ERROR:        ushll v0.4s, v1.4h, #17
1345 // CHECK-ERROR:                            ^
1346 // CHECK-ERROR: error: expected integer in range [0, 31]
1347 // CHECK-ERROR:        ushll v0.2d, v1.2s, #33
1348 // CHECK-ERROR:                            ^
1349 // CHECK-ERROR: error: expected integer in range [0, 7]
1350 // CHECK-ERROR:        sshll2 v0.8h, v1.16b, #9
1351 // CHECK-ERROR:                              ^
1352 // CHECK-ERROR: error: expected integer in range [0, 15]
1353 // CHECK-ERROR:        sshll2 v0.4s, v1.8h, #17
1354 // CHECK-ERROR:                             ^
1355 // CHECK-ERROR: error: expected integer in range [0, 31]
1356 // CHECK-ERROR:        ushll2 v0.2d, v1.4s, #33
1357 // CHECK-ERROR:                             ^
1358
1359
1360 //------------------------------------------------------------------------------
1361 // Vector shift right by immediate
1362 //------------------------------------------------------------------------------
1363          sshr v0.8b, v1.8h, #3
1364          sshr v0.4h, v1.4s, #3
1365          sshr v0.2s, v1.2d, #3
1366          sshr v0.16b, v1.16b, #9
1367          sshr v0.8h, v1.8h, #17
1368          sshr v0.4s, v1.4s, #33
1369          sshr v0.2d, v1.2d, #65
1370
1371 // CHECK-ERROR: error: invalid operand for instruction
1372 // CHECK-ERROR:         sshr v0.8b, v1.8h, #3
1373 // CHECK-ERROR:                        ^
1374 // CHECK-ERROR: error: invalid operand for instruction
1375 // CHECK-ERROR:         sshr v0.4h, v1.4s, #3
1376 // CHECK-ERROR:                        ^
1377 // CHECK-ERROR: error: invalid operand for instruction
1378 // CHECK-ERROR:         sshr v0.2s, v1.2d, #3
1379 // CHECK-ERROR:                        ^
1380 // CHECK-ERROR: error: expected integer in range [1, 8]
1381 // CHECK-ERROR:         sshr v0.16b, v1.16b, #9
1382 // CHECK-ERROR:                              ^
1383 // CHECK-ERROR: error: expected integer in range [1, 16]
1384 // CHECK-ERROR:         sshr v0.8h, v1.8h, #17
1385 // CHECK-ERROR:                            ^
1386 // CHECK-ERROR: error: expected integer in range [1, 32]
1387 // CHECK-ERROR:         sshr v0.4s, v1.4s, #33
1388 // CHECK-ERROR:                            ^
1389 // CHECK-ERROR: error: expected integer in range [1, 64]
1390 // CHECK-ERROR:         sshr v0.2d, v1.2d, #65
1391 // CHECK-ERROR:                            ^
1392
1393 //------------------------------------------------------------------------------
1394 // Vector  shift right by immediate
1395 //------------------------------------------------------------------------------
1396          ushr v0.8b, v1.8h, #3
1397          ushr v0.4h, v1.4s, #3
1398          ushr v0.2s, v1.2d, #3
1399          ushr v0.16b, v1.16b, #9
1400          ushr v0.8h, v1.8h, #17
1401          ushr v0.4s, v1.4s, #33
1402          ushr v0.2d, v1.2d, #65
1403
1404 // CHECK-ERROR: error: invalid operand for instruction
1405 // CHECK-ERROR:         ushr v0.8b, v1.8h, #3
1406 // CHECK-ERROR:                        ^
1407 // CHECK-ERROR: error: invalid operand for instruction
1408 // CHECK-ERROR:         ushr v0.4h, v1.4s, #3
1409 // CHECK-ERROR:                        ^
1410 // CHECK-ERROR: error: invalid operand for instruction
1411 // CHECK-ERROR:         ushr v0.2s, v1.2d, #3
1412 // CHECK-ERROR:                        ^
1413 // CHECK-ERROR: error: expected integer in range [1, 8]
1414 // CHECK-ERROR:         ushr v0.16b, v1.16b, #9
1415 // CHECK-ERROR:                              ^
1416 // CHECK-ERROR: error: expected integer in range [1, 16]
1417 // CHECK-ERROR:         ushr v0.8h, v1.8h, #17
1418 // CHECK-ERROR:                            ^
1419 // CHECK-ERROR: error: expected integer in range [1, 32]
1420 // CHECK-ERROR:         ushr v0.4s, v1.4s, #33
1421 // CHECK-ERROR:                            ^
1422 // CHECK-ERROR: error: expected integer in range [1, 64]
1423 // CHECK-ERROR:         ushr v0.2d, v1.2d, #65
1424 // CHECK-ERROR:                            ^
1425
1426 //------------------------------------------------------------------------------
1427 // Vector shift right and accumulate by immediate
1428 //------------------------------------------------------------------------------
1429          ssra v0.8b, v1.8h, #3
1430          ssra v0.4h, v1.4s, #3
1431          ssra v0.2s, v1.2d, #3
1432          ssra v0.16b, v1.16b, #9
1433          ssra v0.8h, v1.8h, #17
1434          ssra v0.4s, v1.4s, #33
1435          ssra v0.2d, v1.2d, #65
1436
1437 // CHECK-ERROR: error: invalid operand for instruction
1438 // CHECK-ERROR:         ssra v0.8b, v1.8h, #3
1439 // CHECK-ERROR:                        ^
1440 // CHECK-ERROR: error: invalid operand for instruction
1441 // CHECK-ERROR:         ssra v0.4h, v1.4s, #3
1442 // CHECK-ERROR:                        ^
1443 // CHECK-ERROR: error: invalid operand for instruction
1444 // CHECK-ERROR:         ssra v0.2s, v1.2d, #3
1445 // CHECK-ERROR:                        ^
1446 // CHECK-ERROR: error: expected integer in range [1, 8]
1447 // CHECK-ERROR:         ssra v0.16b, v1.16b, #9
1448 // CHECK-ERROR:                              ^
1449 // CHECK-ERROR: error: expected integer in range [1, 16]
1450 // CHECK-ERROR:         ssra v0.8h, v1.8h, #17
1451 // CHECK-ERROR:                            ^
1452 // CHECK-ERROR: error: expected integer in range [1, 32]
1453 // CHECK-ERROR:         ssra v0.4s, v1.4s, #33
1454 // CHECK-ERROR:                            ^
1455 // CHECK-ERROR: error: expected integer in range [1, 64]
1456 // CHECK-ERROR:         ssra v0.2d, v1.2d, #65
1457 // CHECK-ERROR:                            ^
1458
1459 //------------------------------------------------------------------------------
1460 // Vector  shift right and accumulate by immediate
1461 //------------------------------------------------------------------------------
1462          usra v0.8b, v1.8h, #3
1463          usra v0.4h, v1.4s, #3
1464          usra v0.2s, v1.2d, #3
1465          usra v0.16b, v1.16b, #9
1466          usra v0.8h, v1.8h, #17
1467          usra v0.4s, v1.4s, #33
1468          usra v0.2d, v1.2d, #65
1469
1470 // CHECK-ERROR: error: invalid operand for instruction
1471 // CHECK-ERROR:         usra v0.8b, v1.8h, #3
1472 // CHECK-ERROR:                        ^
1473 // CHECK-ERROR: error: invalid operand for instruction
1474 // CHECK-ERROR:         usra v0.4h, v1.4s, #3
1475 // CHECK-ERROR:                        ^
1476 // CHECK-ERROR: error: invalid operand for instruction
1477 // CHECK-ERROR:         usra v0.2s, v1.2d, #3
1478 // CHECK-ERROR:                        ^
1479 // CHECK-ERROR: error: expected integer in range [1, 8]
1480 // CHECK-ERROR:         usra v0.16b, v1.16b, #9
1481 // CHECK-ERROR:                              ^
1482 // CHECK-ERROR: error: expected integer in range [1, 16]
1483 // CHECK-ERROR:         usra v0.8h, v1.8h, #17
1484 // CHECK-ERROR:                            ^
1485 // CHECK-ERROR: error: expected integer in range [1, 32]
1486 // CHECK-ERROR:         usra v0.4s, v1.4s, #33
1487 // CHECK-ERROR:                            ^
1488 // CHECK-ERROR: error: expected integer in range [1, 64]
1489 // CHECK-ERROR:         usra v0.2d, v1.2d, #65
1490 // CHECK-ERROR:                            ^
1491
1492 //------------------------------------------------------------------------------
1493 // Vector rounding shift right by immediate
1494 //------------------------------------------------------------------------------
1495          srshr v0.8b, v1.8h, #3
1496          srshr v0.4h, v1.4s, #3
1497          srshr v0.2s, v1.2d, #3
1498          srshr v0.16b, v1.16b, #9
1499          srshr v0.8h, v1.8h, #17
1500          srshr v0.4s, v1.4s, #33
1501          srshr v0.2d, v1.2d, #65
1502
1503 // CHECK-ERROR: error: invalid operand for instruction
1504 // CHECK-ERROR:         srshr v0.8b, v1.8h, #3
1505 // CHECK-ERROR:                         ^
1506 // CHECK-ERROR: error: invalid operand for instruction
1507 // CHECK-ERROR:         srshr v0.4h, v1.4s, #3
1508 // CHECK-ERROR:                         ^
1509 // CHECK-ERROR: error: invalid operand for instruction
1510 // CHECK-ERROR:         srshr v0.2s, v1.2d, #3
1511 // CHECK-ERROR:                         ^
1512 // CHECK-ERROR: error: expected integer in range [1, 8]
1513 // CHECK-ERROR:         srshr v0.16b, v1.16b, #9
1514 // CHECK-ERROR:                               ^
1515 // CHECK-ERROR: error: expected integer in range [1, 16]
1516 // CHECK-ERROR:         srshr v0.8h, v1.8h, #17
1517 // CHECK-ERROR:                             ^
1518 // CHECK-ERROR: error: expected integer in range [1, 32]
1519 // CHECK-ERROR:         srshr v0.4s, v1.4s, #33
1520 // CHECK-ERROR:                             ^
1521 // CHECK-ERROR: error: expected integer in range [1, 64]
1522 // CHECK-ERROR:         srshr v0.2d, v1.2d, #65
1523 // CHECK-ERROR:                             ^
1524
1525 //------------------------------------------------------------------------------
1526 // Vecotr rounding shift right by immediate
1527 //------------------------------------------------------------------------------
1528          urshr v0.8b, v1.8h, #3
1529          urshr v0.4h, v1.4s, #3
1530          urshr v0.2s, v1.2d, #3
1531          urshr v0.16b, v1.16b, #9
1532          urshr v0.8h, v1.8h, #17
1533          urshr v0.4s, v1.4s, #33
1534          urshr v0.2d, v1.2d, #65
1535
1536 // CHECK-ERROR: error: invalid operand for instruction
1537 // CHECK-ERROR:         urshr v0.8b, v1.8h, #3
1538 // CHECK-ERROR:                         ^
1539 // CHECK-ERROR: error: invalid operand for instruction
1540 // CHECK-ERROR:         urshr v0.4h, v1.4s, #3
1541 // CHECK-ERROR:                         ^
1542 // CHECK-ERROR: error: invalid operand for instruction
1543 // CHECK-ERROR:         urshr v0.2s, v1.2d, #3
1544 // CHECK-ERROR:                         ^
1545 // CHECK-ERROR: error: expected integer in range [1, 8]
1546 // CHECK-ERROR:         urshr v0.16b, v1.16b, #9
1547 // CHECK-ERROR:                               ^
1548 // CHECK-ERROR: error: expected integer in range [1, 16]
1549 // CHECK-ERROR:         urshr v0.8h, v1.8h, #17
1550 // CHECK-ERROR:                             ^
1551 // CHECK-ERROR: error: expected integer in range [1, 32]
1552 // CHECK-ERROR:         urshr v0.4s, v1.4s, #33
1553 // CHECK-ERROR:                             ^
1554 // CHECK-ERROR: error: expected integer in range [1, 64]
1555 // CHECK-ERROR:         urshr v0.2d, v1.2d, #65
1556 // CHECK-ERROR:                             ^
1557
1558 //------------------------------------------------------------------------------
1559 // Vector rounding shift right and accumulate by immediate
1560 //------------------------------------------------------------------------------
1561          srsra v0.8b, v1.8h, #3
1562          srsra v0.4h, v1.4s, #3
1563          srsra v0.2s, v1.2d, #3
1564          srsra v0.16b, v1.16b, #9
1565          srsra v0.8h, v1.8h, #17
1566          srsra v0.4s, v1.4s, #33
1567          srsra v0.2d, v1.2d, #65
1568
1569 // CHECK-ERROR: error: invalid operand for instruction
1570 // CHECK-ERROR:         srsra v0.8b, v1.8h, #3
1571 // CHECK-ERROR:                         ^
1572 // CHECK-ERROR: error: invalid operand for instruction
1573 // CHECK-ERROR:         srsra v0.4h, v1.4s, #3
1574 // CHECK-ERROR:                         ^
1575 // CHECK-ERROR: error: invalid operand for instruction
1576 // CHECK-ERROR:         srsra v0.2s, v1.2d, #3
1577 // CHECK-ERROR:                         ^
1578 // CHECK-ERROR: error: expected integer in range [1, 8]
1579 // CHECK-ERROR:         srsra v0.16b, v1.16b, #9
1580 // CHECK-ERROR:                               ^
1581 // CHECK-ERROR: error: expected integer in range [1, 16]
1582 // CHECK-ERROR:         srsra v0.8h, v1.8h, #17
1583 // CHECK-ERROR:                             ^
1584 // CHECK-ERROR: error: expected integer in range [1, 32]
1585 // CHECK-ERROR:         srsra v0.4s, v1.4s, #33
1586 // CHECK-ERROR:                             ^
1587 // CHECK-ERROR: error: expected integer in range [1, 64]
1588 // CHECK-ERROR:         srsra v0.2d, v1.2d, #65
1589 // CHECK-ERROR:                             ^
1590
1591 //------------------------------------------------------------------------------
1592 // Vector rounding shift right and accumulate by immediate
1593 //------------------------------------------------------------------------------
1594          ursra v0.8b, v1.8h, #3
1595          ursra v0.4h, v1.4s, #3
1596          ursra v0.2s, v1.2d, #3
1597          ursra v0.16b, v1.16b, #9
1598          ursra v0.8h, v1.8h, #17
1599          ursra v0.4s, v1.4s, #33
1600          ursra v0.2d, v1.2d, #65
1601
1602 // CHECK-ERROR: error: invalid operand for instruction
1603 // CHECK-ERROR:         ursra v0.8b, v1.8h, #3
1604 // CHECK-ERROR:                         ^
1605 // CHECK-ERROR: error: invalid operand for instruction
1606 // CHECK-ERROR:         ursra v0.4h, v1.4s, #3
1607 // CHECK-ERROR:                         ^
1608 // CHECK-ERROR: error: invalid operand for instruction
1609 // CHECK-ERROR:         ursra v0.2s, v1.2d, #3
1610 // CHECK-ERROR:                         ^
1611 // CHECK-ERROR: error: expected integer in range [1, 8]
1612 // CHECK-ERROR:         ursra v0.16b, v1.16b, #9
1613 // CHECK-ERROR:                               ^
1614 // CHECK-ERROR: error: expected integer in range [1, 16]
1615 // CHECK-ERROR:         ursra v0.8h, v1.8h, #17
1616 // CHECK-ERROR:                             ^
1617 // CHECK-ERROR: error: expected integer in range [1, 32]
1618 // CHECK-ERROR:         ursra v0.4s, v1.4s, #33
1619 // CHECK-ERROR:                             ^
1620 // CHECK-ERROR: error: expected integer in range [1, 64]
1621 // CHECK-ERROR:         ursra v0.2d, v1.2d, #65
1622 // CHECK-ERROR:                             ^
1623
1624 //------------------------------------------------------------------------------
1625 // Vector shift right and insert by immediate
1626 //------------------------------------------------------------------------------
1627          sri v0.8b, v1.8h, #3
1628          sri v0.4h, v1.4s, #3
1629          sri v0.2s, v1.2d, #3
1630          sri v0.16b, v1.16b, #9
1631          sri v0.8h, v1.8h, #17
1632          sri v0.4s, v1.4s, #33
1633          sri v0.2d, v1.2d, #65
1634
1635 // CHECK-ERROR: error: invalid operand for instruction
1636 // CHECK-ERROR:         sri v0.8b, v1.8h, #3
1637 // CHECK-ERROR:                       ^
1638 // CHECK-ERROR: error: invalid operand for instruction
1639 // CHECK-ERROR:         sri v0.4h, v1.4s, #3
1640 // CHECK-ERROR:                       ^
1641 // CHECK-ERROR: error: invalid operand for instruction
1642 // CHECK-ERROR:         sri v0.2s, v1.2d, #3
1643 // CHECK-ERROR:                       ^
1644 // CHECK-ERROR: error: expected integer in range [1, 8]
1645 // CHECK-ERROR:         sri v0.16b, v1.16b, #9
1646 // CHECK-ERROR:                             ^
1647 // CHECK-ERROR: error: expected integer in range [1, 16]
1648 // CHECK-ERROR:         sri v0.8h, v1.8h, #17
1649 // CHECK-ERROR:                           ^
1650 // CHECK-ERROR: error: expected integer in range [1, 32]
1651 // CHECK-ERROR:         sri v0.4s, v1.4s, #33
1652 // CHECK-ERROR:                           ^
1653 // CHECK-ERROR: error: expected integer in range [1, 64]
1654 // CHECK-ERROR:         sri v0.2d, v1.2d, #65
1655 // CHECK-ERROR:                           ^
1656
1657 //------------------------------------------------------------------------------
1658 // Vector shift left and insert by immediate
1659 //------------------------------------------------------------------------------
1660          sli v0.8b, v1.8h, #3
1661          sli v0.4h, v1.4s, #3
1662          sli v0.2s, v1.2d, #3
1663          sli v0.16b, v1.16b, #8
1664          sli v0.8h, v1.8h, #16
1665          sli v0.4s, v1.4s, #32
1666          sli v0.2d, v1.2d, #64
1667
1668 // CHECK-ERROR: error: invalid operand for instruction
1669 // CHECK-ERROR:         sli v0.8b, v1.8h, #3
1670 // CHECK-ERROR:                       ^
1671 // CHECK-ERROR: error: invalid operand for instruction
1672 // CHECK-ERROR:         sli v0.4h, v1.4s, #3
1673 // CHECK-ERROR:                       ^
1674 // CHECK-ERROR: error: invalid operand for instruction
1675 // CHECK-ERROR:         sli v0.2s, v1.2d, #3
1676 // CHECK-ERROR:                       ^
1677 // CHECK-ERROR: error: expected integer in range [0, 7]
1678 // CHECK-ERROR:         sli v0.16b, v1.16b, #8
1679 // CHECK-ERROR:                             ^
1680 // CHECK-ERROR: error: expected integer in range [0, 15]
1681 // CHECK-ERROR:         sli v0.8h, v1.8h, #16
1682 // CHECK-ERROR:                           ^
1683 // CHECK-ERROR: error: expected integer in range [0, 31]
1684 // CHECK-ERROR:         sli v0.4s, v1.4s, #32
1685 // CHECK-ERROR:                           ^
1686 // CHECK-ERROR: error: expected integer in range [0, 63]
1687 // CHECK-ERROR:         sli v0.2d, v1.2d, #64
1688 // CHECK-ERROR:                           ^
1689
1690 //------------------------------------------------------------------------------
1691 // Vector saturating shift left unsigned by immediate
1692 //------------------------------------------------------------------------------
1693          sqshlu v0.8b, v1.8h, #3
1694          sqshlu v0.4h, v1.4s, #3
1695          sqshlu v0.2s, v1.2d, #3
1696          sqshlu v0.16b, v1.16b, #8
1697          sqshlu v0.8h, v1.8h, #16
1698          sqshlu v0.4s, v1.4s, #32
1699          sqshlu v0.2d, v1.2d, #64
1700
1701 // CHECK-ERROR: error: invalid operand for instruction
1702 // CHECK-ERROR:         sqshlu v0.8b, v1.8h, #3
1703 // CHECK-ERROR:                          ^
1704 // CHECK-ERROR: error: invalid operand for instruction
1705 // CHECK-ERROR:         sqshlu v0.4h, v1.4s, #3
1706 // CHECK-ERROR:                          ^
1707 // CHECK-ERROR: error: invalid operand for instruction
1708 // CHECK-ERROR:         sqshlu v0.2s, v1.2d, #3
1709 // CHECK-ERROR:                          ^
1710 // CHECK-ERROR: error: expected integer in range [0, 7]
1711 // CHECK-ERROR:         sqshlu v0.16b, v1.16b, #8
1712 // CHECK-ERROR:                                ^
1713 // CHECK-ERROR: error: expected integer in range [0, 15]
1714 // CHECK-ERROR:         sqshlu v0.8h, v1.8h, #16
1715 // CHECK-ERROR:                              ^
1716 // CHECK-ERROR: error: expected integer in range [0, 31]
1717 // CHECK-ERROR:         sqshlu v0.4s, v1.4s, #32
1718 // CHECK-ERROR:                              ^
1719 // CHECK-ERROR: error: expected integer in range [0, 63]
1720 // CHECK-ERROR:         sqshlu v0.2d, v1.2d, #64
1721 // CHECK-ERROR:                              ^
1722
1723 //------------------------------------------------------------------------------
1724 // Vector saturating shift left by immediate
1725 //------------------------------------------------------------------------------
1726          sqshl v0.8b, v1.8h, #3
1727          sqshl v0.4h, v1.4s, #3
1728          sqshl v0.2s, v1.2d, #3
1729          sqshl v0.16b, v1.16b, #8
1730          sqshl v0.8h, v1.8h, #16
1731          sqshl v0.4s, v1.4s, #32
1732          sqshl v0.2d, v1.2d, #64
1733
1734 // CHECK-ERROR: error: invalid operand for instruction
1735 // CHECK-ERROR:         sqshl v0.8b, v1.8h, #3
1736 // CHECK-ERROR:                         ^
1737 // CHECK-ERROR: error: invalid operand for instruction
1738 // CHECK-ERROR:         sqshl v0.4h, v1.4s, #3
1739 // CHECK-ERROR:                         ^
1740 // CHECK-ERROR: error: invalid operand for instruction
1741 // CHECK-ERROR:         sqshl v0.2s, v1.2d, #3
1742 // CHECK-ERROR:                         ^
1743 // CHECK-ERROR: error: expected integer in range [0, 7]
1744 // CHECK-ERROR:         sqshl v0.16b, v1.16b, #8
1745 // CHECK-ERROR:                               ^
1746 // CHECK-ERROR: error: expected integer in range [0, 15]
1747 // CHECK-ERROR:         sqshl v0.8h, v1.8h, #16
1748 // CHECK-ERROR:                             ^
1749 // CHECK-ERROR: error: expected integer in range [0, 31]
1750 // CHECK-ERROR:         sqshl v0.4s, v1.4s, #32
1751 // CHECK-ERROR:                             ^
1752 // CHECK-ERROR: error: expected integer in range [0, 63]
1753 // CHECK-ERROR:         sqshl v0.2d, v1.2d, #64
1754 // CHECK-ERROR:                             ^
1755
1756 //------------------------------------------------------------------------------
1757 // Vector saturating shift left by immediate
1758 //------------------------------------------------------------------------------
1759          uqshl v0.8b, v1.8h, #3
1760          uqshl v0.4h, v1.4s, #3
1761          uqshl v0.2s, v1.2d, #3
1762          uqshl v0.16b, v1.16b, #8
1763          uqshl v0.8h, v1.8h, #16
1764          uqshl v0.4s, v1.4s, #32
1765          uqshl v0.2d, v1.2d, #64
1766
1767 // CHECK-ERROR: error: invalid operand for instruction
1768 // CHECK-ERROR:         uqshl v0.8b, v1.8h, #3
1769 // CHECK-ERROR:                         ^
1770 // CHECK-ERROR: error: invalid operand for instruction
1771 // CHECK-ERROR:         uqshl v0.4h, v1.4s, #3
1772 // CHECK-ERROR:                         ^
1773 // CHECK-ERROR: error: invalid operand for instruction
1774 // CHECK-ERROR:         uqshl v0.2s, v1.2d, #3
1775 // CHECK-ERROR:                         ^
1776 // CHECK-ERROR: error: expected integer in range [0, 7]
1777 // CHECK-ERROR:         uqshl v0.16b, v1.16b, #8
1778 // CHECK-ERROR:                               ^
1779 // CHECK-ERROR: error: expected integer in range [0, 15]
1780 // CHECK-ERROR:         uqshl v0.8h, v1.8h, #16
1781 // CHECK-ERROR:                             ^
1782 // CHECK-ERROR: error: expected integer in range [0, 31]
1783 // CHECK-ERROR:         uqshl v0.4s, v1.4s, #32
1784 // CHECK-ERROR:                             ^
1785 // CHECK-ERROR: error: expected integer in range [0, 63]
1786 // CHECK-ERROR:         uqshl v0.2d, v1.2d, #64
1787 // CHECK-ERROR:                             ^
1788
1789 //------------------------------------------------------------------------------
1790 // Vector shift right narrow by immediate
1791 //------------------------------------------------------------------------------
1792          shrn v0.8b, v1.8b, #3
1793          shrn v0.4h, v1.4h, #3
1794          shrn v0.2s, v1.2s, #3
1795          shrn2 v0.16b, v1.8h, #17
1796          shrn2 v0.8h, v1.4s, #33
1797          shrn2 v0.4s, v1.2d, #65
1798
1799 // CHECK-ERROR: error: invalid operand for instruction
1800 // CHECK-ERROR:         shrn v0.8b, v1.8b, #3
1801 // CHECK-ERROR:                        ^
1802 // CHECK-ERROR: error: invalid operand for instruction
1803 // CHECK-ERROR:         shrn v0.4h, v1.4h, #3
1804 // CHECK-ERROR:                        ^
1805 // CHECK-ERROR: error: invalid operand for instruction
1806 // CHECK-ERROR:         shrn v0.2s, v1.2s, #3
1807 // CHECK-ERROR:                        ^
1808 // CHECK-ERROR: error: expected integer in range [1, 8]
1809 // CHECK-ERROR:         shrn2 v0.16b, v1.8h, #17
1810 // CHECK-ERROR:                              ^
1811 // CHECK-ERROR: error: expected integer in range [1, 16]
1812 // CHECK-ERROR:         shrn2 v0.8h, v1.4s, #33
1813 // CHECK-ERROR:                             ^
1814 // CHECK-ERROR: error: expected integer in range [1, 32]
1815 // CHECK-ERROR:         shrn2 v0.4s, v1.2d, #65
1816 // CHECK-ERROR:                             ^
1817
1818 //------------------------------------------------------------------------------
1819 // Vector saturating shift right unsigned narrow by immediate
1820 //------------------------------------------------------------------------------
1821          sqshrun v0.8b, v1.8b, #3
1822          sqshrun v0.4h, v1.4h, #3
1823          sqshrun v0.2s, v1.2s, #3
1824          sqshrun2 v0.16b, v1.8h, #17
1825          sqshrun2 v0.8h, v1.4s, #33
1826          sqshrun2 v0.4s, v1.2d, #65
1827
1828 // CHECK-ERROR: error: invalid operand for instruction
1829 // CHECK-ERROR:         sqshrun v0.8b, v1.8b, #3
1830 // CHECK-ERROR:                           ^
1831 // CHECK-ERROR: error: invalid operand for instruction
1832 // CHECK-ERROR:         sqshrun v0.4h, v1.4h, #3
1833 // CHECK-ERROR:                           ^
1834 // CHECK-ERROR: error: invalid operand for instruction
1835 // CHECK-ERROR:         sqshrun v0.2s, v1.2s, #3
1836 // CHECK-ERROR:                           ^
1837 // CHECK-ERROR: error: expected integer in range [1, 8]
1838 // CHECK-ERROR:         sqshrun2 v0.16b, v1.8h, #17
1839 // CHECK-ERROR:                                 ^
1840 // CHECK-ERROR: error: expected integer in range [1, 16]
1841 // CHECK-ERROR:         sqshrun2 v0.8h, v1.4s, #33
1842 // CHECK-ERROR:                                ^
1843 // CHECK-ERROR: error: expected integer in range [1, 32]
1844 // CHECK-ERROR:         sqshrun2 v0.4s, v1.2d, #65
1845 // CHECK-ERROR:                                ^
1846
1847 //------------------------------------------------------------------------------
1848 // Vector rounding shift right narrow by immediate
1849 //------------------------------------------------------------------------------
1850          rshrn v0.8b, v1.8b, #3
1851          rshrn v0.4h, v1.4h, #3
1852          rshrn v0.2s, v1.2s, #3
1853          rshrn2 v0.16b, v1.8h, #17
1854          rshrn2 v0.8h, v1.4s, #33
1855          rshrn2 v0.4s, v1.2d, #65
1856
1857 // CHECK-ERROR: error: invalid operand for instruction
1858 // CHECK-ERROR:         rshrn v0.8b, v1.8b, #3
1859 // CHECK-ERROR:                         ^
1860 // CHECK-ERROR: error: invalid operand for instruction
1861 // CHECK-ERROR:         rshrn v0.4h, v1.4h, #3
1862 // CHECK-ERROR:                         ^
1863 // CHECK-ERROR: error: invalid operand for instruction
1864 // CHECK-ERROR:         rshrn v0.2s, v1.2s, #3
1865 // CHECK-ERROR:                         ^
1866 // CHECK-ERROR: error: expected integer in range [1, 8]
1867 // CHECK-ERROR:         rshrn2 v0.16b, v1.8h, #17
1868 // CHECK-ERROR:                               ^
1869 // CHECK-ERROR: error: expected integer in range [1, 16]
1870 // CHECK-ERROR:         rshrn2 v0.8h, v1.4s, #33
1871 // CHECK-ERROR:                              ^
1872 // CHECK-ERROR: error: expected integer in range [1, 32]
1873 // CHECK-ERROR:         rshrn2 v0.4s, v1.2d, #65
1874 // CHECK-ERROR:                              ^
1875
1876 //------------------------------------------------------------------------------
1877 // Vector saturating shift right rounded unsigned narrow by immediate
1878 //------------------------------------------------------------------------------
1879          sqrshrun v0.8b, v1.8b, #3
1880          sqrshrun v0.4h, v1.4h, #3
1881          sqrshrun v0.2s, v1.2s, #3
1882          sqrshrun2 v0.16b, v1.8h, #17
1883          sqrshrun2 v0.8h, v1.4s, #33
1884          sqrshrun2 v0.4s, v1.2d, #65
1885
1886 // CHECK-ERROR: error: invalid operand for instruction
1887 // CHECK-ERROR:         sqrshrun v0.8b, v1.8b, #3
1888 // CHECK-ERROR:                            ^
1889 // CHECK-ERROR: error: invalid operand for instruction
1890 // CHECK-ERROR:         sqrshrun v0.4h, v1.4h, #3
1891 // CHECK-ERROR:                            ^
1892 // CHECK-ERROR: error: invalid operand for instruction
1893 // CHECK-ERROR:         sqrshrun v0.2s, v1.2s, #3
1894 // CHECK-ERROR:                            ^
1895 // CHECK-ERROR: error: expected integer in range [1, 8]
1896 // CHECK-ERROR:         sqrshrun2 v0.16b, v1.8h, #17
1897 // CHECK-ERROR:                                  ^
1898 // CHECK-ERROR: error: expected integer in range [1, 16]
1899 // CHECK-ERROR:         sqrshrun2 v0.8h, v1.4s, #33
1900 // CHECK-ERROR:                                 ^
1901 // CHECK-ERROR: error: expected integer in range [1, 32]
1902 // CHECK-ERROR:         sqrshrun2 v0.4s, v1.2d, #65
1903 // CHECK-ERROR:                                 ^
1904
1905 //------------------------------------------------------------------------------
1906 // Vector saturating shift right narrow by immediate
1907 //------------------------------------------------------------------------------
1908          sqshrn v0.8b, v1.8b, #3
1909          sqshrn v0.4h, v1.4h, #3
1910          sqshrn v0.2s, v1.2s, #3
1911          sqshrn2 v0.16b, v1.8h, #17
1912          sqshrn2 v0.8h, v1.4s, #33
1913          sqshrn2 v0.4s, v1.2d, #65
1914
1915 // CHECK-ERROR: error: invalid operand for instruction
1916 // CHECK-ERROR:         sqshrn v0.8b, v1.8b, #3
1917 // CHECK-ERROR:                          ^
1918 // CHECK-ERROR: error: invalid operand for instruction
1919 // CHECK-ERROR:         sqshrn v0.4h, v1.4h, #3
1920 // CHECK-ERROR:                          ^
1921 // CHECK-ERROR: error: invalid operand for instruction
1922 // CHECK-ERROR:         sqshrn v0.2s, v1.2s, #3
1923 // CHECK-ERROR:                          ^
1924 // CHECK-ERROR: error: expected integer in range [1, 8]
1925 // CHECK-ERROR:         sqshrn2 v0.16b, v1.8h, #17
1926 // CHECK-ERROR:                                ^
1927 // CHECK-ERROR: error: expected integer in range [1, 16]
1928 // CHECK-ERROR:         sqshrn2 v0.8h, v1.4s, #33
1929 // CHECK-ERROR:                               ^
1930 // CHECK-ERROR: error: expected integer in range [1, 32]
1931 // CHECK-ERROR:         sqshrn2 v0.4s, v1.2d, #65
1932 // CHECK-ERROR:                               ^
1933
1934 //------------------------------------------------------------------------------
1935 // Vector saturating shift right narrow by immediate
1936 //------------------------------------------------------------------------------
1937          uqshrn v0.8b, v1.8b, #3
1938          uqshrn v0.4h, v1.4h, #3
1939          uqshrn v0.2s, v1.2s, #3
1940          uqshrn2 v0.16b, v1.8h, #17
1941          uqshrn2 v0.8h, v1.4s, #33
1942          uqshrn2 v0.4s, v1.2d, #65
1943
1944 // CHECK-ERROR: error: invalid operand for instruction
1945 // CHECK-ERROR:         uqshrn v0.8b, v1.8b, #3
1946 // CHECK-ERROR:                          ^
1947 // CHECK-ERROR: error: invalid operand for instruction
1948 // CHECK-ERROR:         uqshrn v0.4h, v1.4h, #3
1949 // CHECK-ERROR:                          ^
1950 // CHECK-ERROR: error: invalid operand for instruction
1951 // CHECK-ERROR:         uqshrn v0.2s, v1.2s, #3
1952 // CHECK-ERROR:                          ^
1953 // CHECK-ERROR: error: expected integer in range [1, 8]
1954 // CHECK-ERROR:         uqshrn2 v0.16b, v1.8h, #17
1955 // CHECK-ERROR:                                ^
1956 // CHECK-ERROR: error: expected integer in range [1, 16]
1957 // CHECK-ERROR:         uqshrn2 v0.8h, v1.4s, #33
1958 // CHECK-ERROR:                               ^
1959 // CHECK-ERROR: error: expected integer in range [1, 32]
1960 // CHECK-ERROR:         uqshrn2 v0.4s, v1.2d, #65
1961 // CHECK-ERROR:                               ^
1962
1963 //------------------------------------------------------------------------------
1964 // Vector saturating shift right rounded narrow by immediate
1965 //------------------------------------------------------------------------------
1966          sqrshrn v0.8b, v1.8b, #3
1967          sqrshrn v0.4h, v1.4h, #3
1968          sqrshrn v0.2s, v1.2s, #3
1969          sqrshrn2 v0.16b, v1.8h, #17
1970          sqrshrn2 v0.8h, v1.4s, #33
1971          sqrshrn2 v0.4s, v1.2d, #65
1972
1973 // CHECK-ERROR: error: invalid operand for instruction
1974 // CHECK-ERROR:         sqrshrn v0.8b, v1.8b, #3
1975 // CHECK-ERROR:                           ^
1976 // CHECK-ERROR: error: invalid operand for instruction
1977 // CHECK-ERROR:         sqrshrn v0.4h, v1.4h, #3
1978 // CHECK-ERROR:                           ^
1979 // CHECK-ERROR: error: invalid operand for instruction
1980 // CHECK-ERROR:         sqrshrn v0.2s, v1.2s, #3
1981 // CHECK-ERROR:                           ^
1982 // CHECK-ERROR: error: expected integer in range [1, 8]
1983 // CHECK-ERROR:         sqrshrn2 v0.16b, v1.8h, #17
1984 // CHECK-ERROR:                                 ^
1985 // CHECK-ERROR: error: expected integer in range [1, 16]
1986 // CHECK-ERROR:         sqrshrn2 v0.8h, v1.4s, #33
1987 // CHECK-ERROR:                                ^
1988 // CHECK-ERROR: error: expected integer in range [1, 32]
1989 // CHECK-ERROR:         sqrshrn2 v0.4s, v1.2d, #65
1990 // CHECK-ERROR:                                ^
1991
1992 //------------------------------------------------------------------------------
1993 // Vector saturating shift right rounded narrow by immediate
1994 //------------------------------------------------------------------------------
1995          uqrshrn v0.8b, v1.8b, #3
1996          uqrshrn v0.4h, v1.4h, #3
1997          uqrshrn v0.2s, v1.2s, #3
1998          uqrshrn2 v0.16b, v1.8h, #17
1999          uqrshrn2 v0.8h, v1.4s, #33
2000          uqrshrn2 v0.4s, v1.2d, #65
2001
2002 // CHECK-ERROR: error: invalid operand for instruction
2003 // CHECK-ERROR:         uqrshrn v0.8b, v1.8b, #3
2004 // CHECK-ERROR:                           ^
2005 // CHECK-ERROR: error: invalid operand for instruction
2006 // CHECK-ERROR:         uqrshrn v0.4h, v1.4h, #3
2007 // CHECK-ERROR:                           ^
2008 // CHECK-ERROR: error: invalid operand for instruction
2009 // CHECK-ERROR:         uqrshrn v0.2s, v1.2s, #3
2010 // CHECK-ERROR:                           ^
2011 // CHECK-ERROR: error: expected integer in range [1, 8]
2012 // CHECK-ERROR:         uqrshrn2 v0.16b, v1.8h, #17
2013 // CHECK-ERROR:                                 ^
2014 // CHECK-ERROR: error: expected integer in range [1, 16]
2015 // CHECK-ERROR:         uqrshrn2 v0.8h, v1.4s, #33
2016 // CHECK-ERROR:                                ^
2017 // CHECK-ERROR: error: expected integer in range [1, 32]
2018 // CHECK-ERROR:         uqrshrn2 v0.4s, v1.2d, #65
2019 // CHECK-ERROR:                                ^
2020
2021 //------------------------------------------------------------------------------
2022 // Fixed-point convert to floating-point
2023 //------------------------------------------------------------------------------
2024          scvtf v0.2s, v1.2d, #3
2025          scvtf v0.4s, v1.4h, #3
2026          scvtf v0.2d, v1.2s, #3
2027          ucvtf v0.2s, v1.2s, #33
2028          ucvtf v0.4s, v1.4s, #33
2029          ucvtf v0.2d, v1.2d, #65
2030
2031 // CHECK-ERROR: error: invalid operand for instruction
2032 // CHECK-ERROR:         scvtf v0.2s, v1.2d, #3
2033 // CHECK-ERROR:                         ^
2034 // CHECK-ERROR: error: invalid operand for instruction
2035 // CHECK-ERROR:         scvtf v0.4s, v1.4h, #3
2036 // CHECK-ERROR:                         ^
2037 // CHECK-ERROR: error: invalid operand for instruction
2038 // CHECK-ERROR:         scvtf v0.2d, v1.2s, #3
2039 // CHECK-ERROR:                         ^
2040 // CHECK-ERROR: error: expected integer in range [1, 32]
2041 // CHECK-ERROR:         ucvtf v0.2s, v1.2s, #33
2042 // CHECK-ERROR:                             ^
2043 // CHECK-ERROR: error: expected integer in range [1, 32]
2044 // CHECK-ERROR:         ucvtf v0.4s, v1.4s, #33
2045 // CHECK-ERROR:                             ^
2046 // CHECK-ERROR: error: expected integer in range [1, 64]
2047 // CHECK-ERROR:         ucvtf v0.2d, v1.2d, #65
2048 // CHECK-ERROR:                             ^
2049
2050 //------------------------------------------------------------------------------
2051 // Floating-point convert to fixed-point
2052 //------------------------------------------------------------------------------
2053          fcvtzs v0.2s, v1.2d, #3
2054          fcvtzs v0.4s, v1.4h, #3
2055          fcvtzs v0.2d, v1.2s, #3
2056          fcvtzu v0.2s, v1.2s, #33
2057          fcvtzu v0.4s, v1.4s, #33
2058          fcvtzu v0.2d, v1.2d, #65
2059
2060 // CHECK-ERROR: error: invalid operand for instruction
2061 // CHECK-ERROR:         fcvtzs v0.2s, v1.2d, #3
2062 // CHECK-ERROR:                          ^
2063 // CHECK-ERROR: error: invalid operand for instruction
2064 // CHECK-ERROR:         fcvtzs v0.4s, v1.4h, #3
2065 // CHECK-ERROR:                          ^
2066 // CHECK-ERROR: error: invalid operand for instruction
2067 // CHECK-ERROR:         fcvtzs v0.2d, v1.2s, #3
2068 // CHECK-ERROR:                          ^
2069 // CHECK-ERROR: error: expected integer in range [1, 32]
2070 // CHECK-ERROR:         fcvtzu v0.2s, v1.2s, #33
2071 // CHECK-ERROR:                              ^
2072 // CHECK-ERROR: error: expected integer in range [1, 32]
2073 // CHECK-ERROR:         fcvtzu v0.4s, v1.4s, #33
2074 // CHECK-ERROR:                              ^
2075 // CHECK-ERROR: error: expected integer in range [1, 64]
2076 // CHECK-ERROR:         fcvtzu v0.2d, v1.2d, #65
2077 // CHECK-ERROR:                              ^
2078
2079 //----------------------------------------------------------------------
2080 // Vector operation on 3 operands with different types
2081 //----------------------------------------------------------------------
2082
2083         // Mismatched and invalid vector types
2084         saddl v0.8h, v1.8h, v2.8b
2085         saddl v0.4s, v1.4s, v2.4h
2086         saddl v0.2d, v1.2d, v2.2s
2087
2088 // CHECK-ERROR: error: invalid operand for instruction
2089 // CHECK-ERROR:        saddl v0.8h, v1.8h, v2.8b
2090 // CHECK-ERROR:                        ^
2091 // CHECK-ERROR: error: invalid operand for instruction
2092 // CHECK-ERROR:        saddl v0.4s, v1.4s, v2.4h
2093 // CHECK-ERROR:                        ^
2094 // CHECK-ERROR: error: invalid operand for instruction
2095 // CHECK-ERROR:        saddl v0.2d, v1.2d, v2.2s
2096 // CHECK-ERROR:                        ^
2097
2098         saddl2 v0.4s, v1.8s, v2.8h
2099         saddl2 v0.8h, v1.16h, v2.16b
2100         saddl2 v0.2d, v1.4d, v2.4s
2101
2102 // CHECK-ERROR: error: invalid operand for instruction
2103 // CHECK-ERROR:        saddl2 v0.4s, v1.8s, v2.8h
2104 // CHECK-ERROR:                      ^
2105 // CHECK-ERROR: error: invalid operand for instruction
2106 // CHECK-ERROR:        saddl2 v0.8h, v1.16h, v2.16b
2107 // CHECK-ERROR:                      ^
2108 // CHECK-ERROR: error: invalid operand for instruction
2109 // CHECK-ERROR:        saddl2 v0.2d, v1.4d, v2.4s
2110 // CHECK-ERROR:                      ^
2111
2112         uaddl v0.8h, v1.8h, v2.8b
2113         uaddl v0.4s, v1.4s, v2.4h
2114         uaddl v0.2d, v1.2d, v2.2s
2115
2116 // CHECK-ERROR: error: invalid operand for instruction
2117 // CHECK-ERROR:        uaddl v0.8h, v1.8h, v2.8b
2118 // CHECK-ERROR:                        ^
2119 // CHECK-ERROR: error: invalid operand for instruction
2120 // CHECK-ERROR:        uaddl v0.4s, v1.4s, v2.4h
2121 // CHECK-ERROR:                        ^
2122 // CHECK-ERROR: error: invalid operand for instruction
2123 // CHECK-ERROR:        uaddl v0.2d, v1.2d, v2.2s
2124 // CHECK-ERROR:                        ^
2125
2126         uaddl2 v0.8h, v1.16h, v2.16b
2127         uaddl2 v0.4s, v1.8s, v2.8h
2128         uaddl2 v0.2d, v1.4d, v2.4s
2129
2130 // CHECK-ERROR: error: invalid operand for instruction
2131 // CHECK-ERROR:        uaddl2 v0.8h, v1.16h, v2.16b
2132 // CHECK-ERROR:                      ^
2133 // CHECK-ERROR: error: invalid operand for instruction
2134 // CHECK-ERROR:        uaddl2 v0.4s, v1.8s, v2.8h
2135 // CHECK-ERROR:                      ^
2136 // CHECK-ERROR: error: invalid operand for instruction
2137 // CHECK-ERROR:        uaddl2 v0.2d, v1.4d, v2.4s
2138 // CHECK-ERROR:                      ^
2139
2140         ssubl v0.8h, v1.8h, v2.8b
2141         ssubl v0.4s, v1.4s, v2.4h
2142         ssubl v0.2d, v1.2d, v2.2s
2143
2144 // CHECK-ERROR: error: invalid operand for instruction
2145 // CHECK-ERROR:        ssubl v0.8h, v1.8h, v2.8b
2146 // CHECK-ERROR:                        ^
2147 // CHECK-ERROR: error: invalid operand for instruction
2148 // CHECK-ERROR:        ssubl v0.4s, v1.4s, v2.4h
2149 // CHECK-ERROR:                        ^
2150 // CHECK-ERROR: error: invalid operand for instruction
2151 // CHECK-ERROR:        ssubl v0.2d, v1.2d, v2.2s
2152 // CHECK-ERROR:                        ^
2153
2154         ssubl2 v0.8h, v1.16h, v2.16b
2155         ssubl2 v0.4s, v1.8s, v2.8h
2156         ssubl2 v0.2d, v1.4d, v2.4s
2157
2158 // CHECK-ERROR: error: invalid operand for instruction
2159 // CHECK-ERROR:        ssubl2 v0.8h, v1.16h, v2.16b
2160 // CHECK-ERROR:                      ^
2161 // CHECK-ERROR: error: invalid operand for instruction
2162 // CHECK-ERROR:        ssubl2 v0.4s, v1.8s, v2.8h
2163 // CHECK-ERROR:                      ^
2164 // CHECK-ERROR: error: invalid operand for instruction
2165 // CHECK-ERROR:        ssubl2 v0.2d, v1.4d, v2.4s
2166 // CHECK-ERROR:                      ^
2167
2168         usubl v0.8h, v1.8h, v2.8b
2169         usubl v0.4s, v1.4s, v2.4h
2170         usubl v0.2d, v1.2d, v2.2s
2171
2172 // CHECK-ERROR: error: invalid operand for instruction
2173 // CHECK-ERROR:        usubl v0.8h, v1.8h, v2.8b
2174 // CHECK-ERROR:                        ^
2175 // CHECK-ERROR: error: invalid operand for instruction
2176 // CHECK-ERROR:        usubl v0.4s, v1.4s, v2.4h
2177 // CHECK-ERROR:                        ^
2178 // CHECK-ERROR: error: invalid operand for instruction
2179 // CHECK-ERROR:        usubl v0.2d, v1.2d, v2.2s
2180 // CHECK-ERROR:                        ^
2181
2182         usubl2 v0.8h, v1.16h, v2.16b
2183         usubl2 v0.4s, v1.8s, v2.8h
2184         usubl2 v0.2d, v1.4d, v2.4s
2185
2186 // CHECK-ERROR: error: invalid operand for instruction
2187 // CHECK-ERROR:        usubl2 v0.8h, v1.16h, v2.16b
2188 // CHECK-ERROR:                      ^
2189 // CHECK-ERROR: error: invalid operand for instruction
2190 // CHECK-ERROR:        usubl2 v0.4s, v1.8s, v2.8h
2191 // CHECK-ERROR:                      ^
2192 // CHECK-ERROR: error: invalid operand for instruction
2193 // CHECK-ERROR:        usubl2 v0.2d, v1.4d, v2.4s
2194 // CHECK-ERROR:                      ^
2195
2196         sabal v0.8h, v1.8h, v2.8b
2197         sabal v0.4s, v1.4s, v2.4h
2198         sabal v0.2d, v1.2d, v2.2s
2199
2200 // CHECK-ERROR: error: invalid operand for instruction
2201 // CHECK-ERROR:        sabal v0.8h, v1.8h, v2.8b
2202 // CHECK-ERROR:                        ^
2203 // CHECK-ERROR: error: invalid operand for instruction
2204 // CHECK-ERROR:        sabal v0.4s, v1.4s, v2.4h
2205 // CHECK-ERROR:                        ^
2206 // CHECK-ERROR: error: invalid operand for instruction
2207 // CHECK-ERROR:        sabal v0.2d, v1.2d, v2.2s
2208 // CHECK-ERROR:                        ^
2209
2210         sabal2 v0.8h, v1.16h, v2.16b
2211         sabal2 v0.4s, v1.8s, v2.8h
2212         sabal2 v0.2d, v1.4d, v2.4s
2213
2214 // CHECK-ERROR: error: invalid operand for instruction
2215 // CHECK-ERROR:        sabal2 v0.8h, v1.16h, v2.16b
2216 // CHECK-ERROR:                      ^
2217 // CHECK-ERROR: error: invalid operand for instruction
2218 // CHECK-ERROR:        sabal2 v0.4s, v1.8s, v2.8h
2219 // CHECK-ERROR:                      ^
2220 // CHECK-ERROR: error: invalid operand for instruction
2221 // CHECK-ERROR:        sabal2 v0.2d, v1.4d, v2.4s
2222 // CHECK-ERROR:                      ^
2223
2224         uabal v0.8h, v1.8h, v2.8b
2225         uabal v0.4s, v1.4s, v2.4h
2226         uabal v0.2d, v1.2d, v2.2s
2227
2228 // CHECK-ERROR: error: invalid operand for instruction
2229 // CHECK-ERROR:        uabal v0.8h, v1.8h, v2.8b
2230 // CHECK-ERROR:                        ^
2231 // CHECK-ERROR: error: invalid operand for instruction
2232 // CHECK-ERROR:        uabal v0.4s, v1.4s, v2.4h
2233 // CHECK-ERROR:                        ^
2234 // CHECK-ERROR: error: invalid operand for instruction
2235 // CHECK-ERROR:        uabal v0.2d, v1.2d, v2.2s
2236 // CHECK-ERROR:                        ^
2237
2238         uabal2 v0.8h, v1.16h, v2.16b
2239         uabal2 v0.4s, v1.8s, v2.8h
2240         uabal2 v0.2d, v1.4d, v2.4s
2241
2242 // CHECK-ERROR: error: invalid operand for instruction
2243 // CHECK-ERROR:        uabal2 v0.8h, v1.16h, v2.16b
2244 // CHECK-ERROR:                      ^
2245 // CHECK-ERROR: error: invalid operand for instruction
2246 // CHECK-ERROR:        uabal2 v0.4s, v1.8s, v2.8h
2247 // CHECK-ERROR:                      ^
2248 // CHECK-ERROR: error: invalid operand for instruction
2249 // CHECK-ERROR:        uabal2 v0.2d, v1.4d, v2.4s
2250 // CHECK-ERROR:                      ^
2251
2252         sabdl v0.8h, v1.8h, v2.8b
2253         sabdl v0.4s, v1.4s, v2.4h
2254         sabdl v0.2d, v1.2d, v2.2s
2255
2256 // CHECK-ERROR: error: invalid operand for instruction
2257 // CHECK-ERROR:        sabdl v0.8h, v1.8h, v2.8b
2258 // CHECK-ERROR:                        ^
2259 // CHECK-ERROR: error: invalid operand for instruction
2260 // CHECK-ERROR:        sabdl v0.4s, v1.4s, v2.4h
2261 // CHECK-ERROR:                        ^
2262 // CHECK-ERROR: error: invalid operand for instruction
2263 // CHECK-ERROR:        sabdl v0.2d, v1.2d, v2.2s
2264 // CHECK-ERROR:                        ^
2265
2266         sabdl2 v0.8h, v1.16h, v2.16b
2267         sabdl2 v0.4s, v1.8s, v2.8h
2268         sabdl2 v0.2d, v1.4d, v2.4s
2269
2270 // CHECK-ERROR: error: invalid operand for instruction
2271 // CHECK-ERROR:        sabdl2 v0.8h, v1.16h, v2.16b
2272 // CHECK-ERROR:                      ^
2273 // CHECK-ERROR: error: invalid operand for instruction
2274 // CHECK-ERROR:        sabdl2 v0.4s, v1.8s, v2.8h
2275 // CHECK-ERROR:                      ^
2276 // CHECK-ERROR: error: invalid operand for instruction
2277 // CHECK-ERROR:        sabdl2 v0.2d, v1.4d, v2.4s
2278 // CHECK-ERROR:                      ^
2279
2280         uabdl v0.8h, v1.8h, v2.8b
2281         uabdl v0.4s, v1.4s, v2.4h
2282         uabdl v0.2d, v1.2d, v2.2s
2283
2284 // CHECK-ERROR: error: invalid operand for instruction
2285 // CHECK-ERROR:        uabdl v0.8h, v1.8h, v2.8b
2286 // CHECK-ERROR:                        ^
2287 // CHECK-ERROR: error: invalid operand for instruction
2288 // CHECK-ERROR:        uabdl v0.4s, v1.4s, v2.4h
2289 // CHECK-ERROR:                        ^
2290 // CHECK-ERROR: error: invalid operand for instruction
2291 // CHECK-ERROR:        uabdl v0.2d, v1.2d, v2.2s
2292 // CHECK-ERROR:                        ^
2293
2294         uabdl2 v0.8h, v1.16h, v2.16b
2295         uabdl2 v0.4s, v1.8s, v2.8h
2296         uabdl2 v0.2d, v1.4d, v2.4s
2297
2298 // CHECK-ERROR: error: invalid operand for instruction
2299 // CHECK-ERROR:        uabdl2 v0.8h, v1.16h, v2.16b
2300 // CHECK-ERROR:                      ^
2301 // CHECK-ERROR: error: invalid operand for instruction
2302 // CHECK-ERROR:        uabdl2 v0.4s, v1.8s, v2.8h
2303 // CHECK-ERROR:                      ^
2304 // CHECK-ERROR: error: invalid operand for instruction
2305 // CHECK-ERROR:        uabdl2 v0.2d, v1.4d, v2.4s
2306 // CHECK-ERROR:                      ^
2307
2308         smlal v0.8h, v1.8h, v2.8b
2309         smlal v0.4s, v1.4s, v2.4h
2310         smlal v0.2d, v1.2d, v2.2s
2311
2312 // CHECK-ERROR: error: invalid operand for instruction
2313 // CHECK-ERROR:        smlal v0.8h, v1.8h, v2.8b
2314 // CHECK-ERROR:                        ^
2315 // CHECK-ERROR: error: invalid operand for instruction
2316 // CHECK-ERROR:        smlal v0.4s, v1.4s, v2.4h
2317 // CHECK-ERROR:                        ^
2318 // CHECK-ERROR: error: invalid operand for instruction
2319 // CHECK-ERROR:        smlal v0.2d, v1.2d, v2.2s
2320 // CHECK-ERROR:                        ^
2321
2322         smlal2 v0.8h, v1.16h, v2.16b
2323         smlal2 v0.4s, v1.8s, v2.8h
2324         smlal2 v0.2d, v1.4d, v2.4s
2325
2326 // CHECK-ERROR: error: invalid operand for instruction
2327 // CHECK-ERROR:        smlal2 v0.8h, v1.16h, v2.16b
2328 // CHECK-ERROR:                      ^
2329 // CHECK-ERROR: error: invalid operand for instruction
2330 // CHECK-ERROR:        smlal2 v0.4s, v1.8s, v2.8h
2331 // CHECK-ERROR:                      ^
2332 // CHECK-ERROR: error: invalid operand for instruction
2333 // CHECK-ERROR:        smlal2 v0.2d, v1.4d, v2.4s
2334 // CHECK-ERROR:                      ^
2335
2336         umlal v0.8h, v1.8h, v2.8b
2337         umlal v0.4s, v1.4s, v2.4h
2338         umlal v0.2d, v1.2d, v2.2s
2339
2340 // CHECK-ERROR: error: invalid operand for instruction
2341 // CHECK-ERROR:        umlal v0.8h, v1.8h, v2.8b
2342 // CHECK-ERROR:                        ^
2343 // CHECK-ERROR: error: invalid operand for instruction
2344 // CHECK-ERROR:        umlal v0.4s, v1.4s, v2.4h
2345 // CHECK-ERROR:                        ^
2346 // CHECK-ERROR: error: invalid operand for instruction
2347 // CHECK-ERROR:        umlal v0.2d, v1.2d, v2.2s
2348 // CHECK-ERROR:                        ^
2349
2350         umlal2 v0.8h, v1.16h, v2.16b
2351         umlal2 v0.4s, v1.8s, v2.8h
2352         umlal2 v0.2d, v1.4d, v2.4s
2353
2354 // CHECK-ERROR: error: invalid operand for instruction
2355 // CHECK-ERROR:        umlal2 v0.8h, v1.16h, v2.16b
2356 // CHECK-ERROR:                      ^
2357 // CHECK-ERROR: error: invalid operand for instruction
2358 // CHECK-ERROR:        umlal2 v0.4s, v1.8s, v2.8h
2359 // CHECK-ERROR:                      ^
2360 // CHECK-ERROR: error: invalid operand for instruction
2361 // CHECK-ERROR:        umlal2 v0.2d, v1.4d, v2.4s
2362 // CHECK-ERROR:                      ^
2363
2364         smlsl v0.8h, v1.8h, v2.8b
2365         smlsl v0.4s, v1.4s, v2.4h
2366         smlsl v0.2d, v1.2d, v2.2s
2367
2368 // CHECK-ERROR: error: invalid operand for instruction
2369 // CHECK-ERROR:        smlsl v0.8h, v1.8h, v2.8b
2370 // CHECK-ERROR:                        ^
2371 // CHECK-ERROR: error: invalid operand for instruction
2372 // CHECK-ERROR:        smlsl v0.4s, v1.4s, v2.4h
2373 // CHECK-ERROR:                        ^
2374 // CHECK-ERROR: error: invalid operand for instruction
2375 // CHECK-ERROR:        smlsl v0.2d, v1.2d, v2.2s
2376 // CHECK-ERROR:                        ^
2377
2378         smlsl2 v0.8h, v1.16h, v2.16b
2379         smlsl2 v0.4s, v1.8s, v2.8h
2380         smlsl2 v0.2d, v1.4d, v2.4s
2381
2382 // CHECK-ERROR: error: invalid operand for instruction
2383 // CHECK-ERROR:        smlsl2 v0.8h, v1.16h, v2.16b
2384 // CHECK-ERROR:                      ^
2385 // CHECK-ERROR: error: invalid operand for instruction
2386 // CHECK-ERROR:        smlsl2 v0.4s, v1.8s, v2.8h
2387 // CHECK-ERROR:                      ^
2388 // CHECK-ERROR: error: invalid operand for instruction
2389 // CHECK-ERROR:        smlsl2 v0.2d, v1.4d, v2.4s
2390 // CHECK-ERROR:                      ^
2391
2392         umlsl v0.8h, v1.8h, v2.8b
2393         umlsl v0.4s, v1.4s, v2.4h
2394         umlsl v0.2d, v1.2d, v2.2s
2395
2396 // CHECK-ERROR: error: invalid operand for instruction
2397 // CHECK-ERROR:        umlsl v0.8h, v1.8h, v2.8b
2398 // CHECK-ERROR:                        ^
2399 // CHECK-ERROR: error: invalid operand for instruction
2400 // CHECK-ERROR:        umlsl v0.4s, v1.4s, v2.4h
2401 // CHECK-ERROR:                        ^
2402 // CHECK-ERROR: error: invalid operand for instruction
2403 // CHECK-ERROR:        umlsl v0.2d, v1.2d, v2.2s
2404 // CHECK-ERROR:                        ^
2405
2406         umlsl2 v0.8h, v1.16h, v2.16b
2407         umlsl2 v0.4s, v1.8s, v2.8h
2408         umlsl2 v0.2d, v1.4d, v2.4s
2409
2410 // CHECK-ERROR: error: invalid operand for instruction
2411 // CHECK-ERROR:        umlsl2 v0.8h, v1.16h, v2.16b
2412 // CHECK-ERROR:                      ^
2413 // CHECK-ERROR: error: invalid operand for instruction
2414 // CHECK-ERROR:        umlsl2 v0.4s, v1.8s, v2.8h
2415 // CHECK-ERROR:                      ^
2416 // CHECK-ERROR: error: invalid operand for instruction
2417 // CHECK-ERROR:        umlsl2 v0.2d, v1.4d, v2.4s
2418 // CHECK-ERROR:                      ^
2419
2420         smull v0.8h, v1.8h, v2.8b
2421         smull v0.4s, v1.4s, v2.4h
2422         smull v0.2d, v1.2d, v2.2s
2423
2424 // CHECK-ERROR: error: invalid operand for instruction
2425 // CHECK-ERROR:        smull v0.8h, v1.8h, v2.8b
2426 // CHECK-ERROR:                        ^
2427 // CHECK-ERROR: error: invalid operand for instruction
2428 // CHECK-ERROR:        smull v0.4s, v1.4s, v2.4h
2429 // CHECK-ERROR:                        ^
2430 // CHECK-ERROR: error: invalid operand for instruction
2431 // CHECK-ERROR:        smull v0.2d, v1.2d, v2.2s
2432 // CHECK-ERROR:                        ^
2433
2434         smull2 v0.8h, v1.16h, v2.16b
2435         smull2 v0.4s, v1.8s, v2.8h
2436         smull2 v0.2d, v1.4d, v2.4s
2437
2438 // CHECK-ERROR: error: invalid operand for instruction
2439 // CHECK-ERROR:        smull2 v0.8h, v1.16h, v2.16b
2440 // CHECK-ERROR:                      ^
2441 // CHECK-ERROR: error: invalid operand for instruction
2442 // CHECK-ERROR:        smull2 v0.4s, v1.8s, v2.8h
2443 // CHECK-ERROR:                      ^
2444 // CHECK-ERROR: error: invalid operand for instruction
2445 // CHECK-ERROR:        smull2 v0.2d, v1.4d, v2.4s
2446 // CHECK-ERROR:                      ^
2447
2448         umull v0.8h, v1.8h, v2.8b
2449         umull v0.4s, v1.4s, v2.4h
2450         umull v0.2d, v1.2d, v2.2s
2451
2452 // CHECK-ERROR: error: invalid operand for instruction
2453 // CHECK-ERROR:        umull v0.8h, v1.8h, v2.8b
2454 // CHECK-ERROR:                        ^
2455 // CHECK-ERROR: error: invalid operand for instruction
2456 // CHECK-ERROR:        umull v0.4s, v1.4s, v2.4h
2457 // CHECK-ERROR:                        ^
2458 // CHECK-ERROR: error: invalid operand for instruction
2459 // CHECK-ERROR:        umull v0.2d, v1.2d, v2.2s
2460 // CHECK-ERROR:                        ^
2461
2462         umull2 v0.8h, v1.16h, v2.16b
2463         umull2 v0.4s, v1.8s, v2.8h
2464         umull2 v0.2d, v1.4d, v2.4s
2465
2466 // CHECK-ERROR: error: invalid operand for instruction
2467 // CHECK-ERROR:        umull2 v0.8h, v1.16h, v2.16b
2468 // CHECK-ERROR:                      ^
2469 // CHECK-ERROR: error: invalid operand for instruction
2470 // CHECK-ERROR:        umull2 v0.4s, v1.8s, v2.8h
2471 // CHECK-ERROR:                      ^
2472 // CHECK-ERROR: error: invalid operand for instruction
2473 // CHECK-ERROR:        umull2 v0.2d, v1.4d, v2.4s
2474 // CHECK-ERROR:                      ^
2475
2476 //------------------------------------------------------------------------------
2477 // Long - Variant 2
2478 //------------------------------------------------------------------------------
2479
2480         sqdmlal v0.4s, v1.4s, v2.4h
2481         sqdmlal v0.2d, v1.2d, v2.2s
2482
2483 // CHECK-ERROR: error: invalid operand for instruction
2484 // CHECK-ERROR:        sqdmlal v0.4s, v1.4s, v2.4h
2485 // CHECK-ERROR:                          ^
2486 // CHECK-ERROR: error: invalid operand for instruction
2487 // CHECK-ERROR:        sqdmlal v0.2d, v1.2d, v2.2s
2488 // CHECK-ERROR:                          ^
2489
2490         sqdmlal2 v0.4s, v1.8s, v2.8h
2491         sqdmlal2 v0.2d, v1.4d, v2.4s
2492
2493 // CHECK-ERROR: error: invalid operand for instruction
2494 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8s, v2.8h
2495 // CHECK-ERROR:                        ^
2496 // CHECK-ERROR: error: invalid operand for instruction
2497 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4d, v2.4s
2498 // CHECK-ERROR:                        ^
2499
2500         // Mismatched vector types
2501         sqdmlal v0.8h, v1.8b, v2.8b
2502         sqdmlal2 v0.8h, v1.16b, v2.16b
2503
2504 // CHECK-ERROR: error: invalid operand for instruction
2505 // CHECK-ERROR:        sqdmlal v0.8h, v1.8b, v2.8b
2506 // CHECK-ERROR:                   ^
2507 // CHECK-ERROR: error: invalid operand for instruction
2508 // CHECK-ERROR:        sqdmlal2 v0.8h, v1.16b, v2.16b
2509 // CHECK-ERROR:                    ^
2510
2511         sqdmlsl v0.4s, v1.4s, v2.4h
2512         sqdmlsl v0.2d, v1.2d, v2.2s
2513
2514 // CHECK-ERROR: error: invalid operand for instruction
2515 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4s, v2.4h
2516 // CHECK-ERROR:                          ^
2517 // CHECK-ERROR: error: invalid operand for instruction
2518 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2d, v2.2s
2519 // CHECK-ERROR:                          ^
2520
2521         sqdmlsl2 v0.4s, v1.8s, v2.8h
2522         sqdmlsl2 v0.2d, v1.4d, v2.4s
2523
2524 // CHECK-ERROR: error: invalid operand for instruction
2525 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8s, v2.8h
2526 // CHECK-ERROR:                        ^
2527 // CHECK-ERROR: error: invalid operand for instruction
2528 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4d, v2.4s
2529 // CHECK-ERROR:                        ^
2530
2531         // Mismatched vector types
2532         sqdmlsl v0.8h, v1.8b, v2.8b
2533         sqdmlsl2 v0.8h, v1.16b, v2.16b
2534
2535 // CHECK-ERROR: error: invalid operand for instruction
2536 // CHECK-ERROR:        sqdmlsl v0.8h, v1.8b, v2.8b
2537 // CHECK-ERROR:                   ^
2538 // CHECK-ERROR: error: invalid operand for instruction
2539 // CHECK-ERROR:        sqdmlsl2 v0.8h, v1.16b, v2.16b
2540 // CHECK-ERROR:                    ^
2541
2542
2543         sqdmull v0.4s, v1.4s, v2.4h
2544         sqdmull v0.2d, v1.2d, v2.2s
2545
2546 // CHECK-ERROR: error: invalid operand for instruction
2547 // CHECK-ERROR:        sqdmull v0.4s, v1.4s, v2.4h
2548 // CHECK-ERROR:                          ^
2549 // CHECK-ERROR: error: invalid operand for instruction
2550 // CHECK-ERROR:        sqdmull v0.2d, v1.2d, v2.2s
2551 // CHECK-ERROR:                          ^
2552
2553         sqdmull2 v0.4s, v1.8s, v2.8h
2554         sqdmull2 v0.2d, v1.4d, v2.4s
2555
2556 // CHECK-ERROR: error: invalid operand for instruction
2557 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8s, v2.8h
2558 // CHECK-ERROR:                        ^
2559 // CHECK-ERROR: error: invalid operand for instruction
2560 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4d, v2.4s
2561 // CHECK-ERROR:                        ^
2562
2563         // Mismatched vector types
2564         sqdmull v0.8h, v1.8b, v2.8b
2565         sqdmull2 v0.8h, v1.16b, v2.16b
2566
2567 // CHECK-ERROR: error: invalid operand for instruction
2568 // CHECK-ERROR:        sqdmull v0.8h, v1.8b, v2.8b
2569 // CHECK-ERROR:                   ^
2570 // CHECK-ERROR: error: invalid operand for instruction
2571 // CHECK-ERROR:        sqdmull2 v0.8h, v1.16b, v2.16b
2572 // CHECK-ERROR:                    ^
2573
2574
2575 //------------------------------------------------------------------------------
2576 // Long - Variant 3
2577 //------------------------------------------------------------------------------
2578
2579         pmull v0.8h, v1.8h, v2.8b
2580
2581 // CHECK-ERROR: error: invalid operand for instruction
2582 // CHECK-ERROR:        pmull v0.8h, v1.8h, v2.8b
2583 // CHECK-ERROR:                        ^
2584
2585         pmull v0.1q, v1.2d, v2.2d
2586         
2587 // CHECK-ERROR: error: invalid operand for instruction
2588 // CHECK-ERROR:        pmull v0.1q, v1.2d, v2.2d
2589 // CHECK-ERROR:                     ^
2590
2591         // Mismatched vector types
2592         pmull v0.4s, v1.4h, v2.4h
2593         pmull v0.2d, v1.2s, v2.2s
2594
2595 // CHECK-ERROR: error: invalid operand for instruction
2596 // CHECK-ERROR:        pmull v0.4s, v1.4h, v2.4h
2597 // CHECK-ERROR:                 ^
2598 // CHECK-ERROR: error: invalid operand for instruction
2599 // CHECK-ERROR:        pmull v0.2d, v1.2s, v2.2s
2600 // CHECK-ERROR:                 ^
2601
2602
2603         pmull2 v0.8h, v1.16h, v2.16b
2604
2605 // CHECK-ERROR: error: invalid operand for instruction
2606 // CHECK-ERROR:        pmull2 v0.8h, v1.16h, v2.16b
2607 // CHECK-ERROR:                      ^
2608
2609         pmull2 v0.q, v1.2d, v2.2d
2610         
2611 // CHECK-ERROR: error: invalid operand for instruction
2612 // CHECK-ERROR:        pmull2 v0.q, v1.2d, v2.2d
2613 // CHECK-ERROR:                  ^
2614
2615         // Mismatched vector types
2616         pmull2 v0.4s, v1.8h v2.8h
2617         pmull2 v0.2d, v1.4s, v2.4s
2618
2619 // CHECK-ERROR: error: expected comma before next operand
2620 // CHECK-ERROR:        pmull2 v0.4s, v1.8h v2.8h
2621 // CHECK-ERROR:                            ^
2622 // CHECK-ERROR: error: invalid operand for instruction
2623 // CHECK-ERROR:        pmull2 v0.2d, v1.4s, v2.4s
2624 // CHECK-ERROR:                  ^
2625
2626 //------------------------------------------------------------------------------
2627 // Widen
2628 //------------------------------------------------------------------------------
2629
2630         saddw v0.8h, v1.8h, v2.8h
2631         saddw v0.4s, v1.4s, v2.4s
2632         saddw v0.2d, v1.2d, v2.2d
2633
2634 // CHECK-ERROR: error: invalid operand for instruction
2635 // CHECK-ERROR:        saddw v0.8h, v1.8h, v2.8h
2636 // CHECK-ERROR:                               ^
2637 // CHECK-ERROR: error: invalid operand for instruction
2638 // CHECK-ERROR:        saddw v0.4s, v1.4s, v2.4s
2639 // CHECK-ERROR:                               ^
2640 // CHECK-ERROR: error: invalid operand for instruction
2641 // CHECK-ERROR:        saddw v0.2d, v1.2d, v2.2d
2642 // CHECK-ERROR:                               ^
2643
2644         saddw2 v0.8h, v1.8h, v2.16h
2645         saddw2 v0.4s, v1.4s, v2.8s
2646         saddw2 v0.2d, v1.2d, v2.4d
2647
2648 // CHECK-ERROR: error: invalid operand for instruction
2649 // CHECK-ERROR:        saddw2 v0.8h, v1.8h, v2.16h
2650 // CHECK-ERROR:                             ^
2651 // CHECK-ERROR: error: invalid operand for instruction
2652 // CHECK-ERROR:        saddw2 v0.4s, v1.4s, v2.8s
2653 // CHECK-ERROR:                             ^
2654 // CHECK-ERROR: error: invalid operand for instruction
2655 // CHECK-ERROR:        saddw2 v0.2d, v1.2d, v2.4d
2656 // CHECK-ERROR:                             ^
2657
2658         uaddw v0.8h, v1.8h, v2.8h
2659         uaddw v0.4s, v1.4s, v2.4s
2660         uaddw v0.2d, v1.2d, v2.2d
2661
2662 // CHECK-ERROR: error: invalid operand for instruction
2663 // CHECK-ERROR:        uaddw v0.8h, v1.8h, v2.8h
2664 // CHECK-ERROR:                               ^
2665 // CHECK-ERROR: error: invalid operand for instruction
2666 // CHECK-ERROR:        uaddw v0.4s, v1.4s, v2.4s
2667 // CHECK-ERROR:                               ^
2668 // CHECK-ERROR: error: invalid operand for instruction
2669 // CHECK-ERROR:        uaddw v0.2d, v1.2d, v2.2d
2670 // CHECK-ERROR:                               ^
2671
2672         uaddw2 v0.8h, v1.8h, v2.16h
2673         uaddw2 v0.4s, v1.4s, v2.8s
2674         uaddw2 v0.2d, v1.2d, v2.4d
2675
2676 // CHECK-ERROR: error: invalid operand for instruction
2677 // CHECK-ERROR:        uaddw2 v0.8h, v1.8h, v2.16h
2678 // CHECK-ERROR:                             ^
2679 // CHECK-ERROR: error: invalid operand for instruction
2680 // CHECK-ERROR:        uaddw2 v0.4s, v1.4s, v2.8s
2681 // CHECK-ERROR:                             ^
2682 // CHECK-ERROR: error: invalid operand for instruction
2683 // CHECK-ERROR:        uaddw2 v0.2d, v1.2d, v2.4d
2684 // CHECK-ERROR:                             ^
2685
2686         ssubw v0.8h, v1.8h, v2.8h
2687         ssubw v0.4s, v1.4s, v2.4s
2688         ssubw v0.2d, v1.2d, v2.2d
2689
2690 // CHECK-ERROR: error: invalid operand for instruction
2691 // CHECK-ERROR:        ssubw v0.8h, v1.8h, v2.8h
2692 // CHECK-ERROR:                               ^
2693 // CHECK-ERROR: error: invalid operand for instruction
2694 // CHECK-ERROR:        ssubw v0.4s, v1.4s, v2.4s
2695 // CHECK-ERROR:                               ^
2696 // CHECK-ERROR: error: invalid operand for instruction
2697 // CHECK-ERROR:        ssubw v0.2d, v1.2d, v2.2d
2698 // CHECK-ERROR:                               ^
2699
2700         ssubw2 v0.8h, v1.8h, v2.16h
2701         ssubw2 v0.4s, v1.4s, v2.8s
2702         ssubw2 v0.2d, v1.2d, v2.4d
2703
2704 // CHECK-ERROR: error: invalid operand for instruction
2705 // CHECK-ERROR:        ssubw2 v0.8h, v1.8h, v2.16h
2706 // CHECK-ERROR:                             ^
2707 // CHECK-ERROR: error: invalid operand for instruction
2708 // CHECK-ERROR:        ssubw2 v0.4s, v1.4s, v2.8s
2709 // CHECK-ERROR:                             ^
2710 // CHECK-ERROR: error: invalid operand for instruction
2711 // CHECK-ERROR:        ssubw2 v0.2d, v1.2d, v2.4d
2712 // CHECK-ERROR:                             ^
2713
2714         usubw v0.8h, v1.8h, v2.8h
2715         usubw v0.4s, v1.4s, v2.4s
2716         usubw v0.2d, v1.2d, v2.2d
2717
2718 // CHECK-ERROR: error: invalid operand for instruction
2719 // CHECK-ERROR:        usubw v0.8h, v1.8h, v2.8h
2720 // CHECK-ERROR:                               ^
2721 // CHECK-ERROR: error: invalid operand for instruction
2722 // CHECK-ERROR:        usubw v0.4s, v1.4s, v2.4s
2723 // CHECK-ERROR:                               ^
2724 // CHECK-ERROR: error: invalid operand for instruction
2725 // CHECK-ERROR:        usubw v0.2d, v1.2d, v2.2d
2726 // CHECK-ERROR:                               ^
2727
2728         usubw2 v0.8h, v1.8h, v2.16h
2729         usubw2 v0.4s, v1.4s, v2.8s
2730         usubw2 v0.2d, v1.2d, v2.4d
2731
2732 // CHECK-ERROR: error: invalid operand for instruction
2733 // CHECK-ERROR:        usubw2 v0.8h, v1.8h, v2.16h
2734 // CHECK-ERROR:                             ^
2735 // CHECK-ERROR: error: invalid operand for instruction
2736 // CHECK-ERROR:        usubw2 v0.4s, v1.4s, v2.8s
2737 // CHECK-ERROR:                             ^
2738 // CHECK-ERROR: error: invalid operand for instruction
2739 // CHECK-ERROR:        usubw2 v0.2d, v1.2d, v2.4d
2740 // CHECK-ERROR:                             ^
2741
2742 //------------------------------------------------------------------------------
2743 // Narrow
2744 //------------------------------------------------------------------------------
2745
2746         addhn v0.8b, v1.8h, v2.8d
2747         addhn v0.4h, v1.4s, v2.4h
2748         addhn v0.2s, v1.2d, v2.2s
2749
2750 // CHECK-ERROR: error: invalid operand for instruction
2751 // CHECK-ERROR:        addhn v0.8b, v1.8h, v2.8d
2752 // CHECK-ERROR:                            ^
2753 // CHECK-ERROR: error: invalid operand for instruction
2754 // CHECK-ERROR:        addhn v0.4h, v1.4s, v2.4h
2755 // CHECK-ERROR:                               ^
2756 // CHECK-ERROR: error: invalid operand for instruction
2757 // CHECK-ERROR:        addhn v0.2s, v1.2d, v2.2s
2758 // CHECK-ERROR:                               ^
2759
2760         addhn2 v0.16b, v1.8h, v2.8b
2761         addhn2 v0.8h, v1.4s, v2.4h
2762         addhn2 v0.4s, v1.2d, v2.2s
2763
2764 // CHECK-ERROR: error: invalid operand for instruction
2765 // CHECK-ERROR:        addhn2 v0.16b, v1.8h, v2.8b
2766 // CHECK-ERROR:                                 ^
2767 // CHECK-ERROR: error: invalid operand for instruction
2768 // CHECK-ERROR:        addhn2 v0.8h, v1.4s, v2.4h
2769 // CHECK-ERROR:                                ^
2770 // CHECK-ERROR: error: invalid operand for instruction
2771 // CHECK-ERROR:        addhn2 v0.4s, v1.2d, v2.2s
2772 // CHECK-ERROR:                                ^
2773
2774         raddhn v0.8b, v1.8h, v2.8b
2775         raddhn v0.4h, v1.4s, v2.4h
2776         raddhn v0.2s, v1.2d, v2.2s
2777
2778 // CHECK-ERROR: error: invalid operand for instruction
2779 // CHECK-ERROR:        raddhn v0.8b, v1.8h, v2.8b
2780 // CHECK-ERROR:                                ^
2781 // CHECK-ERROR: error: invalid operand for instruction
2782 // CHECK-ERROR:        raddhn v0.4h, v1.4s, v2.4h
2783 // CHECK-ERROR:                                ^
2784 // CHECK-ERROR: error: invalid operand for instruction
2785 // CHECK-ERROR:        raddhn v0.2s, v1.2d, v2.2s
2786 // CHECK-ERROR:                                ^
2787
2788         raddhn2 v0.16b, v1.8h, v2.8b
2789         raddhn2 v0.8h, v1.4s, v2.4h
2790         raddhn2 v0.4s, v1.2d, v2.2s
2791
2792 // CHECK-ERROR: error: invalid operand for instruction
2793 // CHECK-ERROR:        raddhn2 v0.16b, v1.8h, v2.8b
2794 // CHECK-ERROR:                                  ^
2795 // CHECK-ERROR: error: invalid operand for instruction
2796 // CHECK-ERROR:        raddhn2 v0.8h, v1.4s, v2.4h
2797 // CHECK-ERROR:                                 ^
2798 // CHECK-ERROR: error: invalid operand for instruction
2799 // CHECK-ERROR:        raddhn2 v0.4s, v1.2d, v2.2s
2800 // CHECK-ERROR:                                 ^
2801
2802         rsubhn v0.8b, v1.8h, v2.8b
2803         rsubhn v0.4h, v1.4s, v2.4h
2804         rsubhn v0.2s, v1.2d, v2.2s
2805
2806 // CHECK-ERROR: error: invalid operand for instruction
2807 // CHECK-ERROR:        rsubhn v0.8b, v1.8h, v2.8b
2808 // CHECK-ERROR:                                ^
2809 // CHECK-ERROR: error: invalid operand for instruction
2810 // CHECK-ERROR:        rsubhn v0.4h, v1.4s, v2.4h
2811 // CHECK-ERROR:                                ^
2812 // CHECK-ERROR: error: invalid operand for instruction
2813 // CHECK-ERROR:        rsubhn v0.2s, v1.2d, v2.2s
2814 // CHECK-ERROR:                                ^
2815
2816         rsubhn2 v0.16b, v1.8h, v2.8b
2817         rsubhn2 v0.8h, v1.4s, v2.4h
2818         rsubhn2 v0.4s, v1.2d, v2.2s
2819
2820 // CHECK-ERROR: error: invalid operand for instruction
2821 // CHECK-ERROR:        rsubhn2 v0.16b, v1.8h, v2.8b
2822 // CHECK-ERROR:                                  ^
2823 // CHECK-ERROR: error: invalid operand for instruction
2824 // CHECK-ERROR:        rsubhn2 v0.8h, v1.4s, v2.4h
2825 // CHECK-ERROR:                                 ^
2826 // CHECK-ERROR: error: invalid operand for instruction
2827 // CHECK-ERROR:        rsubhn2 v0.4s, v1.2d, v2.2s
2828 // CHECK-ERROR:                                 ^
2829
2830 //----------------------------------------------------------------------
2831 // Scalar Reduce Add Pairwise (Integer)
2832 //----------------------------------------------------------------------
2833          // invalid vector types
2834       addp s0, d1.2d
2835       addp d0, d1.2s
2836
2837 // CHECK-ERROR: error: invalid operand for instruction
2838 // CHECK-ERROR:          addp s0, d1.2d
2839 // CHECK-ERROR:               ^
2840 // CHECK-ERROR: error: invalid operand for instruction
2841 // CHECK-ERROR:          addp d0, d1.2s
2842 // CHECK-ERROR:                      ^
2843
2844 //----------------------------------------------------------------------
2845 // Scalar Reduce Add Pairwise (Floating Point)
2846 //----------------------------------------------------------------------
2847          // invalid vector types
2848       faddp s0, d1.2d
2849       faddp d0, d1.2s
2850
2851 // CHECK-ERROR: error: invalid operand for instruction
2852 // CHECK-ERROR:          faddp s0, d1.2d
2853 // CHECK-ERROR:                    ^
2854 // CHECK-ERROR: error: invalid operand for instruction
2855 // CHECK-ERROR:          faddp d0, d1.2s
2856 // CHECK-ERROR:                    ^
2857
2858 //----------------------------------------------------------------------
2859 // Scalar Reduce Maximum Pairwise (Floating Point)
2860 //----------------------------------------------------------------------
2861          // mismatched and invalid vector types
2862       fmaxp s0, v1.2d
2863       fmaxp d31, v2.2s
2864       fmaxp h3, v2.2s
2865
2866 // CHECK-ERROR: error: invalid operand for instruction
2867 // CHECK-ERROR:          fmaxp s0, v1.2d
2868 // CHECK-ERROR:                       ^
2869 // CHECK-ERROR: error: invalid operand for instruction
2870 // CHECK-ERROR:          fmaxp d31, v2.2s
2871 // CHECK-ERROR:                        ^
2872 // CHECK-ERROR: error: invalid operand for instruction
2873 // CHECK-ERROR:          fmaxp h3, v2.2s
2874 // CHECK-ERROR:                ^
2875
2876
2877 //----------------------------------------------------------------------
2878 // Scalar Reduce Minimum Pairwise (Floating Point)
2879 //----------------------------------------------------------------------
2880          // mismatched and invalid vector types
2881       fminp s0, v1.4h
2882       fminp d31, v2.8h
2883       fminp b3, v2.2s
2884
2885 // CHECK-ERROR: error: invalid operand for instruction
2886 // CHECK-ERROR:          fminp s0, v1.4h
2887 // CHECK-ERROR:                       ^
2888 // CHECK-ERROR: error: invalid operand for instruction
2889 // CHECK-ERROR:          fminp d31, v2.8h
2890 // CHECK-ERROR:                        ^
2891 // CHECK-ERROR: error: invalid operand for instruction
2892 // CHECK-ERROR:          fminp b3, v2.2s
2893 // CHECK-ERROR:                ^
2894
2895
2896 //----------------------------------------------------------------------
2897 // Scalar Reduce maxNum Pairwise (Floating Point)
2898 //----------------------------------------------------------------------
2899          // mismatched and invalid vector types
2900       fmaxnmp s0, v1.8b
2901       fmaxnmp d31, v2.16b
2902       fmaxnmp v1.2s, v2.2s
2903
2904 // CHECK-ERROR: error: invalid operand for instruction
2905 // CHECK-ERROR:          fmaxnmp s0, v1.8b
2906 // CHECK-ERROR:                         ^
2907 // CHECK-ERROR: error: invalid operand for instruction
2908 // CHECK-ERROR:          fmaxnmp d31, v2.16b
2909 // CHECK-ERROR:                          ^
2910 // CHECK-ERROR: error: too few operands for instruction
2911 // CHECK-ERROR:          fmaxnmp v1.2s, v2.2s
2912 // CHECK-ERROR:          ^
2913
2914 //----------------------------------------------------------------------
2915 // Scalar Reduce minNum Pairwise (Floating Point)
2916 //----------------------------------------------------------------------
2917          // mismatched and invalid vector types
2918       fminnmp s0, v1.2d
2919       fminnmp d31, v2.4s
2920       fminnmp v1.4s, v2.2d
2921
2922 // CHECK-ERROR: error: invalid operand for instruction
2923 // CHECK-ERROR:          fminnmp s0, v1.2d
2924 // CHECK-ERROR:                         ^
2925 // CHECK-ERROR: error: invalid operand for instruction
2926 // CHECK-ERROR:          fminnmp d31, v2.4s
2927 // CHECK-ERROR:                          ^
2928 // CHECK-ERROR: error: invalid operand for instruction
2929 // CHECK-ERROR:          fminnmp v1.4s, v2.2d
2930 // CHECK-ERROR:          ^
2931
2932       mla v0.2d, v1.2d, v16.d[1]
2933       mla v0.2s, v1.2s, v2.s[4]
2934       mla v0.4s, v1.4s, v2.s[4]
2935       mla v0.2h, v1.2h, v2.h[1]
2936       mla v0.4h, v1.4h, v2.h[8]
2937       mla v0.8h, v1.8h, v2.h[8]
2938       mla v0.4h, v1.4h, v16.h[2]
2939       mla v0.8h, v1.8h, v16.h[2]
2940
2941 // CHECK-ERROR: error: invalid operand for instruction
2942 // CHECK-ERROR:        mla v0.2d, v1.2d, v16.d[1]
2943 // CHECK-ERROR:               ^
2944 // CHECK-ERROR: error: lane number incompatible with layout
2945 // CHECK-ERROR:        mla v0.2s, v1.2s, v2.s[4]
2946 // CHECK-ERROR:                               ^
2947 // CHECK-ERROR: error: lane number incompatible with layout
2948 // CHECK-ERROR:        mla v0.4s, v1.4s, v2.s[4]
2949 // CHECK-ERROR:                               ^
2950 // CHECK-ERROR: error: invalid operand for instruction
2951 // CHECK-ERROR:        mla v0.2h, v1.2h, v2.h[1]
2952 // CHECK-ERROR:            ^
2953 // CHECK-ERROR: error: lane number incompatible with layout
2954 // CHECK-ERROR:        mla v0.4h, v1.4h, v2.h[8]
2955 // CHECK-ERROR:                               ^
2956 // CHECK-ERROR: error: lane number incompatible with layout
2957 // CHECK-ERROR:        mla v0.8h, v1.8h, v2.h[8]
2958 // CHECK-ERROR:                               ^
2959 // CHECK-ERROR: error: invalid operand for instruction
2960 // CHECK-ERROR:        mla v0.4h, v1.4h, v16.h[2]
2961 // CHECK-ERROR:                          ^
2962 // CHECK-ERROR: error: invalid operand for instruction
2963 // CHECK-ERROR:        mla v0.8h, v1.8h, v16.h[2]
2964 // CHECK-ERROR:                              ^
2965
2966       mls v0.2d, v1.2d, v16.d[1]
2967       mls v0.2s, v1.2s, v2.s[4]
2968       mls v0.4s, v1.4s, v2.s[4]
2969       mls v0.2h, v1.2h, v2.h[1]
2970       mls v0.4h, v1.4h, v2.h[8]
2971       mls v0.8h, v1.8h, v2.h[8]
2972       mls v0.4h, v1.4h, v16.h[2]
2973       mls v0.8h, v1.8h, v16.h[2]
2974
2975 // CHECK-ERROR: error: invalid operand for instruction
2976 // CHECK-ERROR:        mls v0.2d, v1.2d, v16.d[1]
2977 // CHECK-ERROR:               ^
2978 // CHECK-ERROR: error: lane number incompatible with layout
2979 // CHECK-ERROR:        mls v0.2s, v1.2s, v2.s[4]
2980 // CHECK-ERROR:                               ^
2981 // CHECK-ERROR: error: lane number incompatible with layout
2982 // CHECK-ERROR:        mls v0.4s, v1.4s, v2.s[4]
2983 // CHECK-ERROR:                               ^
2984 // CHECK-ERROR: error: invalid operand for instruction
2985 // CHECK-ERROR:        mls v0.2h, v1.2h, v2.h[1]
2986 // CHECK-ERROR:            ^
2987 // CHECK-ERROR: error: lane number incompatible with layout
2988 // CHECK-ERROR:        mls v0.4h, v1.4h, v2.h[8]
2989 // CHECK-ERROR:                               ^
2990 // CHECK-ERROR: error: lane number incompatible with layout
2991 // CHECK-ERROR:        mls v0.8h, v1.8h, v2.h[8]
2992 // CHECK-ERROR:                               ^
2993 // CHECK-ERROR: error: invalid operand for instruction
2994 // CHECK-ERROR:        mls v0.4h, v1.4h, v16.h[2]
2995 // CHECK-ERROR:                          ^
2996 // CHECK-ERROR: error: invalid operand for instruction
2997 // CHECK-ERROR:        mls v0.8h, v1.8h, v16.h[2]
2998 // CHECK-ERROR:                              ^
2999
3000       fmla v0.4h, v1.4h, v2.h[2]
3001       fmla v0.8h, v1.8h, v2.h[2]
3002       fmla v0.2s, v1.2s, v2.s[4]
3003       fmla v0.2s, v1.2s, v22.s[4]
3004       fmla v3.4s, v8.4s, v2.s[4]
3005       fmla v3.4s, v8.4s, v22.s[4]
3006       fmla v0.2d, v1.2d, v2.d[2]
3007       fmla v0.2d, v1.2d, v22.d[2]
3008
3009 // CHECK-ERROR: error: invalid operand for instruction
3010 // CHECK-ERROR:        fmla v0.4h, v1.4h, v2.h[2]
3011 // CHECK-ERROR:                ^
3012 // CHECK-ERROR: error: invalid operand for instruction
3013 // CHECK-ERROR:        fmla v0.8h, v1.8h, v2.h[2]
3014 // CHECK-ERROR:                ^
3015 // CHECK-ERROR: error: lane number incompatible with layout
3016 // CHECK-ERROR:        fmla v0.2s, v1.2s, v2.s[4]
3017 // CHECK-ERROR:                                ^
3018 // CHECK-ERROR: error: lane number incompatible with layout
3019 // CHECK-ERROR:        fmla v0.2s, v1.2s, v22.s[4]
3020 // CHECK-ERROR:                                 ^
3021 // CHECK-ERROR: error: lane number incompatible with layout
3022 // CHECK-ERROR:        fmla v3.4s, v8.4s, v2.s[4]
3023 // CHECK-ERROR:                                ^
3024 // CHECK-ERROR: error: lane number incompatible with layout
3025 // CHECK-ERROR:        fmla v3.4s, v8.4s, v22.s[4]
3026 // CHECK-ERROR:                                 ^
3027 // CHECK-ERROR: error: lane number incompatible with layout
3028 // CHECK-ERROR:        fmla v0.2d, v1.2d, v2.d[2]
3029 // CHECK-ERROR:                                ^
3030 // CHECK-ERROR: error: lane number incompatible with layout
3031 // CHECK-ERROR:        fmla v0.2d, v1.2d, v22.d[2]
3032 // CHECK-ERROR:                                 ^
3033
3034       fmls v0.4h, v1.4h, v2.h[2]
3035       fmls v0.8h, v1.8h, v2.h[2]
3036       fmls v0.2s, v1.2s, v2.s[4]
3037       fmls v0.2s, v1.2s, v22.s[4]
3038       fmls v3.4s, v8.4s, v2.s[4]
3039       fmls v3.4s, v8.4s, v22.s[4]
3040       fmls v0.2d, v1.2d, v2.d[2]
3041       fmls v0.2d, v1.2d, v22.d[2]
3042
3043 // CHECK-ERROR: error: invalid operand for instruction
3044 // CHECK-ERROR:        fmls v0.4h, v1.4h, v2.h[2]
3045 // CHECK-ERROR:                ^
3046 // CHECK-ERROR: error: invalid operand for instruction
3047 // CHECK-ERROR:        fmls v0.8h, v1.8h, v2.h[2]
3048 // CHECK-ERROR:                ^
3049 // CHECK-ERROR: error: lane number incompatible with layout
3050 // CHECK-ERROR:        fmls v0.2s, v1.2s, v2.s[4]
3051 // CHECK-ERROR:                                ^
3052 // CHECK-ERROR: error: lane number incompatible with layout
3053 // CHECK-ERROR:        fmls v0.2s, v1.2s, v22.s[4]
3054 // CHECK-ERROR:                                 ^
3055 // CHECK-ERROR: error: lane number incompatible with layout
3056 // CHECK-ERROR:        fmls v3.4s, v8.4s, v2.s[4]
3057 // CHECK-ERROR:                                ^
3058 // CHECK-ERROR: error: lane number incompatible with layout
3059 // CHECK-ERROR:        fmls v3.4s, v8.4s, v22.s[4]
3060 // CHECK-ERROR:                                 ^
3061 // CHECK-ERROR: error: lane number incompatible with layout
3062 // CHECK-ERROR:        fmls v0.2d, v1.2d, v2.d[2]
3063 // CHECK-ERROR:                                ^
3064 // CHECK-ERROR: error: lane number incompatible with layout
3065 // CHECK-ERROR:        fmls v0.2d, v1.2d, v22.d[2]
3066 // CHECK-ERROR:                                 ^
3067
3068       smlal v0.4h, v1.4h, v2.h[2]
3069       smlal v0.4s, v1.4h, v2.h[8]
3070       smlal v0.4s, v1.4h, v16.h[2]
3071       smlal v0.2s, v1.2s, v2.s[4]
3072       smlal v0.2d, v1.2s, v2.s[4]
3073       smlal v0.2d, v1.2s, v22.s[4]
3074       smlal2 v0.4h, v1.8h, v1.h[2]
3075       smlal2 v0.4s, v1.8h, v1.h[8]
3076       smlal2 v0.4s, v1.8h, v16.h[2]
3077       smlal2 v0.2s, v1.4s, v1.s[2]
3078       smlal2 v0.2d, v1.4s, v1.s[4]
3079       smlal2 v0.2d, v1.4s, v22.s[4]
3080
3081 // CHECK-ERROR: error: invalid operand for instruction
3082 // CHECK-ERROR:        smlal v0.4h, v1.4h, v2.h[2]
3083 // CHECK-ERROR:              ^
3084 // CHECK-ERROR: error: lane number incompatible with layout
3085 // CHECK-ERROR:        smlal v0.4s, v1.4h, v2.h[8]
3086 // CHECK-ERROR:                                 ^
3087 // CHECK-ERROR: error: invalid operand for instruction
3088 // CHECK-ERROR:        smlal v0.4s, v1.4h, v16.h[2]
3089 // CHECK-ERROR:                            ^
3090 // CHECK-ERROR: error: lane number incompatible with layout
3091 // CHECK-ERROR:        smlal v0.2s, v1.2s, v2.s[4]
3092 // CHECK-ERROR:                                 ^
3093 // CHECK-ERROR: error: lane number incompatible with layout
3094 // CHECK-ERROR:        smlal v0.2d, v1.2s, v2.s[4]
3095 // CHECK-ERROR:                                 ^
3096 // CHECK-ERROR: error: lane number incompatible with layout
3097 // CHECK-ERROR:        smlal v0.2d, v1.2s, v22.s[4]
3098 // CHECK-ERROR:                                  ^
3099 // CHECK-ERROR: error: invalid operand for instruction
3100 // CHECK-ERROR:        smlal2 v0.4h, v1.8h, v1.h[2]
3101 // CHECK-ERROR:               ^
3102 // CHECK-ERROR: error: lane number incompatible with layout
3103 // CHECK-ERROR:        smlal2 v0.4s, v1.8h, v1.h[8]
3104 // CHECK-ERROR:                                  ^
3105 // CHECK-ERROR: error: invalid operand for instruction
3106 // CHECK-ERROR:        smlal2 v0.4s, v1.8h, v16.h[2]
3107 // CHECK-ERROR:                                 ^
3108 // CHECK-ERROR: error: invalid operand for instruction
3109 // CHECK-ERROR:        smlal2 v0.2s, v1.4s, v1.s[2]
3110 // CHECK-ERROR:               ^
3111 // CHECK-ERROR: error: lane number incompatible with layout
3112 // CHECK-ERROR:        smlal2 v0.2d, v1.4s, v1.s[4]
3113 // CHECK-ERROR:                                  ^
3114 // CHECK-ERROR: error: lane number incompatible with layout
3115 // CHECK-ERROR:        smlal2 v0.2d, v1.4s, v22.s[4]
3116 // CHECK-ERROR:                                   ^
3117
3118       smlsl v0.4h, v1.4h, v2.h[2]
3119       smlsl v0.4s, v1.4h, v2.h[8]
3120       smlsl v0.4s, v1.4h, v16.h[2]
3121       smlsl v0.2s, v1.2s, v2.s[4]
3122       smlsl v0.2d, v1.2s, v2.s[4]
3123       smlsl v0.2d, v1.2s, v22.s[4]
3124       smlsl2 v0.4h, v1.8h, v1.h[2]
3125       smlsl2 v0.4s, v1.8h, v1.h[8]
3126       smlsl2 v0.4s, v1.8h, v16.h[2]
3127       smlsl2 v0.2s, v1.4s, v1.s[2]
3128       smlsl2 v0.2d, v1.4s, v1.s[4]
3129       smlsl2 v0.2d, v1.4s, v22.s[4]
3130
3131 // CHECK-ERROR: error: invalid operand for instruction
3132 // CHECK-ERROR:        smlsl v0.4h, v1.4h, v2.h[2]
3133 // CHECK-ERROR:              ^
3134 // CHECK-ERROR: error: lane number incompatible with layout
3135 // CHECK-ERROR:        smlsl v0.4s, v1.4h, v2.h[8]
3136 // CHECK-ERROR:                                 ^
3137 // CHECK-ERROR: error: invalid operand for instruction
3138 // CHECK-ERROR:        smlsl v0.4s, v1.4h, v16.h[2]
3139 // CHECK-ERROR:                            ^
3140 // CHECK-ERROR: error: lane number incompatible with layout
3141 // CHECK-ERROR:        smlsl v0.2s, v1.2s, v2.s[4]
3142 // CHECK-ERROR:                                 ^
3143 // CHECK-ERROR: error: lane number incompatible with layout
3144 // CHECK-ERROR:        smlsl v0.2d, v1.2s, v2.s[4]
3145 // CHECK-ERROR:                                 ^
3146 // CHECK-ERROR: error: lane number incompatible with layout
3147 // CHECK-ERROR:        smlsl v0.2d, v1.2s, v22.s[4]
3148 // CHECK-ERROR:                                  ^
3149 // CHECK-ERROR: error: invalid operand for instruction
3150 // CHECK-ERROR:        smlsl2 v0.4h, v1.8h, v1.h[2]
3151 // CHECK-ERROR:               ^
3152 // CHECK-ERROR: error: lane number incompatible with layout
3153 // CHECK-ERROR:        smlsl2 v0.4s, v1.8h, v1.h[8]
3154 // CHECK-ERROR:                                  ^
3155 // CHECK-ERROR: error: invalid operand for instruction
3156 // CHECK-ERROR:        smlsl2 v0.4s, v1.8h, v16.h[2]
3157 // CHECK-ERROR:                                 ^
3158 // CHECK-ERROR: error: invalid operand for instruction
3159 // CHECK-ERROR:        smlsl2 v0.2s, v1.4s, v1.s[2]
3160 // CHECK-ERROR:               ^
3161 // CHECK-ERROR: error: lane number incompatible with layout
3162 // CHECK-ERROR:        smlsl2 v0.2d, v1.4s, v1.s[4]
3163 // CHECK-ERROR:                                  ^
3164 // CHECK-ERROR: error: lane number incompatible with layout
3165 // CHECK-ERROR:        smlsl2 v0.2d, v1.4s, v22.s[4]
3166 // CHECK-ERROR:                                   ^
3167
3168       umlal v0.4h, v1.4h, v2.h[2]
3169       umlal v0.4s, v1.4h, v2.h[8]
3170       umlal v0.4s, v1.4h, v16.h[2]
3171       umlal v0.2s, v1.2s, v2.s[4]
3172       umlal v0.2d, v1.2s, v2.s[4]
3173       umlal v0.2d, v1.2s, v22.s[4]
3174       umlal2 v0.4h, v1.8h, v1.h[2]
3175       umlal2 v0.4s, v1.8h, v1.h[8]
3176       umlal2 v0.4s, v1.8h, v16.h[2]
3177       umlal2 v0.2s, v1.4s, v1.s[2]
3178       umlal2 v0.2d, v1.4s, v1.s[4]
3179       umlal2 v0.2d, v1.4s, v22.s[4]
3180
3181 // CHECK-ERROR: error: invalid operand for instruction
3182 // CHECK-ERROR:        umlal v0.4h, v1.4h, v2.h[2]
3183 // CHECK-ERROR:              ^
3184 // CHECK-ERROR: error: lane number incompatible with layout
3185 // CHECK-ERROR:        umlal v0.4s, v1.4h, v2.h[8]
3186 // CHECK-ERROR:                                 ^
3187 // CHECK-ERROR: error: invalid operand for instruction
3188 // CHECK-ERROR:        umlal v0.4s, v1.4h, v16.h[2]
3189 // CHECK-ERROR:                            ^
3190 // CHECK-ERROR: error: lane number incompatible with layout
3191 // CHECK-ERROR:        umlal v0.2s, v1.2s, v2.s[4]
3192 // CHECK-ERROR:                                 ^
3193 // CHECK-ERROR: error: lane number incompatible with layout
3194 // CHECK-ERROR:        umlal v0.2d, v1.2s, v2.s[4]
3195 // CHECK-ERROR:                                 ^
3196 // CHECK-ERROR: error: lane number incompatible with layout
3197 // CHECK-ERROR:        umlal v0.2d, v1.2s, v22.s[4]
3198 // CHECK-ERROR:                                  ^
3199 // CHECK-ERROR: error: invalid operand for instruction
3200 // CHECK-ERROR:        umlal2 v0.4h, v1.8h, v1.h[2]
3201 // CHECK-ERROR:               ^
3202 // CHECK-ERROR: error: lane number incompatible with layout
3203 // CHECK-ERROR:        umlal2 v0.4s, v1.8h, v1.h[8]
3204 // CHECK-ERROR:                                  ^
3205 // CHECK-ERROR: error: invalid operand for instruction
3206 // CHECK-ERROR:        umlal2 v0.4s, v1.8h, v16.h[2]
3207 // CHECK-ERROR:                                 ^
3208 // CHECK-ERROR: error: invalid operand for instruction
3209 // CHECK-ERROR:        umlal2 v0.2s, v1.4s, v1.s[2]
3210 // CHECK-ERROR:               ^
3211 // CHECK-ERROR: error: lane number incompatible with layout
3212 // CHECK-ERROR:        umlal2 v0.2d, v1.4s, v1.s[4]
3213 // CHECK-ERROR:                                  ^
3214 // CHECK-ERROR: error: lane number incompatible with layout
3215 // CHECK-ERROR:        umlal2 v0.2d, v1.4s, v22.s[4]
3216 // CHECK-ERROR:                                   ^
3217
3218       umlsl v0.4h, v1.4h, v2.h[2]
3219       umlsl v0.4s, v1.4h, v2.h[8]
3220       umlsl v0.4s, v1.4h, v16.h[2]
3221       umlsl v0.2s, v1.2s, v2.s[4]
3222       umlsl v0.2d, v1.2s, v2.s[4]
3223       umlsl v0.2d, v1.2s, v22.s[4]
3224       umlsl2 v0.4h, v1.8h, v1.h[2]
3225       umlsl2 v0.4s, v1.8h, v1.h[8]
3226       umlsl2 v0.4s, v1.8h, v16.h[2]
3227       umlsl2 v0.2s, v1.4s, v1.s[2]
3228       umlsl2 v0.2d, v1.4s, v1.s[4]
3229       umlsl2 v0.2d, v1.4s, v22.s[4]
3230
3231 // CHECK-ERROR: error: invalid operand for instruction
3232 // CHECK-ERROR:        umlsl v0.4h, v1.4h, v2.h[2]
3233 // CHECK-ERROR:              ^
3234 // CHECK-ERROR: error: lane number incompatible with layout
3235 // CHECK-ERROR:        umlsl v0.4s, v1.4h, v2.h[8]
3236 // CHECK-ERROR:                                 ^
3237 // CHECK-ERROR: error: invalid operand for instruction
3238 // CHECK-ERROR:        umlsl v0.4s, v1.4h, v16.h[2]
3239 // CHECK-ERROR:                            ^
3240 // CHECK-ERROR: error: lane number incompatible with layout
3241 // CHECK-ERROR:        umlsl v0.2s, v1.2s, v2.s[4]
3242 // CHECK-ERROR:                                 ^
3243 // CHECK-ERROR: error: lane number incompatible with layout
3244 // CHECK-ERROR:        umlsl v0.2d, v1.2s, v2.s[4]
3245 // CHECK-ERROR:                                 ^
3246 // CHECK-ERROR: error: lane number incompatible with layout
3247 // CHECK-ERROR:        umlsl v0.2d, v1.2s, v22.s[4]
3248 // CHECK-ERROR:                                  ^
3249 // CHECK-ERROR: error: invalid operand for instruction
3250 // CHECK-ERROR:        umlsl2 v0.4h, v1.8h, v1.h[2]
3251 // CHECK-ERROR:               ^
3252 // CHECK-ERROR: error: lane number incompatible with layout
3253 // CHECK-ERROR:        umlsl2 v0.4s, v1.8h, v1.h[8]
3254 // CHECK-ERROR:                                  ^
3255 // CHECK-ERROR: error: invalid operand for instruction
3256 // CHECK-ERROR:        umlsl2 v0.4s, v1.8h, v16.h[2]
3257 // CHECK-ERROR:                                 ^
3258 // CHECK-ERROR: error: invalid operand for instruction
3259 // CHECK-ERROR:        umlsl2 v0.2s, v1.4s, v1.s[2]
3260 // CHECK-ERROR:               ^
3261 // CHECK-ERROR: error: lane number incompatible with layout
3262 // CHECK-ERROR:        umlsl2 v0.2d, v1.4s, v1.s[4]
3263 // CHECK-ERROR:                                  ^
3264 // CHECK-ERROR: error: lane number incompatible with layout
3265 // CHECK-ERROR:        umlsl2 v0.2d, v1.4s, v22.s[4]
3266 // CHECK-ERROR:                                   ^
3267
3268       sqdmlal v0.4h, v1.4h, v2.h[2]
3269       sqdmlal v0.4s, v1.4h, v2.h[8]
3270       sqdmlal v0.4s, v1.4h, v16.h[2]
3271       sqdmlal v0.2s, v1.2s, v2.s[4]
3272       sqdmlal v0.2d, v1.2s, v2.s[4]
3273       sqdmlal v0.2d, v1.2s, v22.s[4]
3274       sqdmlal2 v0.4h, v1.8h, v1.h[2]
3275       sqdmlal2 v0.4s, v1.8h, v1.h[8]
3276       sqdmlal2 v0.4s, v1.8h, v16.h[2]
3277       sqdmlal2 v0.2s, v1.4s, v1.s[2]
3278       sqdmlal2 v0.2d, v1.4s, v1.s[4]
3279       sqdmlal2 v0.2d, v1.4s, v22.s[4]
3280
3281 // CHECK-ERROR: error: invalid operand for instruction
3282 // CHECK-ERROR:        sqdmlal v0.4h, v1.4h, v2.h[2]
3283 // CHECK-ERROR:                ^
3284 // CHECK-ERROR: error: lane number incompatible with layout
3285 // CHECK-ERROR:        sqdmlal v0.4s, v1.4h, v2.h[8]
3286 // CHECK-ERROR:                                   ^
3287 // CHECK-ERROR: error: invalid operand for instruction
3288 // CHECK-ERROR:        sqdmlal v0.4s, v1.4h, v16.h[2]
3289 // CHECK-ERROR:                              ^
3290 // CHECK-ERROR: error: lane number incompatible with layout
3291 // CHECK-ERROR:        sqdmlal v0.2s, v1.2s, v2.s[4]
3292 // CHECK-ERROR:                                   ^
3293 // CHECK-ERROR: error: lane number incompatible with layout
3294 // CHECK-ERROR:        sqdmlal v0.2d, v1.2s, v2.s[4]
3295 // CHECK-ERROR:                                   ^
3296 // CHECK-ERROR: error: lane number incompatible with layout
3297 // CHECK-ERROR:        sqdmlal v0.2d, v1.2s, v22.s[4]
3298 // CHECK-ERROR:                                    ^
3299 // CHECK-ERROR: error: invalid operand for instruction
3300 // CHECK-ERROR:        sqdmlal2 v0.4h, v1.8h, v1.h[2]
3301 // CHECK-ERROR:                 ^
3302 // CHECK-ERROR: error: lane number incompatible with layout
3303 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8h, v1.h[8]
3304 // CHECK-ERROR:                                    ^
3305 // CHECK-ERROR: error: invalid operand for instruction
3306 // CHECK-ERROR:        sqdmlal2 v0.4s, v1.8h, v16.h[2]
3307 // CHECK-ERROR:                                   ^
3308 // CHECK-ERROR: error: invalid operand for instruction
3309 // CHECK-ERROR:        sqdmlal2 v0.2s, v1.4s, v1.s[2]
3310 // CHECK-ERROR:                 ^
3311 // CHECK-ERROR: error: lane number incompatible with layout
3312 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4s, v1.s[4]
3313 // CHECK-ERROR:                                    ^
3314 // CHECK-ERROR: error: lane number incompatible with layout
3315 // CHECK-ERROR:        sqdmlal2 v0.2d, v1.4s, v22.s[4]
3316 // CHECK-ERROR:                                     ^
3317
3318       sqdmlsl v0.4h, v1.4h, v2.h[2]
3319       sqdmlsl v0.4s, v1.4h, v2.h[8]
3320       sqdmlsl v0.4s, v1.4h, v16.h[2]
3321       sqdmlsl v0.2s, v1.2s, v2.s[4]
3322       sqdmlsl v0.2d, v1.2s, v2.s[4]
3323       sqdmlsl v0.2d, v1.2s, v22.s[4]
3324       sqdmlsl2 v0.4h, v1.8h, v1.h[2]
3325       sqdmlsl2 v0.4s, v1.8h, v1.h[8]
3326       sqdmlsl2 v0.4s, v1.8h, v16.h[2]
3327       sqdmlsl2 v0.2s, v1.4s, v1.s[2]
3328       sqdmlsl2 v0.2d, v1.4s, v1.s[4]
3329       sqdmlsl2 v0.2d, v1.4s, v22.s[4]
3330
3331 // CHECK-ERROR: error: invalid operand for instruction
3332 // CHECK-ERROR:        sqdmlsl v0.4h, v1.4h, v2.h[2]
3333 // CHECK-ERROR:                ^
3334 // CHECK-ERROR: error: lane number incompatible with layout
3335 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4h, v2.h[8]
3336 // CHECK-ERROR:                                   ^
3337 // CHECK-ERROR: error: invalid operand for instruction
3338 // CHECK-ERROR:        sqdmlsl v0.4s, v1.4h, v16.h[2]
3339 // CHECK-ERROR:                              ^
3340 // CHECK-ERROR: error: lane number incompatible with layout
3341 // CHECK-ERROR:        sqdmlsl v0.2s, v1.2s, v2.s[4]
3342 // CHECK-ERROR:                                   ^
3343 // CHECK-ERROR: error: lane number incompatible with layout
3344 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2s, v2.s[4]
3345 // CHECK-ERROR:                                   ^
3346 // CHECK-ERROR: error: lane number incompatible with layout
3347 // CHECK-ERROR:        sqdmlsl v0.2d, v1.2s, v22.s[4]
3348 // CHECK-ERROR:                                    ^
3349 // CHECK-ERROR: error: invalid operand for instruction
3350 // CHECK-ERROR:        sqdmlsl2 v0.4h, v1.8h, v1.h[2]
3351 // CHECK-ERROR:                 ^
3352 // CHECK-ERROR: error: lane number incompatible with layout
3353 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8h, v1.h[8]
3354 // CHECK-ERROR:                                    ^
3355 // CHECK-ERROR: error: invalid operand for instruction
3356 // CHECK-ERROR:        sqdmlsl2 v0.4s, v1.8h, v16.h[2]
3357 // CHECK-ERROR:                                   ^
3358 // CHECK-ERROR: error: invalid operand for instruction
3359 // CHECK-ERROR:        sqdmlsl2 v0.2s, v1.4s, v1.s[2]
3360 // CHECK-ERROR:                 ^
3361 // CHECK-ERROR: error: lane number incompatible with layout
3362 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4s, v1.s[4]
3363 // CHECK-ERROR:                                    ^
3364 // CHECK-ERROR: error: lane number incompatible with layout
3365 // CHECK-ERROR:        sqdmlsl2 v0.2d, v1.4s, v22.s[4]
3366 // CHECK-ERROR:                                     ^
3367
3368       mul v0.4h, v1.4h, v2.h[8]
3369       mul v0.4h, v1.4h, v16.h[8]
3370       mul v0.8h, v1.8h, v2.h[8]
3371       mul v0.8h, v1.8h, v16.h[8]
3372       mul v0.2s, v1.2s, v2.s[4]
3373       mul v0.2s, v1.2s, v22.s[4]
3374       mul v0.4s, v1.4s, v2.s[4]
3375       mul v0.4s, v1.4s, v22.s[4]
3376       mul v0.2d, v1.2d, v2.d[1]
3377
3378 // CHECK-ERROR: error: lane number incompatible with layout
3379 // CHECK-ERROR:        mul v0.4h, v1.4h, v2.h[8]
3380 // CHECK-ERROR:                               ^
3381 // CHECK-ERROR: error: lane number incompatible with layout
3382 // CHECK-ERROR:        mul v0.4h, v1.4h, v16.h[8]
3383 // CHECK-ERROR:                                ^
3384 // CHECK-ERROR: error: lane number incompatible with layout
3385 // CHECK-ERROR:        mul v0.8h, v1.8h, v2.h[8]
3386 // CHECK-ERROR:                               ^
3387 // CHECK-ERROR: error: lane number incompatible with layout
3388 // CHECK-ERROR:        mul v0.8h, v1.8h, v16.h[8]
3389 // CHECK-ERROR:                                ^
3390 // CHECK-ERROR: error: lane number incompatible with layout
3391 // CHECK-ERROR:        mul v0.2s, v1.2s, v2.s[4]
3392 // CHECK-ERROR:                               ^
3393 // CHECK-ERROR: error: lane number incompatible with layout
3394 // CHECK-ERROR:        mul v0.2s, v1.2s, v22.s[4]
3395 // CHECK-ERROR:                                ^
3396 // CHECK-ERROR: error: lane number incompatible with layout
3397 // CHECK-ERROR:        mul v0.4s, v1.4s, v2.s[4]
3398 // CHECK-ERROR:                               ^
3399 // CHECK-ERROR: error: lane number incompatible with layout
3400 // CHECK-ERROR:        mul v0.4s, v1.4s, v22.s[4]
3401 // CHECK-ERROR:                                ^
3402
3403       fmul v0.4h, v1.4h, v2.h[4]
3404       fmul v0.2s, v1.2s, v2.s[4]
3405       fmul v0.2s, v1.2s, v22.s[4]
3406       fmul v0.4s, v1.4s, v2.s[4]
3407       fmul v0.4s, v1.4s, v22.s[4]
3408       fmul v0.2d, v1.2d, v2.d[2]
3409       fmul v0.2d, v1.2d, v22.d[2]
3410
3411 // CHECK-ERROR: error: invalid operand for instruction
3412 // CHECK-ERROR:        mul v0.2d, v1.2d, v2.d[1]
3413 // CHECK-ERROR:               ^
3414 // CHECK-ERROR: error: invalid operand for instruction
3415 // CHECK-ERROR:        fmul v0.4h, v1.4h, v2.h[4]
3416 // CHECK-ERROR:                ^
3417 // CHECK-ERROR: error: lane number incompatible with layout
3418 // CHECK-ERROR:        fmul v0.2s, v1.2s, v2.s[4]
3419 // CHECK-ERROR:                                ^
3420 // CHECK-ERROR: error: lane number incompatible with layout
3421 // CHECK-ERROR:        fmul v0.2s, v1.2s, v22.s[4]
3422 // CHECK-ERROR:                                 ^
3423 // CHECK-ERROR: error: lane number incompatible with layout
3424 // CHECK-ERROR:        fmul v0.4s, v1.4s, v2.s[4]
3425 // CHECK-ERROR:                                ^
3426 // CHECK-ERROR: error: lane number incompatible with layout
3427 // CHECK-ERROR:        fmul v0.4s, v1.4s, v22.s[4]
3428 // CHECK-ERROR:                                 ^
3429 // CHECK-ERROR: error: lane number incompatible with layout
3430 // CHECK-ERROR:        fmul v0.2d, v1.2d, v2.d[2]
3431 // CHECK-ERROR:                                ^
3432 // CHECK-ERROR: error: lane number incompatible with layout
3433 // CHECK-ERROR:        fmul v0.2d, v1.2d, v22.d[2]
3434 // CHECK-ERROR:                                 ^
3435
3436       fmulx v0.4h, v1.4h, v2.h[4]
3437       fmulx v0.2s, v1.2s, v2.s[4]
3438       fmulx v0.2s, v1.2s, v22.s[4]
3439       fmulx v0.4s, v1.4s, v2.s[4]
3440       fmulx v0.4s, v1.4s, v22.s[4]
3441       fmulx v0.2d, v1.2d, v2.d[2]
3442       fmulx v0.2d, v1.2d, v22.d[2]
3443
3444 // CHECK-ERROR: error: invalid operand for instruction
3445 // CHECK-ERROR:        fmulx v0.4h, v1.4h, v2.h[4]
3446 // CHECK-ERROR:                 ^
3447 // CHECK-ERROR: error: lane number incompatible with layout
3448 // CHECK-ERROR:        fmulx v0.2s, v1.2s, v2.s[4]
3449 // CHECK-ERROR:                                 ^
3450 // CHECK-ERROR: error: lane number incompatible with layout
3451 // CHECK-ERROR:        fmulx v0.2s, v1.2s, v22.s[4]
3452 // CHECK-ERROR:                                  ^
3453 // CHECK-ERROR: error: lane number incompatible with layout
3454 // CHECK-ERROR:        fmulx v0.4s, v1.4s, v2.s[4]
3455 // CHECK-ERROR:                                 ^
3456 // CHECK-ERROR: error: lane number incompatible with layout
3457 // CHECK-ERROR:        fmulx v0.4s, v1.4s, v22.s[4]
3458 // CHECK-ERROR:                                  ^
3459 // CHECK-ERROR: error: lane number incompatible with layout
3460 // CHECK-ERROR:        fmulx v0.2d, v1.2d, v2.d[2]
3461 // CHECK-ERROR:                                 ^
3462 // CHECK-ERROR: error: lane number incompatible with layout
3463 // CHECK-ERROR:        fmulx v0.2d, v1.2d, v22.d[2]
3464 // CHECK-ERROR:                                  ^
3465
3466       smull v0.4h, v1.4h, v2.h[2]
3467       smull v0.4s, v1.4h, v2.h[8]
3468       smull v0.4s, v1.4h, v16.h[4]
3469       smull v0.2s, v1.2s, v2.s[2]
3470       smull v0.2d, v1.2s, v2.s[4]
3471       smull v0.2d, v1.2s, v22.s[4]
3472       smull2 v0.4h, v1.8h, v2.h[2]
3473       smull2 v0.4s, v1.8h, v2.h[8]
3474       smull2 v0.4s, v1.8h, v16.h[4]
3475       smull2 v0.2s, v1.4s, v2.s[2]
3476       smull2 v0.2d, v1.4s, v2.s[4]
3477       smull2 v0.2d, v1.4s, v22.s[4]
3478
3479 // CHECK-ERROR: error: invalid operand for instruction
3480 // CHECK-ERROR:        smull v0.4h, v1.4h, v2.h[2]
3481 // CHECK-ERROR:              ^
3482 // CHECK-ERROR: error: lane number incompatible with layout
3483 // CHECK-ERROR:        smull v0.4s, v1.4h, v2.h[8]
3484 // CHECK-ERROR:                                 ^
3485 // CHECK-ERROR: error: invalid operand for instruction
3486 // CHECK-ERROR:        smull v0.4s, v1.4h, v16.h[4]
3487 // CHECK-ERROR:                            ^
3488 // CHECK-ERROR: error: invalid operand for instruction
3489 // CHECK-ERROR:        smull v0.2s, v1.2s, v2.s[2]
3490 // CHECK-ERROR:              ^
3491 // CHECK-ERROR: error: lane number incompatible with layout
3492 // CHECK-ERROR:        smull v0.2d, v1.2s, v2.s[4]
3493 // CHECK-ERROR:                                 ^
3494 // CHECK-ERROR: error: lane number incompatible with layout
3495 // CHECK-ERROR:        smull v0.2d, v1.2s, v22.s[4]
3496 // CHECK-ERROR:                                  ^
3497 // CHECK-ERROR: error: invalid operand for instruction
3498 // CHECK-ERROR:        smull2 v0.4h, v1.8h, v2.h[2]
3499 // CHECK-ERROR:               ^
3500 // CHECK-ERROR: error: lane number incompatible with layout
3501 // CHECK-ERROR:        smull2 v0.4s, v1.8h, v2.h[8]
3502 // CHECK-ERROR:                                  ^
3503 // CHECK-ERROR: error: invalid operand for instruction
3504 // CHECK-ERROR:        smull2 v0.4s, v1.8h, v16.h[4]
3505 // CHECK-ERROR:                                 ^
3506 // CHECK-ERROR: error: invalid operand for instruction
3507 // CHECK-ERROR:        smull2 v0.2s, v1.4s, v2.s[2]
3508 // CHECK-ERROR:               ^
3509 // CHECK-ERROR: error: lane number incompatible with layout
3510 // CHECK-ERROR:        smull2 v0.2d, v1.4s, v2.s[4]
3511 // CHECK-ERROR:                                  ^
3512 // CHECK-ERROR: error: lane number incompatible with layout
3513 // CHECK-ERROR:        smull2 v0.2d, v1.4s, v22.s[4]
3514 // CHECK-ERROR:                                   ^
3515
3516       umull v0.4h, v1.4h, v2.h[2]
3517       umull v0.4s, v1.4h, v2.h[8]
3518       umull v0.4s, v1.4h, v16.h[4]
3519       umull v0.2s, v1.2s, v2.s[2]
3520       umull v0.2d, v1.2s, v2.s[4]
3521       umull v0.2d, v1.2s, v22.s[4]
3522       umull2 v0.4h, v1.8h, v2.h[2]
3523       umull2 v0.4s, v1.8h, v2.h[8]
3524       umull2 v0.4s, v1.8h, v16.h[4]
3525       umull2 v0.2s, v1.4s, v2.s[2]
3526       umull2 v0.2d, v1.4s, v2.s[4]
3527       umull2 v0.2d, v1.4s, v22.s[4]
3528
3529 // CHECK-ERROR: error: invalid operand for instruction
3530 // CHECK-ERROR:        umull v0.4h, v1.4h, v2.h[2]
3531 // CHECK-ERROR:              ^
3532 // CHECK-ERROR: error: lane number incompatible with layout
3533 // CHECK-ERROR:        umull v0.4s, v1.4h, v2.h[8]
3534 // CHECK-ERROR:                                 ^
3535 // CHECK-ERROR: error: invalid operand for instruction
3536 // CHECK-ERROR:        umull v0.4s, v1.4h, v16.h[4]
3537 // CHECK-ERROR:                            ^
3538 // CHECK-ERROR: error: invalid operand for instruction
3539 // CHECK-ERROR:        umull v0.2s, v1.2s, v2.s[2]
3540 // CHECK-ERROR:              ^
3541 // CHECK-ERROR: error: lane number incompatible with layout
3542 // CHECK-ERROR:        umull v0.2d, v1.2s, v2.s[4]
3543 // CHECK-ERROR:                                 ^
3544 // CHECK-ERROR: error: lane number incompatible with layout
3545 // CHECK-ERROR:        umull v0.2d, v1.2s, v22.s[4]
3546 // CHECK-ERROR:                                  ^
3547 // CHECK-ERROR: error: invalid operand for instruction
3548 // CHECK-ERROR:        umull2 v0.4h, v1.8h, v2.h[2]
3549 // CHECK-ERROR:               ^
3550 // CHECK-ERROR: error: lane number incompatible with layout
3551 // CHECK-ERROR:        umull2 v0.4s, v1.8h, v2.h[8]
3552 // CHECK-ERROR:                                  ^
3553 // CHECK-ERROR: error: invalid operand for instruction
3554 // CHECK-ERROR:        umull2 v0.4s, v1.8h, v16.h[4]
3555 // CHECK-ERROR:                                 ^
3556 // CHECK-ERROR: error: invalid operand for instruction
3557 // CHECK-ERROR:        umull2 v0.2s, v1.4s, v2.s[2]
3558 // CHECK-ERROR:               ^
3559 // CHECK-ERROR: error: lane number incompatible with layout
3560 // CHECK-ERROR:        umull2 v0.2d, v1.4s, v2.s[4]
3561 // CHECK-ERROR:                                  ^
3562 // CHECK-ERROR: error: lane number incompatible with layout
3563 // CHECK-ERROR:        umull2 v0.2d, v1.4s, v22.s[4]
3564 // CHECK-ERROR:                                   ^
3565
3566       sqdmull v0.4h, v1.4h, v2.h[2]
3567       sqdmull v0.4s, v1.4h, v2.h[8]
3568       sqdmull v0.4s, v1.4h, v16.h[4]
3569       sqdmull v0.2s, v1.2s, v2.s[2]
3570       sqdmull v0.2d, v1.2s, v2.s[4]
3571       sqdmull v0.2d, v1.2s, v22.s[4]
3572       sqdmull2 v0.4h, v1.8h, v2.h[2]
3573       sqdmull2 v0.4s, v1.8h, v2.h[8]
3574       sqdmull2 v0.4s, v1.8h, v16.h[4]
3575       sqdmull2 v0.2s, v1.4s, v2.s[2]
3576       sqdmull2 v0.2d, v1.4s, v2.s[4]
3577       sqdmull2 v0.2d, v1.4s, v22.s[4]
3578
3579 // CHECK-ERROR: error: invalid operand for instruction
3580 // CHECK-ERROR:        sqdmull v0.4h, v1.4h, v2.h[2]
3581 // CHECK-ERROR:                ^
3582 // CHECK-ERROR: error: lane number incompatible with layout
3583 // CHECK-ERROR:        sqdmull v0.4s, v1.4h, v2.h[8]
3584 // CHECK-ERROR:                                   ^
3585 // CHECK-ERROR: error: invalid operand for instruction
3586 // CHECK-ERROR:        sqdmull v0.4s, v1.4h, v16.h[4]
3587 // CHECK-ERROR:                              ^
3588 // CHECK-ERROR: error: invalid operand for instruction
3589 // CHECK-ERROR:        sqdmull v0.2s, v1.2s, v2.s[2]
3590 // CHECK-ERROR:                ^
3591 // CHECK-ERROR: error: lane number incompatible with layout
3592 // CHECK-ERROR:        sqdmull v0.2d, v1.2s, v2.s[4]
3593 // CHECK-ERROR:                                   ^
3594 // CHECK-ERROR: error: lane number incompatible with layout
3595 // CHECK-ERROR:        sqdmull v0.2d, v1.2s, v22.s[4]
3596 // CHECK-ERROR:                                    ^
3597 // CHECK-ERROR: error: invalid operand for instruction
3598 // CHECK-ERROR:        sqdmull2 v0.4h, v1.8h, v2.h[2]
3599 // CHECK-ERROR:                 ^
3600 // CHECK-ERROR: error: lane number incompatible with layout
3601 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8h, v2.h[8]
3602 // CHECK-ERROR:                                    ^
3603 // CHECK-ERROR: error: invalid operand for instruction
3604 // CHECK-ERROR:        sqdmull2 v0.4s, v1.8h, v16.h[4]
3605 // CHECK-ERROR:                                   ^
3606 // CHECK-ERROR: error: invalid operand for instruction
3607 // CHECK-ERROR:        sqdmull2 v0.2s, v1.4s, v2.s[2]
3608 // CHECK-ERROR:                 ^
3609 // CHECK-ERROR: error: lane number incompatible with layout
3610 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4s, v2.s[4]
3611 // CHECK-ERROR:                                    ^
3612 // CHECK-ERROR: error: lane number incompatible with layout
3613 // CHECK-ERROR:        sqdmull2 v0.2d, v1.4s, v22.s[4]
3614 // CHECK-ERROR:                                     ^
3615
3616       sqdmulh v0.4h, v1.4h, v2.h[8]
3617       sqdmulh v0.4h, v1.4h, v16.h[2]
3618       sqdmulh v0.8h, v1.8h, v2.h[8]
3619       sqdmulh v0.8h, v1.8h, v16.h[2]
3620       sqdmulh v0.2s, v1.2s, v2.s[4]
3621       sqdmulh v0.2s, v1.2s, v22.s[4]
3622       sqdmulh v0.4s, v1.4s, v2.s[4]
3623       sqdmulh v0.4s, v1.4s, v22.s[4]
3624       sqdmulh v0.2d, v1.2d, v22.d[1]
3625
3626 // CHECK-ERROR: error: lane number incompatible with layout
3627 // CHECK-ERROR:        sqdmulh v0.4h, v1.4h, v2.h[8]
3628 // CHECK-ERROR:                                   ^
3629 // CHECK-ERROR: error: invalid operand for instruction
3630 // CHECK-ERROR:        sqdmulh v0.4h, v1.4h, v16.h[2]
3631 // CHECK-ERROR:                              ^
3632 // CHECK-ERROR: error: lane number incompatible with layout
3633 // CHECK-ERROR:        sqdmulh v0.8h, v1.8h, v2.h[8]
3634 // CHECK-ERROR:                                   ^
3635 // CHECK-ERROR: error: invalid operand for instruction
3636 // CHECK-ERROR:        sqdmulh v0.8h, v1.8h, v16.h[2]
3637 // CHECK-ERROR:                                  ^
3638 // CHECK-ERROR: error: lane number incompatible with layout
3639 // CHECK-ERROR:        sqdmulh v0.2s, v1.2s, v2.s[4]
3640 // CHECK-ERROR:                                   ^
3641 // CHECK-ERROR: error: lane number incompatible with layout
3642 // CHECK-ERROR:        sqdmulh v0.2s, v1.2s, v22.s[4]
3643 // CHECK-ERROR:                                    ^
3644 // CHECK-ERROR: error: lane number incompatible with layout
3645 // CHECK-ERROR:        sqdmulh v0.4s, v1.4s, v2.s[4]
3646 // CHECK-ERROR:                                   ^
3647 // CHECK-ERROR: error: lane number incompatible with layout
3648 // CHECK-ERROR:        sqdmulh v0.4s, v1.4s, v22.s[4]
3649 // CHECK-ERROR:                                    ^
3650 // CHECK-ERROR: error: invalid operand for instruction
3651 // CHECK-ERROR:        sqdmulh v0.2d, v1.2d, v22.d[1]
3652 // CHECK-ERROR:                   ^
3653
3654       sqrdmulh v0.4h, v1.4h, v2.h[8]
3655       sqrdmulh v0.4h, v1.4h, v16.h[2]
3656       sqrdmulh v0.8h, v1.8h, v2.h[8]
3657       sqrdmulh v0.8h, v1.8h, v16.h[2]
3658       sqrdmulh v0.2s, v1.2s, v2.s[4]
3659       sqrdmulh v0.2s, v1.2s, v22.s[4]
3660       sqrdmulh v0.4s, v1.4s, v2.s[4]
3661       sqrdmulh v0.4s, v1.4s, v22.s[4]
3662       sqrdmulh v0.2d, v1.2d, v22.d[1]
3663
3664 // CHECK-ERROR: error: lane number incompatible with layout
3665 // CHECK-ERROR:        sqrdmulh v0.4h, v1.4h, v2.h[8]
3666 // CHECK-ERROR:                                    ^
3667 // CHECK-ERROR: error: invalid operand for instruction
3668 // CHECK-ERROR:        sqrdmulh v0.4h, v1.4h, v16.h[2]
3669 // CHECK-ERROR:                               ^
3670 // CHECK-ERROR: error: lane number incompatible with layout
3671 // CHECK-ERROR:        sqrdmulh v0.8h, v1.8h, v2.h[8]
3672 // CHECK-ERROR:                                    ^
3673 // CHECK-ERROR: error: invalid operand for instruction
3674 // CHECK-ERROR:        sqrdmulh v0.8h, v1.8h, v16.h[2]
3675 // CHECK-ERROR:                                   ^
3676 // CHECK-ERROR: error: lane number incompatible with layout
3677 // CHECK-ERROR:        sqrdmulh v0.2s, v1.2s, v2.s[4]
3678 // CHECK-ERROR:                                    ^
3679 // CHECK-ERROR: error: lane number incompatible with layout
3680 // CHECK-ERROR:        sqrdmulh v0.2s, v1.2s, v22.s[4]
3681 // CHECK-ERROR:                                     ^
3682 // CHECK-ERROR: error: lane number incompatible with layout
3683 // CHECK-ERROR:        sqrdmulh v0.4s, v1.4s, v2.s[4]
3684 // CHECK-ERROR:                                    ^
3685 // CHECK-ERROR: error: lane number incompatible with layout
3686 // CHECK-ERROR:        sqrdmulh v0.4s, v1.4s, v22.s[4]
3687 // CHECK-ERROR:                                     ^
3688 // CHECK-ERROR: error: invalid operand for instruction
3689 // CHECK-ERROR:        sqrdmulh v0.2d, v1.2d, v22.d[1]
3690 // CHECK-ERROR:                    ^
3691
3692 //----------------------------------------------------------------------
3693 // Across vectors
3694 //----------------------------------------------------------------------
3695
3696         saddlv b0, v1.8b
3697         saddlv b0, v1.16b
3698         saddlv h0, v1.4h
3699         saddlv h0, v1.8h
3700         saddlv s0, v1.2s
3701         saddlv s0, v1.4s
3702         saddlv d0, v1.2s
3703
3704 // CHECK-ERROR: error: invalid operand for instruction
3705 // CHECK-ERROR:        saddlv b0, v1.8b
3706 // CHECK-ERROR:               ^
3707 // CHECK-ERROR: error: invalid operand for instruction
3708 // CHECK-ERROR:        saddlv b0, v1.16b
3709 // CHECK-ERROR:               ^
3710 // CHECK-ERROR: error: invalid operand for instruction
3711 // CHECK-ERROR:        saddlv h0, v1.4h
3712 // CHECK-ERROR:                      ^
3713 // CHECK-ERROR: error: invalid operand for instruction
3714 // CHECK-ERROR:        saddlv h0, v1.8h
3715 // CHECK-ERROR:                      ^
3716 // CHECK-ERROR: error: invalid operand for instruction
3717 // CHECK-ERROR:        saddlv s0, v1.2s
3718 // CHECK-ERROR:                      ^
3719 // CHECK-ERROR: error: invalid operand for instruction
3720 // CHECK-ERROR:        saddlv s0, v1.4s
3721 // CHECK-ERROR:                      ^
3722 // CHECK-ERROR: error: invalid operand for instruction
3723 // CHECK-ERROR:        saddlv d0, v1.2s
3724 // CHECK-ERROR:                   ^
3725
3726         uaddlv b0, v1.8b
3727         uaddlv b0, v1.16b
3728         uaddlv h0, v1.4h
3729         uaddlv h0, v1.8h
3730         uaddlv s0, v1.2s
3731         uaddlv s0, v1.4s
3732         uaddlv d0, v1.2s
3733
3734 // CHECK-ERROR: error: invalid operand for instruction
3735 // CHECK-ERROR:        uaddlv b0, v1.8b
3736 // CHECK-ERROR:               ^
3737 // CHECK-ERROR: error: invalid operand for instruction
3738 // CHECK-ERROR:        uaddlv b0, v1.16b
3739 // CHECK-ERROR:               ^
3740 // CHECK-ERROR: error: invalid operand for instruction
3741 // CHECK-ERROR:        uaddlv h0, v1.4h
3742 // CHECK-ERROR:                      ^
3743 // CHECK-ERROR: error: invalid operand for instruction
3744 // CHECK-ERROR:        uaddlv h0, v1.8h
3745 // CHECK-ERROR:                      ^
3746 // CHECK-ERROR: error: invalid operand for instruction
3747 // CHECK-ERROR:        uaddlv s0, v1.2s
3748 // CHECK-ERROR:                      ^
3749 // CHECK-ERROR: error: invalid operand for instruction
3750 // CHECK-ERROR:        uaddlv s0, v1.4s
3751 // CHECK-ERROR:                      ^
3752 // CHECK-ERROR: error: invalid operand for instruction
3753 // CHECK-ERROR:        uaddlv d0, v1.2s
3754 // CHECK-ERROR:                   ^
3755
3756         smaxv s0, v1.2s
3757         sminv s0, v1.2s
3758         umaxv s0, v1.2s
3759         uminv s0, v1.2s
3760         addv s0, v1.2s
3761
3762 // CHECK-ERROR: error: invalid operand for instruction
3763 // CHECK-ERROR:        smaxv s0, v1.2s
3764 // CHECK-ERROR:                  ^
3765 // CHECK-ERROR: error: invalid operand for instruction
3766 // CHECK-ERROR:        sminv s0, v1.2s
3767 // CHECK-ERROR:                  ^
3768 // CHECK-ERROR: error: invalid operand for instruction
3769 // CHECK-ERROR:        umaxv s0, v1.2s
3770 // CHECK-ERROR:                  ^
3771 // CHECK-ERROR: error: invalid operand for instruction
3772 // CHECK-ERROR:        uminv s0, v1.2s
3773 // CHECK-ERROR:                  ^
3774 // CHECK-ERROR: error: invalid operand for instruction
3775 // CHECK-ERROR:        addv s0, v1.2s
3776 // CHECK-ERROR:                 ^
3777
3778         smaxv d0, v1.2d
3779         sminv d0, v1.2d
3780         umaxv d0, v1.2d
3781         uminv d0, v1.2d
3782         addv d0, v1.2d
3783
3784 // CHECK-ERROR: error: invalid operand for instruction
3785 // CHECK-ERROR:        smaxv d0, v1.2d
3786 // CHECK-ERROR:              ^
3787 // CHECK-ERROR: error: invalid operand for instruction
3788 // CHECK-ERROR:        sminv d0, v1.2d
3789 // CHECK-ERROR:              ^
3790 // CHECK-ERROR: error: invalid operand for instruction
3791 // CHECK-ERROR:        umaxv d0, v1.2d
3792 // CHECK-ERROR:              ^
3793 // CHECK-ERROR: error: invalid operand for instruction
3794 // CHECK-ERROR:        uminv d0, v1.2d
3795 // CHECK-ERROR:              ^
3796 // CHECK-ERROR: error: invalid operand for instruction
3797 // CHECK-ERROR:        addv d0, v1.2d
3798 // CHECK-ERROR:             ^
3799
3800         fmaxnmv b0, v1.16b
3801         fminnmv b0, v1.16b
3802         fmaxv b0, v1.16b
3803         fminv b0, v1.16b
3804
3805 // CHECK-ERROR: error: invalid operand for instruction
3806 // CHECK-ERROR:        fmaxnmv b0, v1.16b
3807 // CHECK-ERROR:                ^
3808 // CHECK-ERROR: error: invalid operand for instruction
3809 // CHECK-ERROR:        fminnmv b0, v1.16b
3810 // CHECK-ERROR:                ^
3811 // CHECK-ERROR: error: invalid operand for instruction
3812 // CHECK-ERROR:        fmaxv b0, v1.16b
3813 // CHECK-ERROR:              ^
3814 // CHECK-ERROR: error: invalid operand for instruction
3815 // CHECK-ERROR:        fminv b0, v1.16b
3816 // CHECK-ERROR:              ^
3817
3818         fmaxnmv h0, v1.8h
3819         fminnmv h0, v1.8h
3820         fmaxv h0, v1.8h
3821         fminv h0, v1.8h
3822
3823 // CHECK-ERROR: error: invalid operand for instruction
3824 // CHECK-ERROR:        fmaxnmv h0, v1.8h
3825 // CHECK-ERROR:                ^
3826 // CHECK-ERROR: error: invalid operand for instruction
3827 // CHECK-ERROR:        fminnmv h0, v1.8h
3828 // CHECK-ERROR:                ^
3829 // CHECK-ERROR: error: invalid operand for instruction
3830 // CHECK-ERROR:        fmaxv h0, v1.8h
3831 // CHECK-ERROR:              ^
3832 // CHECK-ERROR: error: invalid operand for instruction
3833 // CHECK-ERROR:        fminv h0, v1.8h
3834 // CHECK-ERROR:              ^
3835
3836         fmaxnmv d0, v1.2d
3837         fminnmv d0, v1.2d
3838         fmaxv d0, v1.2d
3839         fminv d0, v1.2d
3840
3841 // CHECK-ERROR: error: invalid operand for instruction
3842 // CHECK-ERROR:        fmaxnmv d0, v1.2d
3843 // CHECK-ERROR:                ^
3844 // CHECK-ERROR: error: invalid operand for instruction
3845 // CHECK-ERROR:        fminnmv d0, v1.2d
3846 // CHECK-ERROR:                ^
3847 // CHECK-ERROR: error: invalid operand for instruction
3848 // CHECK-ERROR:        fmaxv d0, v1.2d
3849 // CHECK-ERROR:              ^
3850 // CHECK-ERROR: error: invalid operand for instruction
3851 // CHECK-ERROR:        fminv d0, v1.2d
3852 // CHECK-ERROR:              ^
3853
3854 //----------------------------------------------------------------------
3855 // Floating-point Multiply Extended
3856 //----------------------------------------------------------------------
3857
3858     fmulx s20, h22, s15
3859     fmulx d23, d11, s1
3860
3861 // CHECK-ERROR: error: invalid operand for instruction
3862 // CHECK-ERROR:          fmulx s20, h22, s15
3863 // CHECK-ERROR:                     ^
3864 // CHECK-ERROR: error: invalid operand for instruction
3865 // CHECK-ERROR:          fmulx d23, d11, s1
3866 // CHECK-ERROR:                          ^
3867
3868 //----------------------------------------------------------------------
3869 // Floating-point Reciprocal Step
3870 //----------------------------------------------------------------------
3871
3872     frecps s21, s16, h13
3873     frecps d22, s30, d21
3874
3875 // CHECK-ERROR: error: invalid operand for instruction
3876 // CHECK-ERROR:          frecps s21, s16, h13
3877 // CHECK-ERROR:                           ^
3878 // CHECK-ERROR: error: invalid operand for instruction
3879 // CHECK-ERROR:          frecps d22, s30, d21
3880 // CHECK-ERROR:                      ^
3881
3882 //----------------------------------------------------------------------
3883 // Floating-point Reciprocal Square Root Step
3884 //----------------------------------------------------------------------
3885
3886     frsqrts s21, h5, s12
3887     frsqrts d8, s22, d18
3888
3889 // CHECK-ERROR: error: invalid operand for instruction
3890 // CHECK-ERROR:          frsqrts s21, h5, s12
3891 // CHECK-ERROR:                       ^
3892 // CHECK-ERROR: error: invalid operand for instruction
3893 // CHECK-ERROR:          frsqrts d8, s22, d18
3894 // CHECK-ERROR:                      ^
3895
3896 //----------------------------------------------------------------------
3897 // Vector load/store multiple N-element structure (class SIMD lselem)
3898 //----------------------------------------------------------------------
3899          ld1 {x3}, [x2]
3900          ld1 {v4}, [x0]
3901          ld1 {v32.16b}, [x0]
3902          ld1 {v15.8h}, [x32]
3903 // CHECK-ERROR: error: expected vector type register
3904 // CHECK-ERROR:        ld1 {x3}, [x2]
3905 // CHECK-ERROR:             ^
3906 // CHECK-ERROR: error: expected vector type register
3907 // CHECK-ERROR:        ld1 {v4}, [x0]
3908 // CHECK-ERROR:             ^
3909 // CHECK-ERROR: error: expected vector type register
3910 // CHECK-ERROR:        ld1 {v32.16b}, [x0]
3911 // CHECK-ERROR:             ^
3912 // CHECK-ERROR: error: invalid operand for instruction
3913 // CHECK-ERROR:        ld1 {v15.8h}, [x32]
3914 // CHECK-ERROR:                       ^
3915
3916          ld1 {v0.16b, v2.16b}, [x0]
3917          ld1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
3918          ld1 v0.8b, v1.8b}, [x0]
3919          ld1 {v0.8h-v4.8h}, [x0]
3920          ld1 {v1.8h-v1.8h}, [x0]
3921          ld1 {v15.8h-v17.4h}, [x15]
3922          ld1 {v0.8b-v2.8b, [x0]
3923 // CHECK-ERROR: error: invalid space between two vectors
3924 // CHECK-ERROR:        ld1 {v0.16b, v2.16b}, [x0]
3925 // CHECK-ERROR:                     ^
3926 // CHECK-ERROR: error: invalid number of vectors
3927 // CHECK-ERROR:        ld1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
3928 // CHECK-ERROR:                                         ^
3929 // CHECK-ERROR: error: '{' expected
3930 // CHECK-ERROR:        ld1 v0.8b, v1.8b}, [x0]
3931 // CHECK-ERROR:            ^
3932 // CHECK-ERROR: error: invalid number of vectors
3933 // CHECK-ERROR:        ld1 {v0.8h-v4.8h}, [x0]
3934 // CHECK-ERROR:                   ^
3935 // CHECK-ERROR: error: invalid number of vectors
3936 // CHECK-ERROR:        ld1 {v1.8h-v1.8h}, [x0]
3937 // CHECK-ERROR:                   ^
3938 // CHECK-ERROR: error: expected the same vector layout
3939 // CHECK-ERROR:        ld1 {v15.8h-v17.4h}, [x15]
3940 // CHECK-ERROR:                        ^
3941 // CHECK-ERROR: error: '}' expected
3942 // CHECK-ERROR:        ld1 {v0.8b-v2.8b, [x0]
3943 // CHECK-ERROR:                        ^
3944
3945          ld2 {v15.8h, v16.4h}, [x15]
3946          ld2 {v0.8b, v2.8b}, [x0]
3947          ld2 {v15.4h, v16.4h, v17.4h}, [x32]
3948          ld2 {v15.8h-v16.4h}, [x15]
3949          ld2 {v0.2d-v2.2d}, [x0]
3950 // CHECK-ERROR: error: invalid space between two vectors
3951 // CHECK-ERROR:        ld2 {v15.8h, v16.4h}, [x15]
3952 // CHECK-ERROR:                     ^
3953 // CHECK-ERROR: error: invalid space between two vectors
3954 // CHECK-ERROR:        ld2 {v0.8b, v2.8b}, [x0]
3955 // CHECK-ERROR:                    ^
3956 // CHECK-ERROR: error: invalid operand for instruction
3957 // CHECK-ERROR:        ld2 {v15.4h, v16.4h, v17.4h}, [x32]
3958 // CHECK-ERROR:            ^
3959 // CHECK-ERROR: error: expected the same vector layout
3960 // CHECK-ERROR:        ld2 {v15.8h-v16.4h}, [x15]
3961 // CHECK-ERROR:                        ^
3962 // CHECK-ERROR: error: invalid operand for instruction
3963 // CHECK-ERROR:        ld2 {v0.2d-v2.2d}, [x0]
3964 // CHECK-ERROR:            ^
3965
3966          ld3 {v15.8h, v16.8h, v17.4h}, [x15]
3967          ld3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
3968          ld3 {v0.8b, v2.8b, v3.8b}, [x0]
3969          ld3 {v15.8h-v17.4h}, [x15]
3970          ld3 {v31.4s-v2.4s}, [sp]
3971 // CHECK-ERROR: error: invalid space between two vectors
3972 // CHECK-ERROR:        ld3 {v15.8h, v16.8h, v17.4h}, [x15]
3973 // CHECK-ERROR:                             ^
3974 // CHECK-ERROR: error: expected vector type register
3975 // CHECK-ERROR:        ld3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
3976 // CHECK-ERROR:                    ^
3977 // CHECK-ERROR: error: invalid space between two vectors
3978 // CHECK-ERROR:        ld3 {v0.8b, v2.8b, v3.8b}, [x0]
3979 // CHECK-ERROR:                    ^
3980 // CHECK-ERROR: error: expected the same vector layout
3981 // CHECK-ERROR:        ld3 {v15.8h-v17.4h}, [x15]
3982 // CHECK-ERROR:                        ^
3983 // CHECK-ERROR: error: invalid operand for instruction
3984 // CHECK-ERROR:        ld3 {v31.4s-v2.4s}, [sp]
3985 // CHECK-ERROR:            ^
3986
3987          ld4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
3988          ld4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
3989          ld4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
3990          ld4 {v15.8h-v18.4h}, [x15]
3991          ld4 {v31.2s-v1.2s}, [x31]
3992 // CHECK-ERROR: error: invalid space between two vectors
3993 // CHECK-ERROR:        ld4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
3994 // CHECK-ERROR:                             ^
3995 // CHECK-ERROR: error: invalid space between two vectors
3996 // CHECK-ERROR:        ld4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
3997 // CHECK-ERROR:                    ^
3998 // CHECK-ERROR: error: invalid number of vectors
3999 // CHECK-ERROR:        ld4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4000 // CHECK-ERROR:                                             ^
4001 // CHECK-ERROR: error: expected the same vector layout
4002 // CHECK-ERROR:        ld4 {v15.8h-v18.4h}, [x15]
4003 // CHECK-ERROR:                        ^
4004 // CHECK-ERROR: error: invalid operand for instruction
4005 // CHECK-ERROR:        ld4 {v31.2s-v1.2s}, [x31]
4006 // CHECK-ERROR:            ^
4007
4008          st1 {x3}, [x2]
4009          st1 {v4}, [x0]
4010          st1 {v32.16b}, [x0]
4011          st1 {v15.8h}, [x32]
4012 // CHECK-ERROR: error: expected vector type register
4013 // CHECK-ERROR:        st1 {x3}, [x2]
4014 // CHECK-ERROR:             ^
4015 // CHECK-ERROR: error: expected vector type register
4016 // CHECK-ERROR:        st1 {v4}, [x0]
4017 // CHECK-ERROR:             ^
4018 // CHECK-ERROR: error: expected vector type register
4019 // CHECK-ERROR:        st1 {v32.16b}, [x0]
4020 // CHECK-ERROR:             ^
4021 // CHECK-ERROR: error: invalid operand for instruction
4022 // CHECK-ERROR:        st1 {v15.8h}, [x32]
4023 // CHECK-ERROR:                       ^
4024
4025          st1 {v0.16b, v2.16b}, [x0]
4026          st1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
4027          st1 v0.8b, v1.8b}, [x0]
4028          st1 {v0.8h-v4.8h}, [x0]
4029          st1 {v1.8h-v1.8h}, [x0]
4030          st1 {v15.8h-v17.4h}, [x15]
4031          st1 {v0.8b-v2.8b, [x0]
4032 // CHECK-ERROR: error: invalid space between two vectors
4033 // CHECK-ERROR:        st1 {v0.16b, v2.16b}, [x0]
4034 // CHECK-ERROR:                     ^
4035 // CHECK-ERROR: error: invalid number of vectors
4036 // CHECK-ERROR:        st1 {v0.8h, v1.8h, v2.8h, v3.8h, v4.8h}, [x0]
4037 // CHECK-ERROR:                                         ^
4038 // CHECK-ERROR: error: '{' expected
4039 // CHECK-ERROR:        st1 v0.8b, v1.8b}, [x0]
4040 // CHECK-ERROR:            ^
4041 // CHECK-ERROR: error: invalid number of vectors
4042 // CHECK-ERROR:        st1 {v0.8h-v4.8h}, [x0]
4043 // CHECK-ERROR:                   ^
4044 // CHECK-ERROR: error: invalid number of vectors
4045 // CHECK-ERROR:        st1 {v1.8h-v1.8h}, [x0]
4046 // CHECK-ERROR:                   ^
4047 // CHECK-ERROR: error: expected the same vector layout
4048 // CHECK-ERROR:        st1 {v15.8h-v17.4h}, [x15]
4049 // CHECK-ERROR:                        ^
4050 // CHECK-ERROR: error: '}' expected
4051 // CHECK-ERROR:        st1 {v0.8b-v2.8b, [x0]
4052 // CHECK-ERROR:                        ^
4053
4054          st2 {v15.8h, v16.4h}, [x15]
4055          st2 {v0.8b, v2.8b}, [x0]
4056          st2 {v15.4h, v16.4h, v17.4h}, [x30]
4057          st2 {v15.8h-v16.4h}, [x15]
4058          st2 {v0.2d-v2.2d}, [x0]
4059 // CHECK-ERROR: error: invalid space between two vectors
4060 // CHECK-ERROR:        st2 {v15.8h, v16.4h}, [x15]
4061 // CHECK-ERROR:                     ^
4062 // CHECK-ERROR: error: invalid space between two vectors
4063 // CHECK-ERROR:        st2 {v0.8b, v2.8b}, [x0]
4064 // CHECK-ERROR:                    ^
4065 // CHECK-ERROR: error: invalid operand for instruction
4066 // CHECK-ERROR:        st2 {v15.4h, v16.4h, v17.4h}, [x30]
4067 // CHECK-ERROR:            ^
4068 // CHECK-ERROR: error: expected the same vector layout
4069 // CHECK-ERROR:        st2 {v15.8h-v16.4h}, [x15]
4070 // CHECK-ERROR:                        ^
4071 // CHECK-ERROR: error: invalid operand for instruction
4072 // CHECK-ERROR:        st2 {v0.2d-v2.2d}, [x0]
4073 // CHECK-ERROR:            ^
4074
4075          st3 {v15.8h, v16.8h, v17.4h}, [x15]
4076          st3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
4077          st3 {v0.8b, v2.8b, v3.8b}, [x0]
4078          st3 {v15.8h-v17.4h}, [x15]
4079          st3 {v31.4s-v2.4s}, [sp]
4080 // CHECK-ERROR: error: invalid space between two vectors
4081 // CHECK-ERROR:        st3 {v15.8h, v16.8h, v17.4h}, [x15]
4082 // CHECK-ERROR:                             ^
4083 // CHECK-ERROR: error: expected vector type register
4084 // CHECK-ERROR:        st3 {v0.8b, v1,8b, v2.8b, v3.8b}, [x0]
4085 // CHECK-ERROR:                    ^
4086 // CHECK-ERROR: error: invalid space between two vectors
4087 // CHECK-ERROR:        st3 {v0.8b, v2.8b, v3.8b}, [x0]
4088 // CHECK-ERROR:                    ^
4089 // CHECK-ERROR: error: expected the same vector layout
4090 // CHECK-ERROR:        st3 {v15.8h-v17.4h}, [x15]
4091 // CHECK-ERROR:                        ^
4092 // CHECK-ERROR: error: invalid operand for instruction
4093 // CHECK-ERROR:        st3 {v31.4s-v2.4s}, [sp]
4094 // CHECK-ERROR:            ^
4095
4096          st4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4097          st4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4098          st4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4099          st4 {v15.8h-v18.4h}, [x15]
4100          st4 {v31.2s-v1.2s}, [x31]
4101 // CHECK-ERROR: error: invalid space between two vectors
4102 // CHECK-ERROR:        st4 {v15.8h, v16.8h, v17.4h, v18.8h}, [x15]
4103 // CHECK-ERROR:                             ^
4104 // CHECK-ERROR: error: invalid space between two vectors
4105 // CHECK-ERROR:        st4 {v0.8b, v2.8b, v3.8b, v4.8b}, [x0]
4106 // CHECK-ERROR:                    ^
4107 // CHECK-ERROR: error: invalid number of vectors
4108 // CHECK-ERROR:        st4 {v15.4h, v16.4h, v17.4h, v18.4h, v19.4h}, [x31]
4109 // CHECK-ERROR:                                             ^
4110 // CHECK-ERROR: error: expected the same vector layout
4111 // CHECK-ERROR:        st4 {v15.8h-v18.4h}, [x15]
4112 // CHECK-ERROR:                        ^
4113 // CHECK-ERROR: error: invalid operand for instruction
4114 // CHECK-ERROR:        st4 {v31.2s-v1.2s}, [x31]
4115 // CHECK-ERROR:            ^
4116
4117 //----------------------------------------------------------------------
4118 // Vector post-index load/store multiple N-element structure
4119 // (class SIMD lselem-post)
4120 //----------------------------------------------------------------------
4121          ld1 {v0.16b}, [x0], #8
4122          ld1 {v0.8h, v1.16h}, [x0], x1
4123          ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4124 // CHECK-ERROR: error: invalid operand for instruction
4125 // CHECK-ERROR:          ld1 {v0.16b}, [x0], #8
4126 // CHECK-ERROR:                              ^
4127 // CHECK-ERROR:  error: expected vector type register
4128 // CHECK-ERROR:          ld1 {v0.8h, v1.16h}, [x0], x1
4129 // CHECK-ERROR:                      ^
4130 // CHECK-ERROR:  error: invalid operand for instruction
4131 // CHECK-ERROR:          ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4132 // CHECK-ERROR:                                                  ^
4133
4134          ld2 {v0.16b, v1.16b}, [x0], #16
4135          ld3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4136          ld4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4137 // CHECK-ERROR:  error: invalid operand for instruction
4138 // CHECK-ERROR:          ld2 {v0.16b, v1.16b}, [x0], #16
4139 // CHECK-ERROR:                                      ^
4140 // CHECK-ERROR:  error: invalid operand for instruction
4141 // CHECK-ERROR:          ld3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4142 // CHECK-ERROR:                                           ^
4143 // CHECK-ERROR:  error: invalid space between two vectors
4144 // CHECK-ERROR:          ld4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4145 // CHECK-ERROR:                                     ^
4146
4147          st1 {v0.16b}, [x0], #8
4148          st1 {v0.8h, v1.16h}, [x0], x1
4149          st1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4150 // CHECK-ERROR:  error: invalid operand for instruction
4151 // CHECK-ERROR:          st1 {v0.16b}, [x0], #8
4152 // CHECK-ERROR:                              ^
4153 // CHECK-ERROR:  error: expected vector type register
4154 // CHECK-ERROR:          st1 {v0.8h, v1.16h}, [x0], x1
4155 // CHECK-ERROR:                      ^
4156 // CHECK-ERROR:  error: invalid operand for instruction
4157 // CHECK-ERROR:          st1 {v0.8b, v1.8b, v2.8b, v3.8b}, [x0], #24
4158                                                  ^
4159
4160          st2 {v0.16b, v1.16b}, [x0], #16
4161          st3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4162          st4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4163 // CHECK-ERROR:  error: invalid operand for instruction
4164 // CHECK-ERROR:          st2 {v0.16b, v1.16b}, [x0], #16
4165 // CHECK-ERROR:                                      ^
4166 // CHECK-ERROR:  error: invalid operand for instruction
4167 // CHECK-ERROR:          st3 {v5.2s, v6.2s, v7.2s}, [x1], #48
4168 // CHECK-ERROR:                                           ^
4169 // CHECK-ERROR:  error: invalid space between two vectors
4170 // CHECK-ERROR:          st4 {v31.2d, v0.2d, v1.2d, v2.1d}, [x3], x1
4171 // CHECK-ERROR:                                     ^
4172
4173 //------------------------------------------------------------------------------
4174 // Load single N-element structure to all lanes of N consecutive
4175 // registers (N = 1,2,3,4)
4176 //------------------------------------------------------------------------------
4177          ld1r {x1}, [x0]
4178          ld2r {v31.4s, v0.2s}, [sp]
4179          ld3r {v0.8b, v1.8b, v2.8b, v3.8b}, [x0]
4180          ld4r {v31.2s, v0.2s, v1.2d, v2.2s}, [sp]
4181 // CHECK-ERROR: error: expected vector type register
4182 // CHECK-ERROR: ld1r {x1}, [x0]
4183 // CHECK-ERROR:       ^
4184 // CHECK-ERROR: error: invalid space between two vectors
4185 // CHECK-ERROR: ld2r {v31.4s, v0.2s}, [sp]
4186 // CHECK-ERROR:               ^
4187 // CHECK-ERROR: error: invalid operand for instruction
4188 // CHECK-ERROR: ld3r {v0.8b, v1.8b, v2.8b, v3.8b}, [x0]
4189 // CHECK-ERROR:      ^
4190 // CHECK-ERROR: error: invalid space between two vectors
4191 // CHECK-ERROR: ld4r {v31.2s, v0.2s, v1.2d, v2.2s}, [sp]
4192 // CHECK-ERROR:                      ^
4193
4194 //------------------------------------------------------------------------------
4195 // Load/Store single N-element structure to/from one lane of N consecutive
4196 // registers (N = 1, 2,3,4)
4197 //------------------------------------------------------------------------------
4198          ld1 {v0.b}[16], [x0]
4199          ld2 {v15.h, v16.h}[8], [x15]
4200          ld3 {v31.s, v0.s, v1.s}[-1], [sp]
4201          ld4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4202 // CHECK-ERROR:: error: lane number incompatible with layout
4203 // CHECK-ERROR: ld1 {v0.b}[16], [x0]
4204 // CHECK-ERROR:            ^
4205 // CHECK-ERROR: error: lane number incompatible with layout
4206 // CHECK-ERROR: ld2 {v15.h, v16.h}[8], [x15]
4207 // CHECK-ERROR:                    ^
4208 // CHECK-ERROR: error: expected lane number
4209 // CHECK-ERROR: ld3 {v31.s, v0.s, v1.s}[-1], [sp]
4210 // CHECK-ERROR:                         ^
4211 // CHECK-ERROR: error: lane number incompatible with layout
4212 // CHECK-ERROR: ld4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4213 // CHECK-ERROR:                              ^
4214
4215          st1 {v0.d}[16], [x0]
4216          st2 {v31.s, v0.s}[3], [8]
4217          st3 {v15.h, v16.h, v17.h}[-1], [x15]
4218          st4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4219 // CHECK-ERROR:: error: lane number incompatible with layout
4220 // CHECK-ERROR: st1 {v0.d}[16], [x0]
4221 // CHECK-ERROR:            ^
4222 // CHECK-ERROR: error: invalid operand for instruction
4223 // CHECK-ERROR: st2 {v31.s, v0.s}[3], [8]
4224 // CHECK-ERROR:                        ^
4225 // CHECK-ERROR: error: expected lane number
4226 // CHECK-ERROR: st3 {v15.h, v16.h, v17.h}[-1], [x15]
4227 // CHECK-ERROR:                           ^
4228 // CHECK-ERROR: lane number incompatible with layout
4229 // CHECK-ERROR: st4 {v0.d, v1.d, v2.d, v3.d}[2], [x0]
4230 // CHECK-ERROR:                              ^
4231
4232 //------------------------------------------------------------------------------
4233 // Post-index of load single N-element structure to all lanes of N consecutive
4234 // registers (N = 1,2,3,4)
4235 //------------------------------------------------------------------------------
4236          ld1r {v15.8h}, [x15], #5
4237          ld2r {v0.2d, v1.2d}, [x0], #7
4238          ld3r {v15.4h, v16.4h, v17.4h}, [x15], #1
4239          ld4r {v31.1d, v0.1d, v1.1d, v2.1d}, [sp], sp
4240 // CHECK-ERROR: error: invalid operand for instruction
4241 // CHECK-ERROR: ld1r {v15.8h}, [x15], #5
4242 // CHECK-ERROR:                       ^
4243 // CHECK-ERROR: error: invalid operand for instruction
4244 // CHECK-ERROR: ld2r {v0.2d, v1.2d}, [x0], #7
4245 // CHECK-ERROR:                            ^
4246 // CHECK-ERROR: error: invalid operand for instruction
4247 // CHECK-ERROR: ld3r {v15.4h, v16.4h, v17.4h}, [x15], #1
4248 // CHECK-ERROR:                                       ^
4249 // CHECK-ERROR: error: invalid operand for instruction
4250 // CHECK-ERROR: ld4r {v31.1d, v0.1d, v1.1d, v2.1d}, [sp], sp
4251 // CHECK-ERROR:                                           ^
4252
4253 //------------------------------------------------------------------------------
4254 // Post-index of Load/Store single N-element structure to/from one lane of N
4255 // consecutive registers (N = 1, 2,3,4)
4256 //------------------------------------------------------------------------------
4257          ld1 {v0.b}[0], [x0], #2
4258          ld2 {v15.h, v16.h}[0], [x15], #3
4259          ld3 {v31.s, v0.s, v1.d}[0], [sp], x9
4260          ld4 {v0.d, v1.d, v2.d, v3.d}[1], [x0], #24
4261 // CHECK-ERROR: error: invalid operand for instruction
4262 // CHECK-ERROR: ld1 {v0.b}[0], [x0], #2
4263 // CHECK-ERROR:                      ^
4264 // CHECK-ERROR: error: invalid operand for instruction
4265 // CHECK-ERROR: ld2 {v15.h, v16.h}[0], [x15], #3
4266 // CHECK-ERROR:                               ^
4267 // CHECK-ERROR: error: expected the same vector layout
4268 // CHECK-ERROR: ld3 {v31.s, v0.s, v1.d}[0], [sp], x9
4269 // CHECK-ERROR:                      ^
4270 // CHECK-ERROR: error: invalid operand for instruction
4271 // CHECK-ERROR: ld4 {v0.d, v1.d, v2.d, v3.d}[1], [x0], #24
4272 // CHECK-ERROR:                                        ^
4273
4274          st1 {v0.d}[0], [x0], #7
4275          st2 {v31.s, v0.s}[0], [sp], #6
4276          st3 {v15.h, v16.h, v17.h}[0], [x15], #8
4277          st4 {v0.b, v1.b, v2.b, v3.b}[1], [x0], #1
4278 // CHECK-ERROR: error: invalid operand for instruction
4279 // CHECK-ERROR: st1 {v0.d}[0], [x0], #7
4280 // CHECK-ERROR:                      ^
4281 // CHECK-ERROR: error: invalid operand for instruction
4282 // CHECK-ERROR: st2 {v31.s, v0.s}[0], [sp], #6
4283 // CHECK-ERROR:                             ^
4284 // CHECK-ERROR: error: invalid operand for instruction
4285 // CHECK-ERROR: st3 {v15.h, v16.h, v17.h}[0], [x15], #8
4286 // CHECK-ERROR:                                      ^
4287 // CHECK-ERROR: error: invalid operand for instruction
4288 // CHECK-ERROR: st4 {v0.b, v1.b, v2.b, v3.b}[1], [x0], #1
4289 // CHECK-ERROR:                                        ^
4290
4291
4292          ins v2.b[16], w1
4293          ins v7.h[8], w14
4294          ins v20.s[5], w30
4295          ins v1.d[2], x7
4296          ins v2.b[3], b1
4297          ins v7.h[2], h14
4298          ins v20.s[1], s30
4299          ins v1.d[0], d7
4300
4301 // CHECK-ERROR: error: lane number incompatible with layout
4302 // CHECK-ERROR:         ins v2.b[16], w1
4303 // CHECK-ERROR:                  ^
4304 // CHECK-ERROR: error: lane number incompatible with layout
4305 // CHECK-ERROR:         ins v7.h[8], w14
4306 // CHECK-ERROR:                  ^
4307 // CHECK-ERROR: error: lane number incompatible with layout
4308 // CHECK-ERROR:         ins v20.s[5], w30
4309 // CHECK-ERROR:                   ^
4310 // CHECK-ERROR: error: lane number incompatible with layout
4311 // CHECK-ERROR:         ins v1.d[2], x7
4312 // CHECK-ERROR:                  ^
4313 // CHECK-ERROR: error: invalid operand for instruction
4314 // CHECK-ERROR:         ins v2.b[3], b1
4315 // CHECK-ERROR:                      ^
4316 // CHECK-ERROR: error: invalid operand for instruction
4317 // CHECK-ERROR:         ins v7.h[2], h14
4318 // CHECK-ERROR:                      ^
4319 // CHECK-ERROR: error: invalid operand for instruction
4320 // CHECK-ERROR:         ins v20.s[1], s30
4321 // CHECK-ERROR:                       ^
4322 // CHECK-ERROR: error: invalid operand for instruction
4323 // CHECK-ERROR:         ins v1.d[0], d7
4324 // CHECK-ERROR:                      ^
4325
4326          smov w1, v0.b[16]
4327          smov w14, v6.h[8]
4328          smov x1, v0.b[16]
4329          smov x14, v6.h[8]
4330          smov x20, v9.s[5]
4331          smov w1, v0.d[0]
4332          smov w14, v6.d[1]
4333          smov x1, v0.d[0]
4334          smov x14, v6.d[1]
4335          smov x20, v9.d[0]
4336
4337 // CHECK-ERROR error: lane number incompatible with layout
4338 // CHECK-ERROR         smov w1, v0.b[16]
4339 // CHECK-ERROR                       ^
4340 // CHECK-ERROR error: lane number incompatible with layout
4341 // CHECK-ERROR         smov w14, v6.h[8]
4342 // CHECK-ERROR                        ^
4343 // CHECK-ERROR error: lane number incompatible with layout
4344 // CHECK-ERROR         smov x1, v0.b[16]
4345 // CHECK-ERROR                       ^
4346 // CHECK-ERROR error: lane number incompatible with layout
4347 // CHECK-ERROR         smov x14, v6.h[8]
4348 // CHECK-ERROR                        ^
4349 // CHECK-ERROR error: lane number incompatible with layout
4350 // CHECK-ERROR         smov x20, v9.s[5]
4351 // CHECK-ERROR                        ^
4352 // CHECK-ERROR error: invalid operand for instruction
4353 // CHECK-ERROR         smov w1, v0.d[0]
4354 // CHECK-ERROR                     ^
4355 // CHECK-ERROR error: invalid operand for instruction
4356 // CHECK-ERROR         smov w14, v6.d[1]
4357 // CHECK-ERROR                      ^
4358 // CHECK-ERROR error: invalid operand for instruction
4359 // CHECK-ERROR         smov x1, v0.d[0]
4360 // CHECK-ERROR                     ^
4361 // CHECK-ERROR error: invalid operand for instruction
4362 // CHECK-ERROR         smov x14, v6.d[1]
4363 // CHECK-ERROR                      ^
4364 // CHECK-ERROR error: invalid operand for instruction
4365 // CHECK-ERROR         smov x20, v9.d[0]
4366 // CHECK-ERROR                      ^
4367
4368          umov w1, v0.b[16]
4369          umov w14, v6.h[8]
4370          umov w20, v9.s[5]
4371          umov x7, v18.d[3]
4372          umov w1, v0.d[0]
4373          umov s20, v9.s[2]
4374          umov d7, v18.d[1]
4375
4376 // CHECK-ERROR error: lane number incompatible with layout
4377 // CHECK-ERROR         umov w1, v0.b[16]
4378 // CHECK-ERROR                       ^
4379 // CHECK-ERROR error: lane number incompatible with layout
4380 // CHECK-ERROR         umov w14, v6.h[8]
4381 // CHECK-ERROR                        ^
4382 // CHECK-ERROR error: lane number incompatible with layout
4383 // CHECK-ERROR         umov w20, v9.s[5]
4384 // CHECK-ERROR                        ^
4385 // CHECK-ERROR error: lane number incompatible with layout
4386 // CHECK-ERROR         umov x7, v18.d[3]
4387 // CHECK-ERROR                        ^
4388 // CHECK-ERROR error: invalid operand for instruction
4389 // CHECK-ERROR         umov w1, v0.d[0]
4390 // CHECK-ERROR                     ^
4391 // CHECK-ERROR error: invalid operand for instruction
4392 // CHECK-ERROR         umov s20, v9.s[2]
4393 // CHECK-ERROR              ^
4394 // CHECK-ERROR error: invalid operand for instruction
4395 // CHECK-ERROR         umov d7, v18.d[1]
4396 // CHECK-ERROR              ^
4397
4398          Ins v1.h[2], v3.b[6]
4399          Ins v6.h[7], v7.s[2]
4400          Ins v15.d[0], v22.s[2]
4401          Ins v0.d[0], v4.b[1]
4402
4403 // CHECK-ERROR error: invalid operand for instruction
4404 // CHECK-ERROR         Ins v1.h[2], v3.b[6]
4405 // CHECK-ERROR                         ^
4406 // CHECK-ERROR error: invalid operand for instruction
4407 // CHECK-ERROR         Ins v6.h[7], v7.s[2]
4408 // CHECK-ERROR                         ^
4409 // CHECK-ERROR error: invalid operand for instruction
4410 // CHECK-ERROR         Ins v15.d[0], v22.s[2]
4411 // CHECK-ERROR                           ^
4412 // CHECK-ERROR error: invalid operand for instruction
4413 // CHECK-ERROR         Ins v0.d[0], v4.b[1]
4414 // CHECK-ERROR                         ^
4415
4416          dup v1.8h, v2.b[2]
4417          dup v11.4s, v7.h[7]
4418          dup v17.2d, v20.s[0]
4419          dup v1.16b, v2.h[2]
4420          dup v11.8h, v7.s[3]
4421          dup v17.4s, v20.d[0]
4422          dup v5.2d, v1.b[1]
4423
4424 // CHECK-ERROR error: invalid operand for instruction
4425 // CHECK-ERROR         dup v1.8h, v2.b[2]
4426 // CHECK-ERROR                       ^
4427 // CHECK-ERROR error: invalid operand for instruction
4428 // CHECK-ERROR         dup v11.4s, v7.h[7]
4429 // CHECK-ERROR                        ^
4430 // CHECK-ERROR error: invalid operand for instruction
4431 // CHECK-ERROR         dup v17.2d, v20.s[0]
4432 // CHECK-ERROR                         ^
4433 // CHECK-ERROR error: invalid operand for instruction
4434 // CHECK-ERROR         dup v1.16b, v2.h[2]
4435 // CHECK-ERROR                        ^
4436 // CHECK-ERROR invalid operand for instruction
4437 // CHECK-ERROR         dup v11.8h, v7.s[3]
4438 // CHECK-ERROR                        ^
4439 // CHECK-ERROR invalid operand for instruction
4440 // CHECK-ERROR         dup v17.4s, v20.d[0]
4441 // CHECK-ERROR                         ^
4442 // CHECK-ERROR invalid operand for instruction
4443 // CHECK-ERROR         dup v5.2d, v1.b[1]
4444 // CHECK-ERROR                       ^
4445
4446          dup v1.8b, b1
4447          dup v11.4h, h14
4448          dup v17.2s, s30
4449          dup v1.16b, d2
4450          dup v11.8s, w16
4451          dup v17.4d, w28
4452          dup v5.2d, w0
4453
4454 // CHECK-ERROR error: invalid operand for instruction
4455 // CHECK-ERROR         dup v1.8b, b1
4456 // CHECK-ERROR                    ^
4457 // CHECK-ERROR error: invalid operand for instruction
4458 // CHECK-ERROR         dup v11.4h, h14
4459 // CHECK-ERROR                     ^
4460 // CHECK-ERROR error: invalid operand for instruction
4461 // CHECK-ERROR         dup v17.2s, s30
4462 // CHECK-ERROR                     ^
4463 // CHECK-ERROR error: invalid operand for instruction
4464 // CHECK-ERROR         dup v1.16b, d2
4465 // CHECK-ERROR                     ^
4466 // CHECK-ERROR error: invalid operand for instruction
4467 // CHECK-ERROR         dup v11.8s, w16
4468 // CHECK-ERROR             ^
4469 // CHECK-ERROR error: invalid operand for instruction
4470 // CHECK-ERROR         dup v17.4d, w28
4471 // CHECK-ERROR             ^
4472 // CHECK-ERROR error: invalid operand for instruction
4473 // CHECK-ERROR         dup v5.2d, w0
4474 // CHECK-ERROR                    ^
4475
4476 //----------------------------------------------------------------------
4477 // Scalar Compare Bitwise Equal
4478 //----------------------------------------------------------------------
4479
4480          cmeq b20, d21, d22
4481
4482 // CHECK-ERROR: error: invalid operand for instruction
4483 // CHECK-ERROR:          cmeq b20, d21, d22
4484 // CHECK-ERROR:               ^
4485
4486 //----------------------------------------------------------------------
4487 // Scalar Compare Bitwise Equal To Zero
4488 //----------------------------------------------------------------------
4489
4490          cmeq d20, b21, #0
4491
4492 // CHECK-ERROR: error: invalid operand for instruction
4493 // CHECK-ERROR:          cmeq d20, b21, #0
4494 // CHECK-ERROR:                    ^
4495
4496 //----------------------------------------------------------------------
4497 // Scalar Compare Unsigned Higher Or Same
4498 //----------------------------------------------------------------------
4499
4500          cmhs b20, d21, d22
4501
4502 // CHECK-ERROR: error: invalid operand for instruction
4503 // CHECK-ERROR:          cmhs b20, d21, d22
4504 // CHECK-ERROR:               ^
4505
4506         
4507 //----------------------------------------------------------------------
4508 // Scalar Compare Signed Greather Than Or Equal
4509 //----------------------------------------------------------------------
4510
4511          cmge b20, d21, d22
4512
4513 // CHECK-ERROR: error: invalid operand for instruction
4514 // CHECK-ERROR:          cmge b20, d21, d22
4515 // CHECK-ERROR:               ^
4516
4517 //----------------------------------------------------------------------
4518 // Scalar Compare Signed Greather Than Or Equal To Zero
4519 //----------------------------------------------------------------------
4520
4521          cmge d20, b21, #0
4522
4523 // CHECK-ERROR: error: invalid operand for instruction
4524 // CHECK-ERROR:          cmge d20, b21, #0
4525 // CHECK-ERROR:                    ^
4526
4527 //----------------------------------------------------------------------
4528 // Scalar Compare Unsigned Higher
4529 //----------------------------------------------------------------------
4530
4531          cmhi b20, d21, d22
4532
4533 // CHECK-ERROR: error: invalid operand for instruction
4534 // CHECK-ERROR:          cmhi b20, d21, d22
4535 // CHECK-ERROR:               ^
4536
4537 //----------------------------------------------------------------------
4538 // Scalar Compare Signed Greater Than
4539 //----------------------------------------------------------------------
4540
4541          cmgt b20, d21, d22
4542
4543 // CHECK-ERROR: error: invalid operand for instruction
4544 // CHECK-ERROR:          cmgt b20, d21, d22
4545 // CHECK-ERROR:               ^
4546
4547 //----------------------------------------------------------------------
4548 // Scalar Compare Signed Greater Than Zero
4549 //----------------------------------------------------------------------
4550
4551          cmgt d20, b21, #0
4552
4553 // CHECK-ERROR: error: invalid operand for instruction
4554 // CHECK-ERROR:          cmgt d20, b21, #0
4555 // CHECK-ERROR:                    ^
4556
4557 //----------------------------------------------------------------------
4558 // Scalar Compare Signed Less Than Or Equal To Zero
4559 //----------------------------------------------------------------------
4560
4561          cmle d20, b21, #0
4562
4563 // CHECK-ERROR: error: invalid operand for instruction
4564 // CHECK-ERROR:          cmle d20, b21, #0
4565 // CHECK-ERROR:                    ^
4566
4567 //----------------------------------------------------------------------
4568 // Scalar Compare Less Than Zero
4569 //----------------------------------------------------------------------
4570
4571          cmlt d20, b21, #0
4572
4573 // CHECK-ERROR: error: invalid operand for instruction
4574 // CHECK-ERROR:          cmlt d20, b21, #0
4575 // CHECK-ERROR:                    ^
4576
4577 //----------------------------------------------------------------------
4578 // Scalar Compare Bitwise Test Bits
4579 //----------------------------------------------------------------------
4580
4581          cmtst b20, d21, d22
4582
4583 // CHECK-ERROR: error: invalid operand for instruction
4584 // CHECK-ERROR:          cmtst b20, d21, d22
4585 // CHECK-ERROR:                ^
4586
4587 //----------------------------------------------------------------------
4588 // Scalar Floating-point Compare Mask Equal
4589 //----------------------------------------------------------------------
4590
4591          fcmeq s10, h11, s12
4592          fcmeq d20, s21, d22
4593
4594 // CHECK-ERROR: error: invalid operand for instruction
4595 // CHECK-ERROR:          fcmeq s10, h11, s12
4596 // CHECK-ERROR:                     ^
4597 // CHECK-ERROR: error: invalid operand for instruction
4598 // CHECK-ERROR:          fcmeq d20, s21, d22
4599 // CHECK-ERROR:                     ^
4600
4601 //----------------------------------------------------------------------
4602 // Scalar Floating-point Compare Mask Equal To Zero
4603 //----------------------------------------------------------------------
4604
4605          fcmeq h10, s11, #0.0
4606          fcmeq d20, s21, #0.0
4607
4608 // CHECK-ERROR: error: invalid operand for instruction
4609 // CHECK-ERROR:          fcmeq h10, s11, #0.0
4610 // CHECK-ERROR:                ^
4611 // CHECK-ERROR: error: invalid operand for instruction
4612 // CHECK-ERROR:          fcmeq d20, s21, #0.0
4613 // CHECK-ERROR:                     ^
4614
4615 //----------------------------------------------------------------------
4616 // Scalar Floating-point Compare Mask Greater Than Or Equal
4617 //----------------------------------------------------------------------
4618
4619          fcmge s10, h11, s12
4620          fcmge d20, s21, d22
4621
4622 // CHECK-ERROR: error: invalid operand for instruction
4623 // CHECK-ERROR:          fcmge s10, h11, s12
4624 // CHECK-ERROR:                     ^
4625 // CHECK-ERROR: error: invalid operand for instruction
4626 // CHECK-ERROR:          fcmge d20, s21, d22
4627 // CHECK-ERROR:                     ^
4628
4629 //----------------------------------------------------------------------
4630 // Scalar Floating-point Compare Mask Greater Than Or Equal To Zero
4631 //----------------------------------------------------------------------
4632
4633          fcmge h10, s11, #0.0
4634          fcmge d20, s21, #0.0
4635
4636 // CHECK-ERROR: error: invalid operand for instruction
4637 // CHECK-ERROR:          fcmge h10, s11, #0.0
4638 // CHECK-ERROR:                ^
4639 // CHECK-ERROR: error: invalid operand for instruction
4640 // CHECK-ERROR:          fcmge d20, s21, #0.0
4641 // CHECK-ERROR:                     ^
4642
4643 //----------------------------------------------------------------------
4644 // Scalar Floating-point Compare Mask Greather Than
4645 //----------------------------------------------------------------------
4646
4647          fcmgt s10, h11, s12
4648          fcmgt d20, s21, d22
4649
4650 // CHECK-ERROR: error: invalid operand for instruction
4651 // CHECK-ERROR:          fcmgt s10, h11, s12
4652 // CHECK-ERROR:                     ^
4653 // CHECK-ERROR: error: invalid operand for instruction
4654 // CHECK-ERROR:          fcmgt d20, s21, d22
4655 // CHECK-ERROR:                     ^
4656
4657 //----------------------------------------------------------------------
4658 // Scalar Floating-point Compare Mask Greather Than Zero
4659 //----------------------------------------------------------------------
4660
4661          fcmgt h10, s11, #0.0
4662          fcmgt d20, s21, #0.0
4663
4664 // CHECK-ERROR: error: invalid operand for instruction
4665 // CHECK-ERROR:          fcmgt h10, s11, #0.0
4666 // CHECK-ERROR:                ^
4667 // CHECK-ERROR: error: invalid operand for instruction
4668 // CHECK-ERROR:          fcmgt d20, s21, #0.0
4669 // CHECK-ERROR:                     ^
4670
4671 //----------------------------------------------------------------------
4672 // Scalar Floating-point Compare Mask Less Than Or Equal To Zero
4673 //----------------------------------------------------------------------
4674
4675          fcmle h10, s11, #0.0
4676          fcmle d20, s21, #0.0
4677
4678 // CHECK-ERROR: error: invalid operand for instruction
4679 // CHECK-ERROR:          fcmle h10, s11, #0.0
4680 // CHECK-ERROR:                ^
4681 // CHECK-ERROR: error: invalid operand for instruction
4682 // CHECK-ERROR:          fcmle d20, s21, #0.0
4683 // CHECK-ERROR:                     ^
4684
4685 //----------------------------------------------------------------------
4686 // Scalar Floating-point Compare Mask Less Than
4687 //----------------------------------------------------------------------
4688
4689          fcmlt h10, s11, #0.0
4690          fcmlt d20, s21, #0.0
4691
4692 // CHECK-ERROR: error: invalid operand for instruction
4693 // CHECK-ERROR:          fcmlt h10, s11, #0.0
4694 // CHECK-ERROR:                     ^
4695 // CHECK-ERROR: error: invalid operand for instruction
4696 // CHECK-ERROR:          fcmlt d20, s21, #0.0
4697 // CHECK-ERROR:                     ^
4698
4699 //----------------------------------------------------------------------
4700 // Scalar Floating-point Absolute Compare Mask Greater Than Or Equal
4701 //----------------------------------------------------------------------
4702
4703          facge s10, h11, s12
4704          facge d20, s21, d22
4705
4706 // CHECK-ERROR: error: invalid operand for instruction
4707 // CHECK-ERROR:          facge s10, h11, s12
4708 // CHECK-ERROR:                     ^
4709 // CHECK-ERROR: error: invalid operand for instruction
4710 // CHECK-ERROR:          facge d20, s21, d22
4711 // CHECK-ERROR:                     ^
4712
4713 //----------------------------------------------------------------------
4714 // Scalar Floating-point Absolute Compare Mask Greater Than
4715 //----------------------------------------------------------------------
4716
4717          facgt s10, h11, s12
4718          facgt d20, d21, s22
4719
4720 // CHECK-ERROR: error: invalid operand for instruction
4721 // CHECK-ERROR:          facgt s10, h11, s12
4722 // CHECK-ERROR:                     ^
4723 // CHECK-ERROR: error: invalid operand for instruction
4724 // CHECK-ERROR:          facgt d20, d21, s22
4725 // CHECK-ERROR:                          ^
4726         
4727 //----------------------------------------------------------------------
4728 // Scalar Signed Saturating Accumulated of Unsigned Value
4729 //----------------------------------------------------------------------
4730
4731         suqadd b0, h1
4732         suqadd h0, s1
4733         suqadd s0, d1
4734         suqadd d0, b0
4735
4736 // CHECK-ERROR: error: invalid operand for instruction
4737 // CHECK-ERROR:        suqadd b0, h1
4738 // CHECK-ERROR:                   ^
4739 // CHECK-ERROR: error: invalid operand for instruction
4740 // CHECK-ERROR:        suqadd h0, s1
4741 // CHECK-ERROR:                   ^
4742 // CHECK-ERROR: error: invalid operand for instruction
4743 // CHECK-ERROR:        suqadd s0, d1
4744 // CHECK-ERROR:                   ^
4745 // CHECK-ERROR: error: invalid operand for instruction
4746 // CHECK-ERROR:        suqadd d0, b0
4747 // CHECK-ERROR:                   ^
4748
4749 //----------------------------------------------------------------------
4750 // Scalar Unsigned Saturating Accumulated of Signed Value
4751 //----------------------------------------------------------------------
4752
4753         usqadd b0, h1
4754         usqadd h0, s1
4755         usqadd s0, d1
4756         usqadd d0, b1
4757
4758 // CHECK-ERROR: error: invalid operand for instruction
4759 // CHECK-ERROR:        usqadd b0, h1
4760 // CHECK-ERROR:                   ^
4761 // CHECK-ERROR: error: invalid operand for instruction
4762 // CHECK-ERROR:        usqadd h0, s1
4763 // CHECK-ERROR:                   ^
4764 // CHECK-ERROR: error: invalid operand for instruction
4765 // CHECK-ERROR:        usqadd s0, d1
4766 // CHECK-ERROR:                   ^
4767 // CHECK-ERROR: error: invalid operand for instruction
4768 // CHECK-ERROR:        usqadd d0, b1
4769 // CHECK-ERROR:                   ^
4770
4771 //----------------------------------------------------------------------
4772 // Scalar Absolute Value
4773 //----------------------------------------------------------------------
4774
4775     abs d29, s24
4776
4777 // CHECK-ERROR: error: invalid operand for instruction
4778 // CHECK-ERROR:        abs d29, s24
4779 // CHECK-ERROR:                 ^
4780
4781 //----------------------------------------------------------------------
4782 // Scalar Negate
4783 //----------------------------------------------------------------------
4784
4785     neg d29, s24
4786
4787 // CHECK-ERROR: error: invalid operand for instruction
4788 // CHECK-ERROR:        neg d29, s24
4789 // CHECK-ERROR:                 ^
4790
4791 //----------------------------------------------------------------------
4792 // Signed Saturating Doubling Multiply-Add Long
4793 //----------------------------------------------------------------------
4794
4795     sqdmlal s17, h27, s12
4796     sqdmlal d19, s24, d12
4797
4798 // CHECK-ERROR: error: invalid operand for instruction
4799 // CHECK-ERROR:        sqdmlal s17, h27, s12
4800 // CHECK-ERROR:                          ^
4801 // CHECK-ERROR: error: too few operands for instruction
4802 // CHECK-ERROR:        sqdmlal d19, s24, d12
4803 // CHECK-ERROR:                          ^
4804
4805 //----------------------------------------------------------------------
4806 // Signed Saturating Doubling Multiply-Subtract Long
4807 //----------------------------------------------------------------------
4808
4809     sqdmlsl s14, h12, s25
4810     sqdmlsl d12, s23, d13
4811
4812 // CHECK-ERROR: error: invalid operand for instruction
4813 // CHECK-ERROR:        sqdmlsl s14, h12, s25
4814 // CHECK-ERROR:                          ^
4815 // CHECK-ERROR: error: too few operands for instruction
4816 // CHECK-ERROR:        sqdmlsl d12, s23, d13
4817 // CHECK-ERROR:                          ^
4818
4819 //----------------------------------------------------------------------
4820 // Signed Saturating Doubling Multiply Long
4821 //----------------------------------------------------------------------
4822
4823     sqdmull s12, h22, s12
4824     sqdmull d15, s22, d12
4825
4826 // CHECK-ERROR: error: invalid operand for instruction
4827 // CHECK-ERROR:        sqdmull s12, h22, s12
4828 // CHECK-ERROR:                          ^
4829 // CHECK-ERROR: error: too few operands for instruction
4830 // CHECK-ERROR:        sqdmull d15, s22, d12
4831 // CHECK-ERROR:                          ^
4832
4833 //----------------------------------------------------------------------
4834 // Scalar Signed Saturating Extract Unsigned Narrow
4835 //----------------------------------------------------------------------
4836
4837     sqxtun b19, b14
4838     sqxtun h21, h15
4839     sqxtun s20, s12
4840
4841 // CHECK-ERROR: error: invalid operand for instruction
4842 // CHECK-ERROR:        sqxtun b19, b14
4843 // CHECK-ERROR:                    ^
4844 // CHECK-ERROR: error: invalid operand for instruction
4845 // CHECK-ERROR:        sqxtun h21, h15
4846 // CHECK-ERROR:                    ^
4847 // CHECK-ERROR: error: invalid operand for instruction
4848 // CHECK-ERROR:        sqxtun s20, s12
4849 // CHECK-ERROR:                    ^
4850
4851 //----------------------------------------------------------------------
4852 // Scalar Signed Saturating Extract Signed Narrow
4853 //----------------------------------------------------------------------
4854
4855     sqxtn b18, b18
4856     sqxtn h20, h17
4857     sqxtn s19, s14
4858
4859 // CHECK-ERROR: error: invalid operand for instruction
4860 // CHECK-ERROR:        sqxtn b18, b18
4861 // CHECK-ERROR:                   ^
4862 // CHECK-ERROR: error: invalid operand for instruction
4863 // CHECK-ERROR:        sqxtn h20, h17
4864 // CHECK-ERROR:                   ^
4865 // CHECK-ERROR: error: invalid operand for instruction
4866 // CHECK-ERROR:        sqxtn s19, s14
4867 // CHECK-ERROR:                   ^
4868
4869
4870 //----------------------------------------------------------------------
4871 // Scalar Unsigned Saturating Extract Narrow
4872 //----------------------------------------------------------------------
4873
4874     uqxtn b18, b18
4875     uqxtn h20, h17
4876     uqxtn s19, s14
4877
4878 // CHECK-ERROR: error: invalid operand for instruction
4879 // CHECK-ERROR:        uqxtn b18, b18
4880 // CHECK-ERROR:                   ^
4881 // CHECK-ERROR: error: invalid operand for instruction
4882 // CHECK-ERROR:        uqxtn h20, h17
4883 // CHECK-ERROR:                   ^
4884 // CHECK-ERROR: error: invalid operand for instruction
4885 // CHECK-ERROR:        uqxtn s19, s14
4886 // CHECK-ERROR:                   ^
4887
4888 //----------------------------------------------------------------------
4889 // Scalar Signed Shift Right (Immediate)
4890 //----------------------------------------------------------------------
4891         sshr d15, d16, #99
4892
4893 // CHECK-ERROR: error: expected integer in range [1, 64]
4894 // CHECK-ERROR:        sshr d15, d16, #99
4895 // CHECK-ERROR:                       ^
4896
4897         sshr d15, s16, #31
4898
4899 // CHECK-ERROR: error: invalid operand for instruction
4900 // CHECK-ERROR:        sshr d15, s16, #31
4901 // CHECK-ERROR:                  ^
4902
4903 //----------------------------------------------------------------------
4904 // Scalar Unsigned Shift Right (Immediate)
4905 //----------------------------------------------------------------------
4906
4907         ushr d10, d17, #99
4908
4909 // CHECK-ERROR: error: expected integer in range [1, 64]
4910 // CHECK-ERROR:        ushr d10, d17, #99
4911 // CHECK-ERROR:                       ^
4912
4913 //----------------------------------------------------------------------
4914 // Scalar Signed Rounding Shift Right (Immediate)
4915 //----------------------------------------------------------------------
4916
4917         srshr d19, d18, #99
4918
4919 // CHECK-ERROR: error: expected integer in range [1, 64]
4920 // CHECK-ERROR:        srshr d19, d18, #99
4921 // CHECK-ERROR:                        ^
4922
4923 //----------------------------------------------------------------------
4924 // Scalar Unigned Rounding Shift Right (Immediate)
4925 //----------------------------------------------------------------------
4926
4927         urshr d20, d23, #99
4928
4929 // CHECK-ERROR: error: expected integer in range [1, 64]
4930 // CHECK-ERROR:        urshr d20, d23, #99
4931 // CHECK-ERROR:                        ^
4932
4933 //----------------------------------------------------------------------
4934 // Scalar Signed Shift Right and Accumulate (Immediate)
4935 //----------------------------------------------------------------------
4936
4937         ssra d18, d12, #99
4938
4939 // CHECK-ERROR: error: expected integer in range [1, 64]
4940 // CHECK-ERROR:        ssra d18, d12, #99
4941 // CHECK-ERROR:                       ^
4942
4943 //----------------------------------------------------------------------
4944 // Scalar Unsigned Shift Right and Accumulate (Immediate)
4945 //----------------------------------------------------------------------
4946
4947         usra d20, d13, #99
4948
4949 // CHECK-ERROR: error: expected integer in range [1, 64]
4950 // CHECK-ERROR:        usra d20, d13, #99
4951 // CHECK-ERROR:                       ^
4952
4953 //----------------------------------------------------------------------
4954 // Scalar Signed Rounding Shift Right and Accumulate (Immediate)
4955 //----------------------------------------------------------------------
4956
4957         srsra d15, d11, #99
4958
4959 // CHECK-ERROR: error: expected integer in range [1, 64]
4960 // CHECK-ERROR:        srsra d15, d11, #99
4961 // CHECK-ERROR:                        ^
4962
4963 //----------------------------------------------------------------------
4964 // Scalar Unsigned Rounding Shift Right and Accumulate (Immediate)
4965 //----------------------------------------------------------------------
4966
4967         ursra d18, d10, #99
4968
4969 // CHECK-ERROR: error: expected integer in range [1, 64]
4970 // CHECK-ERROR:        ursra d18, d10, #99
4971 // CHECK-ERROR:                        ^
4972
4973 //----------------------------------------------------------------------
4974 // Scalar Shift Left (Immediate)
4975 //----------------------------------------------------------------------
4976
4977         shl d7, d10, #99
4978
4979 // CHECK-ERROR: error: expected integer in range [0, 63]
4980 // CHECK-ERROR:        shl d7, d10, #99
4981 // CHECK-ERROR:                     ^
4982
4983         shl d7, s16, #31
4984         
4985 // CHECK-ERROR: error: invalid operand for instruction
4986 // CHECK-ERROR:        shl d7, s16, #31
4987 // CHECK-ERROR:                ^
4988
4989 //----------------------------------------------------------------------
4990 // Signed Saturating Shift Left (Immediate)
4991 //----------------------------------------------------------------------
4992
4993         sqshl b11, b19, #99
4994         sqshl h13, h18, #99
4995         sqshl s14, s17, #99
4996         sqshl d15, d16, #99
4997
4998 // CHECK-ERROR: error: expected integer in range [0, 7]
4999 // CHECK-ERROR:        sqshl b11, b19, #99
5000 // CHECK-ERROR:                        ^
5001 // CHECK-ERROR: error: expected integer in range [0, 15]
5002 // CHECK-ERROR:        sqshl h13, h18, #99
5003 // CHECK-ERROR:                        ^
5004 // CHECK-ERROR: error: expected integer in range [0, 31]
5005 // CHECK-ERROR:        sqshl s14, s17, #99
5006 // CHECK-ERROR:                        ^
5007 // CHECK-ERROR: error: expected integer in range [0, 63]
5008 // CHECK-ERROR:        sqshl d15, d16, #99
5009 // CHECK-ERROR:                        ^
5010
5011 //----------------------------------------------------------------------
5012 // Unsigned Saturating Shift Left (Immediate)
5013 //----------------------------------------------------------------------
5014
5015         uqshl b18, b15, #99
5016         uqshl h11, h18, #99
5017         uqshl s14, s19, #99
5018         uqshl d15, d12, #99
5019
5020 // CHECK-ERROR: error: expected integer in range [0, 7]
5021 // CHECK-ERROR:        uqshl b18, b15, #99
5022 // CHECK-ERROR:                        ^
5023 // CHECK-ERROR: error: expected integer in range [0, 15]
5024 // CHECK-ERROR:        uqshl h11, h18, #99
5025 // CHECK-ERROR:                        ^
5026 // CHECK-ERROR: error: expected integer in range [0, 31]
5027 // CHECK-ERROR:        uqshl s14, s19, #99
5028 // CHECK-ERROR:                        ^
5029 // CHECK-ERROR: error: expected integer in range [0, 63]
5030 // CHECK-ERROR:        uqshl d15, d12, #99
5031 // CHECK-ERROR:                        ^
5032
5033 //----------------------------------------------------------------------
5034 // Signed Saturating Shift Left Unsigned (Immediate)
5035 //----------------------------------------------------------------------
5036
5037         sqshlu b15, b18, #99
5038         sqshlu h19, h17, #99
5039         sqshlu s16, s14, #99
5040         sqshlu d11, d13, #99
5041
5042 // CHECK-ERROR: error: expected integer in range [0, 7]
5043 // CHECK-ERROR:        sqshlu  b15, b18, #99
5044 // CHECK-ERROR:                          ^
5045 // CHECK-ERROR: error: expected integer in range [0, 15]
5046 // CHECK-ERROR:        sqshlu  h19, h17, #99
5047 // CHECK-ERROR:                          ^
5048 // CHECK-ERROR: error: expected integer in range [0, 31]
5049 // CHECK-ERROR:        sqshlu  s16, s14, #99
5050 // CHECK-ERROR:                          ^
5051 // CHECK-ERROR: error: expected integer in range [0, 63]
5052 // CHECK-ERROR:        sqshlu  d11, d13, #99
5053 // CHECK-ERROR:                          ^
5054
5055 //----------------------------------------------------------------------
5056 // Shift Right And Insert (Immediate)
5057 //----------------------------------------------------------------------
5058
5059         sri d10, d12, #99
5060
5061 // CHECK-ERROR: error: expected integer in range [1, 64]
5062 // CHECK-ERROR:        sri d10, d12, #99
5063 // CHECK-ERROR:                      ^
5064
5065 //----------------------------------------------------------------------
5066 // Shift Left And Insert (Immediate)
5067 //----------------------------------------------------------------------
5068
5069         sli d10, d14, #99
5070
5071 // CHECK-ERROR: error: expected integer in range [0, 63]
5072 // CHECK-ERROR:        sli d10, d14, #99
5073 // CHECK-ERROR:                      ^
5074
5075 //----------------------------------------------------------------------
5076 // Signed Saturating Shift Right Narrow (Immediate)
5077 //----------------------------------------------------------------------
5078
5079         sqshrn b10, h15, #99
5080         sqshrn h17, s10, #99
5081         sqshrn s18, d10, #99
5082
5083 // CHECK-ERROR: error: expected integer in range [1, 8]
5084 // CHECK-ERROR:        sqshrn  b10, h15, #99
5085 // CHECK-ERROR:                          ^
5086 // CHECK-ERROR: error: expected integer in range [1, 16]
5087 // CHECK-ERROR:        sqshrn  h17, s10, #99
5088 // CHECK-ERROR:                          ^
5089 // CHECK-ERROR: error: expected integer in range [1, 32]
5090 // CHECK-ERROR:        sqshrn  s18, d10, #99
5091 // CHECK-ERROR:                          ^
5092         
5093 //----------------------------------------------------------------------
5094 // Unsigned Saturating Shift Right Narrow (Immediate)
5095 //----------------------------------------------------------------------
5096
5097         uqshrn b12, h10, #99
5098         uqshrn h10, s14, #99
5099         uqshrn s10, d12, #99
5100
5101 // CHECK-ERROR: error: expected integer in range [1, 8]
5102 // CHECK-ERROR:        uqshrn  b12, h10, #99
5103 // CHECK-ERROR:                          ^
5104 // CHECK-ERROR: error: expected integer in range [1, 16]
5105 // CHECK-ERROR:        uqshrn  h10, s14, #99
5106 // CHECK-ERROR:                          ^
5107 // CHECK-ERROR: error: expected integer in range [1, 32]
5108 // CHECK-ERROR:        uqshrn  s10, d12, #99
5109 // CHECK-ERROR:                          ^
5110         
5111 //----------------------------------------------------------------------
5112 // Signed Saturating Rounded Shift Right Narrow (Immediate)
5113 //----------------------------------------------------------------------
5114
5115         sqrshrn b10, h13, #99
5116         sqrshrn h15, s10, #99
5117         sqrshrn s15, d12, #99
5118
5119 // CHECK-ERROR: error: expected integer in range [1, 8]
5120 // CHECK-ERROR:        sqrshrn b10, h13, #99
5121 // CHECK-ERROR:                          ^
5122 // CHECK-ERROR: error: expected integer in range [1, 16]
5123 // CHECK-ERROR:        sqrshrn h15, s10, #99
5124 // CHECK-ERROR:                          ^
5125 // CHECK-ERROR: error: expected integer in range [1, 32]
5126 // CHECK-ERROR:        sqrshrn s15, d12, #99
5127 // CHECK-ERROR:                          ^
5128         
5129 //----------------------------------------------------------------------
5130 // Unsigned Saturating Rounded Shift Right Narrow (Immediate)
5131 //----------------------------------------------------------------------
5132
5133         uqrshrn b10, h12, #99
5134         uqrshrn h12, s10, #99
5135         uqrshrn s10, d10, #99
5136
5137 // CHECK-ERROR: error: expected integer in range [1, 8]
5138 // CHECK-ERROR:        uqrshrn b10, h12, #99
5139 // CHECK-ERROR:                          ^
5140 // CHECK-ERROR: error: expected integer in range [1, 16]
5141 // CHECK-ERROR:        uqrshrn h12, s10, #99
5142 // CHECK-ERROR:                          ^
5143 // CHECK-ERROR: error: expected integer in range [1, 32]
5144 // CHECK-ERROR:        uqrshrn s10, d10, #99
5145 // CHECK-ERROR:                          ^
5146
5147 //----------------------------------------------------------------------
5148 // Signed Saturating Shift Right Unsigned Narrow (Immediate)
5149 //----------------------------------------------------------------------
5150
5151         sqshrun b15, h10, #99
5152         sqshrun h20, s14, #99
5153         sqshrun s10, d15, #99
5154
5155 // CHECK-ERROR: error: expected integer in range [1, 8]
5156 // CHECK-ERROR:        sqshrun b15, h10, #99
5157 // CHECK-ERROR:                          ^
5158 // CHECK-ERROR: error: expected integer in range [1, 16]
5159 // CHECK-ERROR:        sqshrun h20, s14, #99
5160 // CHECK-ERROR:                          ^
5161 // CHECK-ERROR: error: expected integer in range [1, 32]
5162 // CHECK-ERROR:        sqshrun s10, d15, #99
5163 // CHECK-ERROR:                          ^
5164
5165 //----------------------------------------------------------------------
5166 // Signed Saturating Rounded Shift Right Unsigned Narrow (Immediate)
5167 //----------------------------------------------------------------------
5168
5169         sqrshrun b17, h10, #99
5170         sqrshrun h10, s13, #99
5171         sqrshrun s22, d16, #99
5172
5173 // CHECK-ERROR: error: expected integer in range [1, 8]
5174 // CHECK-ERROR:        sqrshrun b17, h10, #99
5175 // CHECK-ERROR:                           ^
5176 // CHECK-ERROR: error: expected integer in range [1, 16]
5177 // CHECK-ERROR:        sqrshrun h10, s13, #99
5178 // CHECK-ERROR:                           ^
5179 // CHECK-ERROR: error: expected integer in range [1, 32]
5180 // CHECK-ERROR:        sqrshrun s22, d16, #99
5181 // CHECK-ERROR:                           ^
5182
5183 //----------------------------------------------------------------------
5184 // Scalar Signed Fixed-point Convert To Floating-Point (Immediate)
5185 //----------------------------------------------------------------------
5186
5187     scvtf s22, s13, #0
5188     scvtf s22, s13, #33
5189     scvtf d21, d12, #65
5190     scvtf d21, s12, #31
5191         
5192 // CHECK-ERROR: error: expected integer in range [1, 32]
5193 // CHECK-ERROR:        scvtf s22, s13, #0
5194 // CHECK-ERROR:                        ^
5195 // CHECK-ERROR: error: expected integer in range [1, 32]
5196 // CHECK-ERROR:        scvtf s22, s13, #33
5197 // CHECK-ERROR:                        ^
5198 // CHECK-ERROR: error: expected integer in range [1, 64]
5199 // CHECK-ERROR:        scvtf d21, d12, #65
5200 // CHECK-ERROR:                        ^
5201 // CHECK-ERROR: error: invalid operand for instruction
5202 // CHECK-ERROR:        scvtf d21, s12, #31
5203 // CHECK-ERROR:                   ^
5204
5205 //----------------------------------------------------------------------
5206 // Scalar Unsigned Fixed-point Convert To Floating-Point (Immediate)
5207 //----------------------------------------------------------------------
5208
5209     ucvtf s22, s13, #34
5210     ucvtf d21, d14, #65
5211     ucvtf d21, s14, #64
5212         
5213 // CHECK-ERROR: error: expected integer in range [1, 32]
5214 // CHECK-ERROR:        ucvtf s22, s13, #34
5215 // CHECK-ERROR:                        ^
5216 // CHECK-ERROR: error: expected integer in range [1, 64]
5217 // CHECK-ERROR:        ucvtf d21, d14, #65
5218 // CHECK-ERROR:                        ^
5219 // CHECK-ERROR: error: invalid operand for instruction
5220 // CHECK-ERROR:        ucvtf d21, s14, #64
5221 // CHECK-ERROR:                   ^
5222
5223 //------------------------------------------------------------------------------
5224 // Element reverse
5225 //------------------------------------------------------------------------------
5226          rev64 v6.2d, v8.2d
5227          rev32 v30.2s, v31.2s
5228          rev32 v30.4s, v31.4s
5229          rev32 v30.2d, v31.2d
5230          rev16 v21.4h, v1.4h
5231          rev16 v21.8h, v1.8h
5232          rev16 v21.2s, v1.2s
5233          rev16 v21.4s, v1.4s
5234          rev16 v21.2d, v1.2d
5235
5236 // CHECK-ERROR: error: invalid operand for instruction
5237 // CHECK-ERROR:         rev64 v6.2d, v8.2d
5238 // CHECK-ERROR:                  ^
5239 // CHECK-ERROR: error: invalid operand for instruction
5240 // CHECK-ERROR:         rev32 v30.2s, v31.2s
5241 // CHECK-ERROR:                   ^
5242 // CHECK-ERROR: error: invalid operand for instruction
5243 // CHECK-ERROR:         rev32 v30.4s, v31.4s
5244 // CHECK-ERROR:                   ^
5245 // CHECK-ERROR: error: invalid operand for instruction
5246 // CHECK-ERROR:         rev32 v30.2d, v31.2d
5247 // CHECK-ERROR:                   ^
5248 // CHECK-ERROR: error: invalid operand for instruction
5249 // CHECK-ERROR:         rev16 v21.4h, v1.4h
5250 // CHECK-ERROR:                   ^
5251 // CHECK-ERROR: error: invalid operand for instruction
5252 // CHECK-ERROR:         rev16 v21.8h, v1.8h
5253 // CHECK-ERROR:                   ^
5254 // CHECK-ERROR: error: invalid operand for instruction
5255 // CHECK-ERROR:         rev16 v21.2s, v1.2s
5256 // CHECK-ERROR:                   ^
5257 // CHECK-ERROR: error: invalid operand for instruction
5258 // CHECK-ERROR:         rev16 v21.4s, v1.4s
5259 // CHECK-ERROR:                   ^
5260 // CHECK-ERROR: error: invalid operand for instruction
5261 // CHECK-ERROR:         rev16 v21.2d, v1.2d
5262 // CHECK-ERROR:                   ^
5263
5264 //------------------------------------------------------------------------------
5265 // Signed integer pairwise add long
5266 //------------------------------------------------------------------------------
5267
5268          saddlp v3.8h, v21.8h
5269          saddlp v8.8b, v5.8b
5270          saddlp v9.8h, v1.4s
5271          saddlp v0.4s, v1.2d
5272
5273 // CHECK-ERROR: error: invalid operand for instruction
5274 // CHECK-ERROR:         saddlp v3.8h, v21.8h
5275 // CHECK-ERROR:                           ^
5276 // CHECK-ERROR: error: invalid operand for instruction
5277 // CHECK-ERROR:         saddlp v8.8b, v5.8b
5278 // CHECK-ERROR:                   ^
5279 // CHECK-ERROR: error: invalid operand for instruction
5280 // CHECK-ERROR:         saddlp v9.8h, v1.4s
5281 // CHECK-ERROR:                          ^
5282 // CHECK-ERROR: error: invalid operand for instruction
5283 // CHECK-ERROR:         saddlp v0.4s, v1.2d
5284 // CHECK-ERROR:                          ^
5285
5286 //------------------------------------------------------------------------------
5287 // Unsigned integer pairwise add long
5288 //------------------------------------------------------------------------------
5289
5290          uaddlp v3.8h, v21.8h
5291          uaddlp v8.8b, v5.8b
5292          uaddlp v9.8h, v1.4s
5293          uaddlp v0.4s, v1.2d
5294
5295 // CHECK-ERROR: error: invalid operand for instruction
5296 // CHECK-ERROR:         uaddlp v3.8h, v21.8h
5297 // CHECK-ERROR:                           ^
5298 // CHECK-ERROR: error: invalid operand for instruction
5299 // CHECK-ERROR:         uaddlp v8.8b, v5.8b
5300 // CHECK-ERROR:                   ^
5301 // CHECK-ERROR: error: invalid operand for instruction
5302 // CHECK-ERROR:         uaddlp v9.8h, v1.4s
5303 // CHECK-ERROR:                          ^
5304 // CHECK-ERROR: error: invalid operand for instruction
5305 // CHECK-ERROR:         uaddlp v0.4s, v1.2d
5306 // CHECK-ERROR:                          ^
5307
5308 //------------------------------------------------------------------------------
5309 // Signed integer pairwise add and accumulate long
5310 //------------------------------------------------------------------------------
5311
5312          sadalp v3.16b, v21.16b
5313          sadalp v8.4h, v5.4h
5314          sadalp v9.4s, v1.4s
5315          sadalp v0.4h, v1.2s
5316          sadalp v12.2d, v4.8h
5317
5318 // CHECK-ERROR: error: invalid operand for instruction
5319 // CHECK-ERROR:         sadalp v3.16b, v21.16b
5320 // CHECK-ERROR:                   ^
5321 // CHECK-ERROR: error: invalid operand for instruction
5322 // CHECK-ERROR:         sadalp v8.4h, v5.4h
5323 // CHECK-ERROR:                          ^
5324 // CHECK-ERROR: error: invalid operand for instruction
5325 // CHECK-ERROR:         sadalp v9.4s, v1.4s
5326 // CHECK-ERROR:                          ^
5327 // CHECK-ERROR: error: invalid operand for instruction
5328 // CHECK-ERROR:         sadalp v0.4h, v1.2s
5329 // CHECK-ERROR:                          ^
5330 // CHECK-ERROR: error: invalid operand for instruction
5331 // CHECK-ERROR:         sadalp v12.2d, v4.8h
5332 // CHECK-ERROR:                           ^
5333
5334 //------------------------------------------------------------------------------
5335 // Unsigned integer pairwise add and accumulate long
5336 //------------------------------------------------------------------------------
5337
5338          uadalp v3.16b, v21.16b
5339          uadalp v8.4h, v5.4h
5340          uadalp v9.4s, v1.4s
5341          uadalp v0.4h, v1.2s
5342          uadalp v12.2d, v4.8h
5343
5344 // CHECK-ERROR: error: invalid operand for instruction
5345 // CHECK-ERROR:         uadalp v3.16b, v21.16b
5346 // CHECK-ERROR:                   ^
5347 // CHECK-ERROR: error: invalid operand for instruction
5348 // CHECK-ERROR:         uadalp v8.4h, v5.4h
5349 // CHECK-ERROR:                          ^
5350 // CHECK-ERROR: error: invalid operand for instruction
5351 // CHECK-ERROR:         uadalp v9.4s, v1.4s
5352 // CHECK-ERROR:                          ^
5353 // CHECK-ERROR: error: invalid operand for instruction
5354 // CHECK-ERROR:         uadalp v0.4h, v1.2s
5355 // CHECK-ERROR:                          ^
5356 // CHECK-ERROR: error: invalid operand for instruction
5357 // CHECK-ERROR:         uadalp v12.2d, v4.8h
5358 // CHECK-ERROR:                           ^
5359
5360 //------------------------------------------------------------------------------
5361 // Signed integer saturating accumulate of unsigned value
5362 //------------------------------------------------------------------------------
5363
5364          suqadd v0.16b, v31.8b
5365          suqadd v1.8b, v9.8h
5366          suqadd v13.4h, v21.4s
5367          suqadd v4.2s, v0.2d
5368
5369 // CHECK-ERROR: error: invalid operand for instruction
5370 // CHECK-ERROR:         suqadd v0.16b, v31.8b
5371 // CHECK-ERROR:                        ^
5372 // CHECK-ERROR: error: invalid operand for instruction
5373 // CHECK-ERROR:         suqadd v1.8b, v9.8h
5374 // CHECK-ERROR:                       ^
5375 // CHECK-ERROR: error: invalid operand for instruction
5376 // CHECK-ERROR:         suqadd v13.4h, v21.4s
5377 // CHECK-ERROR:                        ^
5378 // CHECK-ERROR: error: invalid operand for instruction
5379 // CHECK-ERROR:         suqadd v4.2s, v0.2d
5380 // CHECK-ERROR:                       ^
5381
5382 //------------------------------------------------------------------------------
5383 // Unsigned integer saturating accumulate of signed value
5384 //------------------------------------------------------------------------------
5385
5386          usqadd v0.16b, v31.8b
5387          usqadd v2.8h, v4.4h
5388          usqadd v13.4h, v21.4s
5389          usqadd v4.2s, v0.2d
5390
5391 // CHECK-ERROR: error: invalid operand for instruction
5392 // CHECK-ERROR:         usqadd v0.16b, v31.8b
5393 // CHECK-ERROR:                        ^
5394 // CHECK-ERROR: error: invalid operand for instruction
5395 // CHECK-ERROR:         usqadd v2.8h, v4.4h
5396 // CHECK-ERROR:                       ^
5397 // CHECK-ERROR: error: invalid operand for instruction
5398 // CHECK-ERROR:         usqadd v13.4h, v21.4s
5399 // CHECK-ERROR:                        ^
5400 // CHECK-ERROR: error: invalid operand for instruction
5401 // CHECK-ERROR:         usqadd v4.2s, v0.2d
5402 // CHECK-ERROR:                       ^
5403
5404 //------------------------------------------------------------------------------
5405 // Integer saturating absolute
5406 //------------------------------------------------------------------------------
5407
5408          sqabs v0.16b, v31.8b
5409          sqabs v2.8h, v4.4h
5410          sqabs v6.4s, v8.2s
5411          sqabs v6.2d, v8.2s
5412
5413 // CHECK-ERROR: error: invalid operand for instruction
5414 // CHECK-ERROR:         sqabs v0.16b, v31.8b
5415 // CHECK-ERROR:                       ^
5416 // CHECK-ERROR: error: invalid operand for instruction
5417 // CHECK-ERROR:         sqabs v2.8h, v4.4h
5418 // CHECK-ERROR:                      ^
5419 // CHECK-ERROR: error: invalid operand for instruction
5420 // CHECK-ERROR:         sqabs v6.4s, v8.2s
5421 // CHECK-ERROR:                      ^
5422 // CHECK-ERROR: error: invalid operand for instruction
5423 // CHECK-ERROR:         sqabs v6.2d, v8.2s
5424 // CHECK-ERROR:                      ^
5425
5426 //------------------------------------------------------------------------------
5427 // Signed integer saturating negate
5428 //------------------------------------------------------------------------------
5429
5430          sqneg v0.16b, v31.8b
5431          sqneg v2.8h, v4.4h
5432          sqneg v6.4s, v8.2s
5433          sqneg v6.2d, v8.2s
5434
5435 // CHECK-ERROR: error: invalid operand for instruction
5436 // CHECK-ERROR:         sqneg v0.16b, v31.8b
5437 // CHECK-ERROR:                       ^
5438 // CHECK-ERROR: error: invalid operand for instruction
5439 // CHECK-ERROR:         sqneg v2.8h, v4.4h
5440 // CHECK-ERROR:                      ^
5441 // CHECK-ERROR: error: invalid operand for instruction
5442 // CHECK-ERROR:         sqneg v6.4s, v8.2s
5443 // CHECK-ERROR:                      ^
5444 // CHECK-ERROR: error: invalid operand for instruction
5445 // CHECK-ERROR:         sqneg v6.2d, v8.2s
5446 // CHECK-ERROR:                      ^
5447
5448 //------------------------------------------------------------------------------
5449 // Integer absolute
5450 //------------------------------------------------------------------------------
5451
5452          abs v0.16b, v31.8b
5453          abs v2.8h, v4.4h
5454          abs v6.4s, v8.2s
5455          abs v6.2d, v8.2s
5456
5457 // CHECK-ERROR: error: invalid operand for instruction
5458 // CHECK-ERROR:         abs v0.16b, v31.8b
5459 // CHECK-ERROR:                     ^
5460 // CHECK-ERROR: error: invalid operand for instruction
5461 // CHECK-ERROR:         abs v2.8h, v4.4h
5462 // CHECK-ERROR:                    ^
5463 // CHECK-ERROR: error: invalid operand for instruction
5464 // CHECK-ERROR:         abs v6.4s, v8.2s
5465 // CHECK-ERROR:                    ^
5466 // CHECK-ERROR: error: invalid operand for instruction
5467 // CHECK-ERROR:         abs v6.2d, v8.2s
5468 // CHECK-ERROR:                    ^
5469
5470 //------------------------------------------------------------------------------
5471 // Integer count leading sign bits
5472 //------------------------------------------------------------------------------
5473
5474          cls v0.2d, v31.2d
5475
5476 // CHECK-ERROR: error: invalid operand for instruction
5477 // CHECK-ERROR:         cls v0.2d, v31.2d
5478 // CHECK-ERROR:                ^
5479
5480 //------------------------------------------------------------------------------
5481 // Integer count leading zeros
5482 //------------------------------------------------------------------------------
5483
5484          clz v0.2d, v31.2d
5485
5486 // CHECK-ERROR: error: invalid operand for instruction
5487 // CHECK-ERROR:         clz v0.2d, v31.2d
5488 // CHECK-ERROR:                ^
5489
5490 //------------------------------------------------------------------------------
5491 // Population count
5492 //------------------------------------------------------------------------------
5493
5494          cnt v2.8h, v4.8h
5495          cnt v6.4s, v8.4s
5496          cnt v6.2d, v8.2d
5497          cnt v13.4h, v21.4h
5498          cnt v4.2s, v0.2s
5499
5500 // CHECK-ERROR: error: invalid operand for instruction
5501 // CHECK-ERROR:         cnt v2.8h, v4.8h
5502 // CHECK-ERROR:                ^
5503 // CHECK-ERROR: error: invalid operand for instruction
5504 // CHECK-ERROR:         cnt v6.4s, v8.4s
5505 // CHECK-ERROR:                ^
5506 // CHECK-ERROR: error: invalid operand for instruction
5507 // CHECK-ERROR:         cnt v6.2d, v8.2d
5508 // CHECK-ERROR:                ^
5509 // CHECK-ERROR: error: invalid operand for instruction
5510 // CHECK-ERROR:         cnt v13.4h, v21.4h
5511 // CHECK-ERROR:                 ^
5512 // CHECK-ERROR: error: invalid operand for instruction
5513 // CHECK-ERROR:         cnt v4.2s, v0.2s
5514 // CHECK-ERROR:                ^
5515
5516
5517 //------------------------------------------------------------------------------
5518 // Bitwise NOT
5519 //------------------------------------------------------------------------------
5520
5521          not v2.8h, v4.8h
5522          not v6.4s, v8.4s
5523          not v6.2d, v8.2d
5524          not v13.4h, v21.4h
5525          not v4.2s, v0.2s
5526
5527 // CHECK-ERROR: error: invalid operand for instruction
5528 // CHECK-ERROR:         not v2.8h, v4.8h
5529 // CHECK-ERROR:                ^
5530 // CHECK-ERROR: error: invalid operand for instruction
5531 // CHECK-ERROR:         not v6.4s, v8.4s
5532 // CHECK-ERROR:                ^
5533 // CHECK-ERROR: error: invalid operand for instruction
5534 // CHECK-ERROR:         not v6.2d, v8.2d
5535 // CHECK-ERROR:                ^
5536 // CHECK-ERROR: error: invalid operand for instruction
5537 // CHECK-ERROR:         not v13.4h, v21.4h
5538 // CHECK-ERROR:                 ^
5539 // CHECK-ERROR: error: invalid operand for instruction
5540 // CHECK-ERROR:         not v4.2s, v0.2s
5541 // CHECK-ERROR:                ^
5542
5543 //------------------------------------------------------------------------------
5544 // Bitwise reverse
5545 //------------------------------------------------------------------------------
5546
5547          rbit v2.8h, v4.8h
5548          rbit v6.4s, v8.4s
5549          rbit v6.2d, v8.2d
5550          rbit v13.4h, v21.4h
5551          rbit v4.2s, v0.2s
5552
5553 // CHECK-ERROR: error: invalid operand for instruction
5554 // CHECK-ERROR:         rbit v2.8h, v4.8h
5555 // CHECK-ERROR:                 ^
5556 // CHECK-ERROR: error: invalid operand for instruction
5557 // CHECK-ERROR:         rbit v6.4s, v8.4s
5558 // CHECK-ERROR:                 ^
5559 // CHECK-ERROR: error: invalid operand for instruction
5560 // CHECK-ERROR:         rbit v6.2d, v8.2d
5561 // CHECK-ERROR:                 ^
5562 // CHECK-ERROR: error: invalid operand for instruction
5563 // CHECK-ERROR:         rbit v13.4h, v21.4h
5564 // CHECK-ERROR:                  ^
5565 // CHECK-ERROR: error: invalid operand for instruction
5566 // CHECK-ERROR:         rbit v4.2s, v0.2s
5567 // CHECK-ERROR:                 ^
5568
5569 //------------------------------------------------------------------------------
5570 // Floating-point absolute
5571 //------------------------------------------------------------------------------
5572
5573          fabs v0.16b, v31.16b
5574          fabs v2.8h, v4.8h
5575          fabs v1.8b, v9.8b
5576          fabs v13.4h, v21.4h
5577
5578 // CHECK-ERROR: error: invalid operand for instruction
5579 // CHECK-ERROR:         fabs v0.16b, v31.16b
5580 // CHECK-ERROR:                 ^
5581 // CHECK-ERROR: error: invalid operand for instruction
5582 // CHECK-ERROR:         fabs v2.8h, v4.8h
5583 // CHECK-ERROR:                 ^
5584 // CHECK-ERROR: error: invalid operand for instruction
5585 // CHECK-ERROR:         fabs v1.8b, v9.8b
5586 // CHECK-ERROR:                 ^
5587 // CHECK-ERROR: error: invalid operand for instruction
5588 // CHECK-ERROR:         fabs v13.4h, v21.4h
5589 // CHECK-ERROR:                  ^
5590
5591 //------------------------------------------------------------------------------
5592 // Floating-point negate
5593 //------------------------------------------------------------------------------
5594
5595          fneg v0.16b, v31.16b
5596          fneg v2.8h, v4.8h
5597          fneg v1.8b, v9.8b
5598          fneg v13.4h, v21.4h
5599
5600 // CHECK-ERROR: error: invalid operand for instruction
5601 // CHECK-ERROR:         fneg v0.16b, v31.16b
5602 // CHECK-ERROR:                 ^
5603 // CHECK-ERROR: error: invalid operand for instruction
5604 // CHECK-ERROR:         fneg v2.8h, v4.8h
5605 // CHECK-ERROR:                 ^
5606 // CHECK-ERROR: error: invalid operand for instruction
5607 // CHECK-ERROR:         fneg v1.8b, v9.8b
5608 // CHECK-ERROR:                 ^
5609 // CHECK-ERROR: error: invalid operand for instruction
5610 // CHECK-ERROR:         fneg v13.4h, v21.4h
5611 // CHECK-ERROR:                  ^
5612
5613 //------------------------------------------------------------------------------
5614 // Integer extract and narrow
5615 //------------------------------------------------------------------------------
5616
5617          xtn v0.16b, v31.8h
5618          xtn v2.8h, v4.4s
5619          xtn v6.4s, v8.2d
5620          xtn2 v1.8b, v9.8h
5621          xtn2 v13.4h, v21.4s
5622          xtn2 v4.2s, v0.2d
5623
5624 // CHECK-ERROR: error: invalid operand for instruction
5625 // CHECK-ERROR:         xtn v0.16b, v31.8h
5626 // CHECK-ERROR:             ^
5627 // CHECK-ERROR: error: invalid operand for instruction
5628 // CHECK-ERROR:         xtn v2.8h, v4.4s
5629 // CHECK-ERROR:             ^
5630 // CHECK-ERROR: error: invalid operand for instruction
5631 // CHECK-ERROR:         xtn v6.4s, v8.2d
5632 // CHECK-ERROR:             ^
5633 // CHECK-ERROR: error: invalid operand for instruction
5634 // CHECK-ERROR:         xtn2 v1.8b, v9.8h
5635 // CHECK-ERROR:              ^
5636 // CHECK-ERROR: error: invalid operand for instruction
5637 // CHECK-ERROR:         xtn2 v13.4h, v21.4s
5638 // CHECK-ERROR:              ^
5639 // CHECK-ERROR: error: invalid operand for instruction
5640 // CHECK-ERROR:         xtn2 v4.2s, v0.2d
5641 // CHECK-ERROR:              ^
5642
5643 //------------------------------------------------------------------------------
5644 // Signed integer saturating extract and unsigned narrow
5645 //------------------------------------------------------------------------------
5646
5647          sqxtun v0.16b, v31.8h
5648          sqxtun v2.8h, v4.4s
5649          sqxtun v6.4s, v8.2d
5650          sqxtun2 v1.8b, v9.8h
5651          sqxtun2 v13.4h, v21.4s
5652          sqxtun2 v4.2s, v0.2d
5653
5654 // CHECK-ERROR: error: invalid operand for instruction
5655 // CHECK-ERROR:         sqxtun v0.16b, v31.8h
5656 // CHECK-ERROR:                ^
5657 // CHECK-ERROR: error: invalid operand for instruction
5658 // CHECK-ERROR:         sqxtun v2.8h, v4.4s
5659 // CHECK-ERROR:                ^
5660 // CHECK-ERROR: error: invalid operand for instruction
5661 // CHECK-ERROR:         sqxtun v6.4s, v8.2d
5662 // CHECK-ERROR:                ^
5663 // CHECK-ERROR: error: invalid operand for instruction
5664 // CHECK-ERROR:         sqxtun2 v1.8b, v9.8h
5665 // CHECK-ERROR:                 ^
5666 // CHECK-ERROR: error: invalid operand for instruction
5667 // CHECK-ERROR:         sqxtun2 v13.4h, v21.4s
5668 // CHECK-ERROR:                 ^
5669 // CHECK-ERROR: error: invalid operand for instruction
5670 // CHECK-ERROR:         sqxtun2 v4.2s, v0.2d
5671 // CHECK-ERROR:                 ^
5672
5673 //------------------------------------------------------------------------------
5674 // Signed integer saturating extract and narrow
5675 //------------------------------------------------------------------------------
5676
5677          sqxtn v0.16b, v31.8h
5678          sqxtn v2.8h, v4.4s
5679          sqxtn v6.4s, v8.2d
5680          sqxtn2 v1.8b, v9.8h
5681          sqxtn2 v13.4h, v21.4s
5682          sqxtn2 v4.2s, v0.2d
5683
5684 // CHECK-ERROR: error: invalid operand for instruction
5685 // CHECK-ERROR:         sqxtn v0.16b, v31.8h
5686 // CHECK-ERROR:               ^
5687 // CHECK-ERROR: error: invalid operand for instruction
5688 // CHECK-ERROR:         sqxtn v2.8h, v4.4s
5689 // CHECK-ERROR:               ^
5690 // CHECK-ERROR: error: invalid operand for instruction
5691 // CHECK-ERROR:         sqxtn v6.4s, v8.2d
5692 // CHECK-ERROR:               ^
5693 // CHECK-ERROR: error: invalid operand for instruction
5694 // CHECK-ERROR:         sqxtn2 v1.8b, v9.8h
5695 // CHECK-ERROR:                ^
5696 // CHECK-ERROR: error: invalid operand for instruction
5697 // CHECK-ERROR:         sqxtn2 v13.4h, v21.4s
5698 // CHECK-ERROR:                ^
5699 // CHECK-ERROR: error: invalid operand for instruction
5700 // CHECK-ERROR:         sqxtn2 v4.2s, v0.2d
5701 // CHECK-ERROR:                ^
5702
5703 //------------------------------------------------------------------------------
5704 // Unsigned integer saturating extract and narrow
5705 //------------------------------------------------------------------------------
5706
5707          uqxtn v0.16b, v31.8h
5708          uqxtn v2.8h, v4.4s
5709          uqxtn v6.4s, v8.2d
5710          uqxtn2 v1.8b, v9.8h
5711          uqxtn2 v13.4h, v21.4s
5712          uqxtn2 v4.2s, v0.2d
5713
5714 // CHECK-ERROR: error: invalid operand for instruction
5715 // CHECK-ERROR:         uqxtn v0.16b, v31.8h
5716 // CHECK-ERROR:               ^
5717 // CHECK-ERROR: error: invalid operand for instruction
5718 // CHECK-ERROR:         uqxtn v2.8h, v4.4s
5719 // CHECK-ERROR:               ^
5720 // CHECK-ERROR: error: invalid operand for instruction
5721 // CHECK-ERROR:         uqxtn v6.4s, v8.2d
5722 // CHECK-ERROR:               ^
5723 // CHECK-ERROR: error: invalid operand for instruction
5724 // CHECK-ERROR:         uqxtn2 v1.8b, v9.8h
5725 // CHECK-ERROR:                ^
5726 // CHECK-ERROR: error: invalid operand for instruction
5727 // CHECK-ERROR:         uqxtn2 v13.4h, v21.4s
5728 // CHECK-ERROR:                ^
5729 // CHECK-ERROR: error: invalid operand for instruction
5730 // CHECK-ERROR:         uqxtn2 v4.2s, v0.2d
5731 // CHECK-ERROR:                ^
5732
5733 //------------------------------------------------------------------------------
5734 // Integer shift left long
5735 //------------------------------------------------------------------------------
5736
5737          shll2 v2.8h, v4.16b, #7
5738          shll2 v6.4s, v8.8h, #15
5739          shll2 v6.2d, v8.4s, #31
5740          shll v2.8h, v4.16b, #8
5741          shll v6.4s, v8.8h, #16
5742          shll v6.2d, v8.4s, #32
5743          shll v2.8h, v4.8b, #8
5744          shll v6.4s, v8.4h, #16
5745          shll v6.2d, v8.2s, #32
5746          shll2 v2.8h, v4.8b, #5
5747          shll2 v6.4s, v8.4h, #14
5748          shll2 v6.2d, v8.2s, #1
5749
5750 // CHECK-ERROR: error: invalid operand for instruction
5751 // CHECK-ERROR:         shll2 v2.8h, v4.16b, #7
5752 // CHECK-ERROR:                              ^
5753 // CHECK-ERROR: error: invalid operand for instruction
5754 // CHECK-ERROR:         shll2 v6.4s, v8.8h, #15
5755 // CHECK-ERROR:                             ^
5756 // CHECK-ERROR: error: invalid operand for instruction
5757 // CHECK-ERROR:         shll2 v6.2d, v8.4s, #31
5758 // CHECK-ERROR:                             ^
5759 // CHECK-ERROR: error: invalid operand for instruction
5760 // CHECK-ERROR:         shll v2.8h, v4.16b, #8
5761 // CHECK-ERROR:                     ^
5762 // CHECK-ERROR: error: invalid operand for instruction
5763 // CHECK-ERROR:         shll v6.4s, v8.8h, #16
5764 // CHECK-ERROR:                     ^
5765 // CHECK-ERROR: error: invalid operand for instruction
5766 // CHECK-ERROR:         shll v6.2d, v8.4s, #32
5767 // CHECK-ERROR:                     ^
5768 // CHECK-ERROR: error: invalid operand for instruction
5769 // CHECK-ERROR:         shll2 v2.8h, v4.8b, #5
5770 // CHECK-ERROR:                      ^
5771 // CHECK-ERROR: error: invalid operand for instruction
5772 // CHECK-ERROR:         shll2 v6.4s, v8.4h, #14
5773 // CHECK-ERROR:                      ^
5774 // CHECK-ERROR: error: invalid operand for instruction
5775 // CHECK-ERROR:         shll2 v6.2d, v8.2s, #1
5776 // CHECK-ERROR:                      ^
5777
5778 //------------------------------------------------------------------------------
5779 // Floating-point convert downsize
5780 //------------------------------------------------------------------------------
5781
5782          fcvtn v2.8h, v4.4s
5783          fcvtn v6.4s, v8.2d
5784          fcvtn2 v13.4h, v21.4s
5785          fcvtn2 v4.2s, v0.2d
5786
5787 // CHECK-ERROR: error: invalid operand for instruction
5788 // CHECK-ERROR:         fcvtn v2.8h, v4.4s
5789 // CHECK-ERROR:               ^
5790 // CHECK-ERROR: error: invalid operand for instruction
5791 // CHECK-ERROR:         fcvtn v6.4s, v8.2d
5792 // CHECK-ERROR:               ^
5793 // CHECK-ERROR: error: invalid operand for instruction
5794 // CHECK-ERROR:         fcvtn2 v13.4h, v21.4s
5795 // CHECK-ERROR:                ^
5796 // CHECK-ERROR: error: invalid operand for instruction
5797 // CHECK-ERROR:         fcvtn2 v4.2s, v0.2d
5798 // CHECK-ERROR:                ^
5799
5800 //------------------------------------------------------------------------------
5801 // Floating-point convert downsize with inexact
5802 //------------------------------------------------------------------------------
5803
5804          fcvtxn v6.4s, v8.2d
5805          fcvtxn2 v4.2s, v0.2d
5806
5807 // CHECK-ERROR: error: invalid operand for instruction
5808 // CHECK-ERROR:         fcvtxn v6.4s, v8.2d
5809 // CHECK-ERROR:                ^
5810 // CHECK-ERROR: error: invalid operand for instruction
5811 // CHECK-ERROR:         fcvtxn2 v4.2s, v0.2d
5812 // CHECK-ERROR:                 ^
5813
5814 //------------------------------------------------------------------------------
5815 // Floating-point convert upsize
5816 //------------------------------------------------------------------------------
5817
5818          fcvtl2 v9.4s, v1.4h
5819          fcvtl2 v0.2d, v1.2s
5820          fcvtl v12.4s, v4.8h
5821          fcvtl v17.2d, v28.4s
5822
5823 // CHECK-ERROR: error: invalid operand for instruction
5824 // CHECK-ERROR:         fcvtl2 v9.4s, v1.4h
5825 // CHECK-ERROR:                       ^
5826 // CHECK-ERROR: error: invalid operand for instruction
5827 // CHECK-ERROR:         fcvtl2 v0.2d, v1.2s
5828 // CHECK-ERROR:                       ^
5829 // CHECK-ERROR: error: invalid operand for instruction
5830 // CHECK-ERROR:         fcvtl v12.4s, v4.8h
5831 // CHECK-ERROR:                       ^
5832 // CHECK-ERROR: error: invalid operand for instruction
5833 // CHECK-ERROR:         fcvtl v17.2d, v28.4s
5834 // CHECK-ERROR:                       ^
5835
5836 //------------------------------------------------------------------------------
5837 // Floating-point round to integral
5838 //------------------------------------------------------------------------------
5839
5840          frintn v0.16b, v31.16b
5841          frintn v2.8h, v4.8h
5842          frintn v1.8b, v9.8b
5843          frintn v13.4h, v21.4h
5844
5845          frinta v0.16b, v31.16b
5846          frinta v2.8h, v4.8h
5847          frinta v1.8b, v9.8b
5848          frinta v13.4h, v21.4h
5849
5850          frintp v0.16b, v31.16b
5851          frintp v2.8h, v4.8h
5852          frintp v1.8b, v9.8b
5853          frintp v13.4h, v21.4h
5854
5855          frintm v0.16b, v31.16b
5856          frintm v2.8h, v4.8h
5857          frintm v1.8b, v9.8b
5858          frintm v13.4h, v21.4h
5859
5860          frintx v0.16b, v31.16b
5861          frintx v2.8h, v4.8h
5862          frintx v1.8b, v9.8b
5863          frintx v13.4h, v21.4h
5864
5865          frintz v0.16b, v31.16b
5866          frintz v2.8h, v4.8h
5867          frintz v1.8b, v9.8b
5868          frintz v13.4h, v21.4h
5869
5870          frinti v0.16b, v31.16b
5871          frinti v2.8h, v4.8h
5872          frinti v1.8b, v9.8b
5873          frinti v13.4h, v21.4h
5874
5875          fcvtns v0.16b, v31.16b
5876          fcvtns v2.8h, v4.8h
5877          fcvtns v1.8b, v9.8b
5878          fcvtns v13.4h, v21.4h
5879
5880          fcvtnu v0.16b, v31.16b
5881          fcvtnu v2.8h, v4.8h
5882          fcvtnu v1.8b, v9.8b
5883          fcvtnu v13.4h, v21.4h
5884
5885          fcvtps v0.16b, v31.16b
5886          fcvtps v2.8h, v4.8h
5887          fcvtps v1.8b, v9.8b
5888          fcvtps v13.4h, v21.4h
5889
5890          fcvtpu v0.16b, v31.16b
5891          fcvtpu v2.8h, v4.8h
5892          fcvtpu v1.8b, v9.8b
5893          fcvtpu v13.4h, v21.4h
5894
5895          fcvtms v0.16b, v31.16b
5896          fcvtms v2.8h, v4.8h
5897          fcvtms v1.8b, v9.8b
5898          fcvtms v13.4h, v21.4h
5899
5900          fcvtmu v0.16b, v31.16b
5901          fcvtmu v2.8h, v4.8h
5902          fcvtmu v1.8b, v9.8b
5903          fcvtmu v13.4h, v21.4h
5904
5905          fcvtzs v0.16b, v31.16b
5906          fcvtzs v2.8h, v4.8h
5907          fcvtzs v1.8b, v9.8b
5908          fcvtzs v13.4h, v21.4h
5909
5910          fcvtzu v0.16b, v31.16b
5911          fcvtzu v2.8h, v4.8h
5912          fcvtzu v1.8b, v9.8b
5913          fcvtzu v13.4h, v21.4h
5914
5915          fcvtas v0.16b, v31.16b
5916          fcvtas v2.8h, v4.8h
5917          fcvtas v1.8b, v9.8b
5918          fcvtas v13.4h, v21.4h
5919
5920          fcvtau v0.16b, v31.16b
5921          fcvtau v2.8h, v4.8h
5922          fcvtau v1.8b, v9.8b
5923          fcvtau v13.4h, v21.4h
5924
5925          urecpe v0.16b, v31.16b
5926          urecpe v2.8h, v4.8h
5927          urecpe v1.8b, v9.8b
5928          urecpe v13.4h, v21.4h
5929          urecpe v1.2d, v9.2d
5930
5931          ursqrte v0.16b, v31.16b
5932          ursqrte v2.8h, v4.8h
5933          ursqrte v1.8b, v9.8b
5934          ursqrte v13.4h, v21.4h
5935          ursqrte v1.2d, v9.2d
5936
5937          scvtf v0.16b, v31.16b
5938          scvtf v2.8h, v4.8h
5939          scvtf v1.8b, v9.8b
5940          scvtf v13.4h, v21.4h
5941
5942          ucvtf v0.16b, v31.16b
5943          ucvtf v2.8h, v4.8h
5944          ucvtf v1.8b, v9.8b
5945          ucvtf v13.4h, v21.4h
5946
5947          frecpe v0.16b, v31.16b
5948          frecpe v2.8h, v4.8h
5949          frecpe v1.8b, v9.8b
5950          frecpe v13.4h, v21.4h
5951
5952          frsqrte v0.16b, v31.16b
5953          frsqrte v2.8h, v4.8h
5954          frsqrte v1.8b, v9.8b
5955          frsqrte v13.4h, v21.4h
5956
5957          fsqrt v0.16b, v31.16b
5958          fsqrt v2.8h, v4.8h
5959          fsqrt v1.8b, v9.8b
5960          fsqrt v13.4h, v21.4h
5961
5962 // CHECK-ERROR: error: invalid operand for instruction
5963 // CHECK-ERROR:         frintn v0.16b, v31.16b
5964 // CHECK-ERROR:                   ^
5965 // CHECK-ERROR: error: invalid operand for instruction
5966 // CHECK-ERROR:         frintn v2.8h, v4.8h
5967 // CHECK-ERROR:                   ^
5968 // CHECK-ERROR: error: invalid operand for instruction
5969 // CHECK-ERROR:         frintn v1.8b, v9.8b
5970 // CHECK-ERROR:                   ^
5971 // CHECK-ERROR: error: invalid operand for instruction
5972 // CHECK-ERROR:         frintn v13.4h, v21.4h
5973 // CHECK-ERROR:                    ^
5974 // CHECK-ERROR: error: invalid operand for instruction
5975 // CHECK-ERROR:         frinta v0.16b, v31.16b
5976 // CHECK-ERROR:                   ^
5977 // CHECK-ERROR: error: invalid operand for instruction
5978 // CHECK-ERROR:         frinta v2.8h, v4.8h
5979 // CHECK-ERROR:                   ^
5980 // CHECK-ERROR: error: invalid operand for instruction
5981 // CHECK-ERROR:         frinta v1.8b, v9.8b
5982 // CHECK-ERROR:                   ^
5983 // CHECK-ERROR: error: invalid operand for instruction
5984 // CHECK-ERROR:         frinta v13.4h, v21.4h
5985 // CHECK-ERROR:                    ^
5986 // CHECK-ERROR: error: invalid operand for instruction
5987 // CHECK-ERROR:         frintp v0.16b, v31.16b
5988 // CHECK-ERROR:                   ^
5989 // CHECK-ERROR: error: invalid operand for instruction
5990 // CHECK-ERROR:         frintp v2.8h, v4.8h
5991 // CHECK-ERROR:                   ^
5992 // CHECK-ERROR: error: invalid operand for instruction
5993 // CHECK-ERROR:         frintp v1.8b, v9.8b
5994 // CHECK-ERROR:                   ^
5995 // CHECK-ERROR: error: invalid operand for instruction
5996 // CHECK-ERROR:         frintp v13.4h, v21.4h
5997 // CHECK-ERROR:                    ^
5998 // CHECK-ERROR: error: invalid operand for instruction
5999 // CHECK-ERROR:         frintm v0.16b, v31.16b
6000 // CHECK-ERROR:                   ^
6001 // CHECK-ERROR: error: invalid operand for instruction
6002 // CHECK-ERROR:         frintm v2.8h, v4.8h
6003 // CHECK-ERROR:                   ^
6004 // CHECK-ERROR: error: invalid operand for instruction
6005 // CHECK-ERROR:         frintm v1.8b, v9.8b
6006 // CHECK-ERROR:                   ^
6007 // CHECK-ERROR: error: invalid operand for instruction
6008 // CHECK-ERROR:         frintm v13.4h, v21.4h
6009 // CHECK-ERROR:                    ^
6010 // CHECK-ERROR: error: invalid operand for instruction
6011 // CHECK-ERROR:         frintx v0.16b, v31.16b
6012 // CHECK-ERROR:                   ^
6013 // CHECK-ERROR: error: invalid operand for instruction
6014 // CHECK-ERROR:         frintx v2.8h, v4.8h
6015 // CHECK-ERROR:                   ^
6016 // CHECK-ERROR: error: invalid operand for instruction
6017 // CHECK-ERROR:         frintx v1.8b, v9.8b
6018 // CHECK-ERROR:                   ^
6019 // CHECK-ERROR: error: invalid operand for instruction
6020 // CHECK-ERROR:         frintx v13.4h, v21.4h
6021 // CHECK-ERROR:                    ^
6022 // CHECK-ERROR: error: invalid operand for instruction
6023 // CHECK-ERROR:         frintz v0.16b, v31.16b
6024 // CHECK-ERROR:                   ^
6025 // CHECK-ERROR: error: invalid operand for instruction
6026 // CHECK-ERROR:         frintz v2.8h, v4.8h
6027 // CHECK-ERROR:                   ^
6028 // CHECK-ERROR: error: invalid operand for instruction
6029 // CHECK-ERROR:         frintz v1.8b, v9.8b
6030 // CHECK-ERROR:                   ^
6031 // CHECK-ERROR: error: invalid operand for instruction
6032 // CHECK-ERROR:         frintz v13.4h, v21.4h
6033 // CHECK-ERROR:                    ^
6034 // CHECK-ERROR: error: invalid operand for instruction
6035 // CHECK-ERROR:         frinti v0.16b, v31.16b
6036 // CHECK-ERROR:                   ^
6037 // CHECK-ERROR: error: invalid operand for instruction
6038 // CHECK-ERROR:         frinti v2.8h, v4.8h
6039 // CHECK-ERROR:                   ^
6040 // CHECK-ERROR: error: invalid operand for instruction
6041 // CHECK-ERROR:         frinti v1.8b, v9.8b
6042 // CHECK-ERROR:                   ^
6043 // CHECK-ERROR: error: invalid operand for instruction
6044 // CHECK-ERROR:         frinti v13.4h, v21.4h
6045 // CHECK-ERROR:                    ^
6046 // CHECK-ERROR: error: invalid operand for instruction
6047 // CHECK-ERROR:         fcvtns v0.16b, v31.16b
6048 // CHECK-ERROR:                   ^
6049 // CHECK-ERROR: error: invalid operand for instruction
6050 // CHECK-ERROR:         fcvtns v2.8h, v4.8h
6051 // CHECK-ERROR:                   ^
6052 // CHECK-ERROR: error: invalid operand for instruction
6053 // CHECK-ERROR:         fcvtns v1.8b, v9.8b
6054 // CHECK-ERROR:                   ^
6055 // CHECK-ERROR: error: invalid operand for instruction
6056 // CHECK-ERROR:         fcvtns v13.4h, v21.4h
6057 // CHECK-ERROR:                    ^
6058 // CHECK-ERROR: error: invalid operand for instruction
6059 // CHECK-ERROR:         fcvtnu v0.16b, v31.16b
6060 // CHECK-ERROR:                   ^
6061 // CHECK-ERROR: error: invalid operand for instruction
6062 // CHECK-ERROR:         fcvtnu v2.8h, v4.8h
6063 // CHECK-ERROR:                   ^
6064 // CHECK-ERROR: error: invalid operand for instruction
6065 // CHECK-ERROR:         fcvtnu v1.8b, v9.8b
6066 // CHECK-ERROR:                   ^
6067 // CHECK-ERROR: error: invalid operand for instruction
6068 // CHECK-ERROR:         fcvtnu v13.4h, v21.4h
6069 // CHECK-ERROR:                    ^
6070 // CHECK-ERROR: error: invalid operand for instruction
6071 // CHECK-ERROR:         fcvtps v0.16b, v31.16b
6072 // CHECK-ERROR:                   ^
6073 // CHECK-ERROR: error: invalid operand for instruction
6074 // CHECK-ERROR:         fcvtps v2.8h, v4.8h
6075 // CHECK-ERROR:                   ^
6076 // CHECK-ERROR: error: invalid operand for instruction
6077 // CHECK-ERROR:         fcvtps v1.8b, v9.8b
6078 // CHECK-ERROR:                   ^
6079 // CHECK-ERROR: error: invalid operand for instruction
6080 // CHECK-ERROR:         fcvtps v13.4h, v21.4h
6081 // CHECK-ERROR:                    ^
6082 // CHECK-ERROR: error: invalid operand for instruction
6083 // CHECK-ERROR:         fcvtpu v0.16b, v31.16b
6084 // CHECK-ERROR:                   ^
6085 // CHECK-ERROR: error: invalid operand for instruction
6086 // CHECK-ERROR:         fcvtpu v2.8h, v4.8h
6087 // CHECK-ERROR:                   ^
6088 // CHECK-ERROR: error: invalid operand for instruction
6089 // CHECK-ERROR:         fcvtpu v1.8b, v9.8b
6090 // CHECK-ERROR:                   ^
6091 // CHECK-ERROR: error: invalid operand for instruction
6092 // CHECK-ERROR:         fcvtpu v13.4h, v21.4h
6093 // CHECK-ERROR:                    ^
6094 // CHECK-ERROR: error: invalid operand for instruction
6095 // CHECK-ERROR:         fcvtms v0.16b, v31.16b
6096 // CHECK-ERROR:                   ^
6097 // CHECK-ERROR: error: invalid operand for instruction
6098 // CHECK-ERROR:         fcvtms v2.8h, v4.8h
6099 // CHECK-ERROR:                   ^
6100 // CHECK-ERROR: error: invalid operand for instruction
6101 // CHECK-ERROR:         fcvtms v1.8b, v9.8b
6102 // CHECK-ERROR:                   ^
6103 // CHECK-ERROR: error: invalid operand for instruction
6104 // CHECK-ERROR:         fcvtms v13.4h, v21.4h
6105 // CHECK-ERROR:                    ^
6106 // CHECK-ERROR: error: invalid operand for instruction
6107 // CHECK-ERROR:         fcvtmu v0.16b, v31.16b
6108 // CHECK-ERROR:                   ^
6109 // CHECK-ERROR: error: invalid operand for instruction
6110 // CHECK-ERROR:         fcvtmu v2.8h, v4.8h
6111 // CHECK-ERROR:                   ^
6112 // CHECK-ERROR: error: invalid operand for instruction
6113 // CHECK-ERROR:         fcvtmu v1.8b, v9.8b
6114 // CHECK-ERROR:                   ^
6115 // CHECK-ERROR: error: invalid operand for instruction
6116 // CHECK-ERROR:         fcvtmu v13.4h, v21.4h
6117 // CHECK-ERROR:                    ^
6118 // CHECK-ERROR: error: invalid operand for instruction
6119 // CHECK-ERROR:         fcvtzs v0.16b, v31.16b
6120 // CHECK-ERROR:                   ^
6121 // CHECK-ERROR: error: invalid operand for instruction
6122 // CHECK-ERROR:         fcvtzs v2.8h, v4.8h
6123 // CHECK-ERROR:                   ^
6124 // CHECK-ERROR: error: invalid operand for instruction
6125 // CHECK-ERROR:         fcvtzs v1.8b, v9.8b
6126 // CHECK-ERROR:                   ^
6127 // CHECK-ERROR: error: invalid operand for instruction
6128 // CHECK-ERROR:         fcvtzs v13.4h, v21.4h
6129 // CHECK-ERROR:                    ^
6130 // CHECK-ERROR: error: invalid operand for instruction
6131 // CHECK-ERROR:         fcvtzu v0.16b, v31.16b
6132 // CHECK-ERROR:                   ^
6133 // CHECK-ERROR: error: invalid operand for instruction
6134 // CHECK-ERROR:         fcvtzu v2.8h, v4.8h
6135 // CHECK-ERROR:                   ^
6136 // CHECK-ERROR: error: invalid operand for instruction
6137 // CHECK-ERROR:         fcvtzu v1.8b, v9.8b
6138 // CHECK-ERROR:                   ^
6139 // CHECK-ERROR: error: invalid operand for instruction
6140 // CHECK-ERROR:         fcvtzu v13.4h, v21.4h
6141 // CHECK-ERROR:                    ^
6142 // CHECK-ERROR: error: invalid operand for instruction
6143 // CHECK-ERROR:         fcvtas v0.16b, v31.16b
6144 // CHECK-ERROR:                   ^
6145 // CHECK-ERROR: error: invalid operand for instruction
6146 // CHECK-ERROR:         fcvtas v2.8h, v4.8h
6147 // CHECK-ERROR:                   ^
6148 // CHECK-ERROR: error: invalid operand for instruction
6149 // CHECK-ERROR:         fcvtas v1.8b, v9.8b
6150 // CHECK-ERROR:                   ^
6151 // CHECK-ERROR: error: invalid operand for instruction
6152 // CHECK-ERROR:         fcvtas v13.4h, v21.4h
6153 // CHECK-ERROR:                    ^
6154 // CHECK-ERROR: error: invalid operand for instruction
6155 // CHECK-ERROR:         fcvtau v0.16b, v31.16b
6156 // CHECK-ERROR:                   ^
6157 // CHECK-ERROR: error: invalid operand for instruction
6158 // CHECK-ERROR:         fcvtau v2.8h, v4.8h
6159 // CHECK-ERROR:                   ^
6160 // CHECK-ERROR: error: invalid operand for instruction
6161 // CHECK-ERROR:         fcvtau v1.8b, v9.8b
6162 // CHECK-ERROR:                   ^
6163 // CHECK-ERROR: error: invalid operand for instruction
6164 // CHECK-ERROR:         fcvtau v13.4h, v21.4h
6165 // CHECK-ERROR:                    ^
6166 // CHECK-ERROR: error: invalid operand for instruction
6167 // CHECK-ERROR:         urecpe v0.16b, v31.16b
6168 // CHECK-ERROR:                   ^
6169 // CHECK-ERROR: error: invalid operand for instruction
6170 // CHECK-ERROR:         urecpe v2.8h, v4.8h
6171 // CHECK-ERROR:                   ^
6172 // CHECK-ERROR: error: invalid operand for instruction
6173 // CHECK-ERROR:         urecpe v1.8b, v9.8b
6174 // CHECK-ERROR:                   ^
6175 // CHECK-ERROR: error: invalid operand for instruction
6176 // CHECK-ERROR:         urecpe v13.4h, v21.4h
6177 // CHECK-ERROR:                    ^
6178 // CHECK-ERROR: error: invalid operand for instruction
6179 // CHECK-ERROR:         urecpe v1.2d, v9.2d
6180 // CHECK-ERROR:                   ^
6181 // CHECK-ERROR: error: invalid operand for instruction
6182 // CHECK-ERROR:         ursqrte v0.16b, v31.16b
6183 // CHECK-ERROR:                    ^
6184 // CHECK-ERROR: error: invalid operand for instruction
6185 // CHECK-ERROR:         ursqrte v2.8h, v4.8h
6186 // CHECK-ERROR:                    ^
6187 // CHECK-ERROR: error: invalid operand for instruction
6188 // CHECK-ERROR:         ursqrte v1.8b, v9.8b
6189 // CHECK-ERROR:                    ^
6190 // CHECK-ERROR: error: invalid operand for instruction
6191 // CHECK-ERROR:         ursqrte v13.4h, v21.4h
6192 // CHECK-ERROR:                     ^
6193 // CHECK-ERROR: error: invalid operand for instruction
6194 // CHECK-ERROR:         ursqrte v1.2d, v9.2d
6195 // CHECK-ERROR:                    ^
6196 // CHECK-ERROR: error: invalid operand for instruction
6197 // CHECK-ERROR:         scvtf v0.16b, v31.16b
6198 // CHECK-ERROR:                  ^
6199 // CHECK-ERROR: error: invalid operand for instruction
6200 // CHECK-ERROR:         scvtf v2.8h, v4.8h
6201 // CHECK-ERROR:                  ^
6202 // CHECK-ERROR: error: invalid operand for instruction
6203 // CHECK-ERROR:         scvtf v1.8b, v9.8b
6204 // CHECK-ERROR:                  ^
6205 // CHECK-ERROR: error: invalid operand for instruction
6206 // CHECK-ERROR:         scvtf v13.4h, v21.4h
6207 // CHECK-ERROR:                   ^
6208 // CHECK-ERROR: error: invalid operand for instruction
6209 // CHECK-ERROR:         ucvtf v0.16b, v31.16b
6210 // CHECK-ERROR:                  ^
6211 // CHECK-ERROR: error: invalid operand for instruction
6212 // CHECK-ERROR:         ucvtf v2.8h, v4.8h
6213 // CHECK-ERROR:                  ^
6214 // CHECK-ERROR: error: invalid operand for instruction
6215 // CHECK-ERROR:         ucvtf v1.8b, v9.8b
6216 // CHECK-ERROR:                  ^
6217 // CHECK-ERROR: error: invalid operand for instruction
6218 // CHECK-ERROR:         ucvtf v13.4h, v21.4h
6219 // CHECK-ERROR:                   ^
6220 // CHECK-ERROR: error: invalid operand for instruction
6221 // CHECK-ERROR:         frecpe v0.16b, v31.16b
6222 // CHECK-ERROR:                   ^
6223 // CHECK-ERROR: error: invalid operand for instruction
6224 // CHECK-ERROR:         frecpe v2.8h, v4.8h
6225 // CHECK-ERROR:                   ^
6226 // CHECK-ERROR: error: invalid operand for instruction
6227 // CHECK-ERROR:         frecpe v1.8b, v9.8b
6228 // CHECK-ERROR:                   ^
6229 // CHECK-ERROR: error: invalid operand for instruction
6230 // CHECK-ERROR:         frecpe v13.4h, v21.4h
6231 // CHECK-ERROR:                    ^
6232 // CHECK-ERROR: error: invalid operand for instruction
6233 // CHECK-ERROR:         frsqrte v0.16b, v31.16b
6234 // CHECK-ERROR:                    ^
6235 // CHECK-ERROR: error: invalid operand for instruction
6236 // CHECK-ERROR:         frsqrte v2.8h, v4.8h
6237 // CHECK-ERROR:                    ^
6238 // CHECK-ERROR: error: invalid operand for instruction
6239 // CHECK-ERROR:         frsqrte v1.8b, v9.8b
6240 // CHECK-ERROR:                    ^
6241 // CHECK-ERROR: error: invalid operand for instruction
6242 // CHECK-ERROR:         frsqrte v13.4h, v21.4h
6243 // CHECK-ERROR:                     ^
6244 // CHECK-ERROR: error: invalid operand for instruction
6245 // CHECK-ERROR:         fsqrt v0.16b, v31.16b
6246 // CHECK-ERROR:                  ^
6247 // CHECK-ERROR: error: invalid operand for instruction
6248 // CHECK-ERROR:         fsqrt v2.8h, v4.8h
6249 // CHECK-ERROR:                  ^
6250 // CHECK-ERROR: error: invalid operand for instruction
6251 // CHECK-ERROR:         fsqrt v1.8b, v9.8b
6252 // CHECK-ERROR:                  ^
6253 // CHECK-ERROR: error: invalid operand for instruction
6254 // CHECK-ERROR:         fsqrt v13.4h, v21.4h
6255 // CHECK-ERROR:                   ^
6256
6257 //----------------------------------------------------------------------
6258 // Scalar Floating-point Convert To Signed Fixed-point (Immediate)
6259 //----------------------------------------------------------------------
6260
6261     fcvtzs s21, s12, #0
6262     fcvtzs d21, d12, #65
6263     fcvtzs s21, d12, #1
6264
6265 // CHECK-ERROR: error: expected integer in range [1, 32]
6266 // CHECK-ERROR:        fcvtzs s21, s12, #0
6267 // CHECK-ERROR:                         ^
6268 // CHECK-ERROR: error: expected integer in range [1, 64]
6269 // CHECK-ERROR:        fcvtzs d21, d12, #65
6270 // CHECK-ERROR:                         ^
6271 // CHECK-ERROR: error: invalid operand for instruction
6272 // CHECK-ERROR:        fcvtzs s21, d12, #1
6273 // CHECK-ERROR:                    ^
6274
6275 //----------------------------------------------------------------------
6276 // Scalar Floating-point Convert To Unsigned Fixed-point (Immediate)
6277 //----------------------------------------------------------------------
6278
6279     fcvtzu s21, s12, #33
6280     fcvtzu d21, d12, #0
6281     fcvtzu s21, d12, #1
6282
6283 // CHECK-ERROR: error: expected integer in range [1, 32]
6284 // CHECK-ERROR:        fcvtzu s21, s12, #33
6285 // CHECK-ERROR:                         ^
6286 // CHECK-ERROR: error: expected integer in range [1, 64]
6287 // CHECK-ERROR:        fcvtzu d21, d12, #0
6288 // CHECK-ERROR:                         ^
6289 // CHECK-ERROR: error: invalid operand for instruction
6290 // CHECK-ERROR:        fcvtzu s21, d12, #1
6291 // CHECK-ERROR:                    ^
6292
6293 //----------------------------------------------------------------------
6294 // Scalar Unsigned Saturating Extract Narrow
6295 //----------------------------------------------------------------------
6296
6297         aese v0.8h, v1.8h
6298         aese v0.4s, v1.4s
6299         aese v0.2d, v1.2d
6300         aesd v0.8h, v1.8h
6301         aesmc v0.8h, v1.8h
6302         aesimc v0.8h, v1.8h
6303
6304 // CHECK:  error: invalid operand for instruction
6305 // CHECK:         aese v0.8h, v1.8h
6306 // CHECK:                 ^
6307 // CHECK:  error: invalid operand for instruction
6308 // CHECK:         aese v0.4s, v1.4s
6309 // CHECK:                 ^
6310 // CHECK:  error: invalid operand for instruction
6311 // CHECK:         aese v0.2d, v1.2d
6312 // CHECK:                 ^
6313 // CHECK:  error: invalid operand for instruction
6314 // CHECK:         aesd v0.8h, v1.8h
6315 // CHECK:                 ^
6316 // CHECK:  error: invalid operand for instruction
6317 // CHECK:         aesmc v0.8h, v1.8h
6318 // CHECK:                  ^
6319 // CHECK:  error: invalid operand for instruction
6320 // CHECK:         aesimc v0.8h, v1.8h
6321 // CHECK:                   ^
6322
6323         sha1h b0, b1
6324         sha1h h0, h1
6325         sha1h d0, d1
6326         sha1h q0, q1
6327         sha1su1 v0.16b, v1.16b
6328         sha1su1 v0.8h, v1.8h
6329         sha1su1 v0.2d, v1.2d
6330         sha256su0 v0.16b, v1.16b
6331
6332 // CHECK:  error: invalid operand for instruction
6333 // CHECK:         sha1h b0, b1
6334 // CHECK:               ^
6335 // CHECK:  error: invalid operand for instruction
6336 // CHECK:         sha1h h0, h1
6337 // CHECK:               ^
6338 // CHECK:  error: invalid operand for instruction
6339 // CHECK:         sha1h d0, d1
6340 // CHECK:               ^
6341 // CHECK:  error: invalid operand for instruction
6342 // CHECK:         sha1h q0, q1
6343 // CHECK:               ^
6344 // CHECK:  error: invalid operand for instruction
6345 // CHECK:         sha1su1 v0.16b, v1.16b
6346 // CHECK:                    ^
6347 // CHECK:  error: invalid operand for instruction
6348 // CHECK:         sha1su1 v0.8h, v1.8h
6349 // CHECK:                    ^
6350 // CHECK:  error: invalid operand for instruction
6351 // CHECK:         sha1su1 v0.2d, v1.2d
6352 // CHECK:                    ^
6353 // CHECK:  error: invalid operand for instruction
6354 // CHECK:         sha256su0 v0.16b, v1.16b
6355 // CHECK:                      ^
6356
6357         sha1c q0, q1, v2.4s
6358         sha1p q0, q1, v2.4s
6359         sha1m q0, q1, v2.4s
6360         sha1su0 v0.16b, v1.16b, v2.16b
6361         sha1su0 v0.8h, v1.8h, v2.8h
6362         sha1su0 v0.2d, v1.2d, v2.2d
6363         sha256h q0, q1, q2
6364         sha256h v0.4s, v1.4s, v2.4s
6365         sha256h2 q0, q1, q2
6366         sha256su1 v0.16b, v1.16b, v2.16b
6367
6368 // CHECK:  error: invalid operand for instruction
6369 // CHECK:         sha1c q0, q1, v2.4s
6370 // CHECK:                   ^
6371 // CHECK:  error: invalid operand for instruction
6372 // CHECK:         sha1p q0, q1, v2.4s
6373 // CHECK:                   ^
6374 // CHECK:  error: invalid operand for instruction
6375 // CHECK:         sha1m q0, q1, v2.4s
6376 // CHECK:                   ^
6377 // CHECK:  error: invalid operand for instruction
6378 // CHECK:         sha1su0 v0.16b, v1.16b, v2.16b
6379 // CHECK:                    ^
6380 // CHECK:  error: invalid operand for instruction
6381 // CHECK:         sha1su0 v0.8h, v1.8h, v2.8h
6382 // CHECK:                    ^
6383 // CHECK:  error: invalid operand for instruction
6384 // CHECK:         sha1su0 v0.2d, v1.2d, v2.2d
6385 // CHECK:                    ^
6386 // CHECK:  error: too few operands for instruction
6387 // CHECK:         sha256h q0, q1, q2
6388 // CHECK:         ^
6389 // CHECK:  error: invalid operand for instruction
6390 // CHECK:         sha256h v0.4s, v1.4s, v2.4s
6391 // CHECK:                    ^
6392 // CHECK:  error: too few operands for instruction
6393 // CHECK:         sha256h2 q0, q1, q2
6394 // CHECK:         ^
6395 // CHECK:  error: invalid operand for instruction
6396 // CHECK:         sha256su1 v0.16b, v1.16b, v2.16b
6397 // CHECK:                      ^
6398
6399 //----------------------------------------------------------------------
6400 // Bitwise extract
6401 //----------------------------------------------------------------------
6402
6403         ext v0.8b, v1.8b, v2.4h, #0x3
6404         ext v0.4h, v1.4h, v2.4h, #0x3
6405         ext v0.2s, v1.2s, v2.2s, #0x1
6406         ext v0.1d, v1.1d, v2.1d, #0x0
6407
6408 // CHECK-ERROR: error: invalid operand for instruction
6409 // CHECK-ERROR:         ext v0.8b, v1.8b, v2.4h, #0x3
6410 // CHECK-ERROR:                              ^
6411 // CHECK-ERROR: error: invalid operand for instruction
6412 // CHECK-ERROR:         ext v0.4h, v1.4h, v2.4h, #0x3
6413 // CHECK-ERROR:                ^
6414 // CHECK-ERROR: error: invalid operand for instruction
6415 // CHECK-ERROR:         ext v0.2s, v1.2s, v2.2s, #0x1
6416 // CHECK-ERROR:                ^
6417 // CHECK-ERROR: error: invalid operand for instruction
6418 // CHECK-ERROR:         ext v0.1d, v1.1d, v2.1d, #0x0
6419 // CHECK-ERROR:                ^
6420
6421         ext v0.16b, v1.16b, v2.8h, #0x3
6422         ext v0.8h, v1.8h, v2.8h, #0x3
6423         ext v0.4s, v1.4s, v2.4s, #0x1
6424         ext v0.2d, v1.2d, v2.2d, #0x0
6425
6426 // CHECK-ERROR: error: invalid operand for instruction
6427 // CHECK-ERROR:         ext v0.16b, v1.16b, v2.8h, #0x3
6428 // CHECK-ERROR:                                ^
6429 // CHECK-ERROR: error: invalid operand for instruction
6430 // CHECK-ERROR:         ext v0.8h, v1.8h, v2.8h, #0x3
6431 // CHECK-ERROR:                ^
6432 // CHECK-ERROR: error: invalid operand for instruction
6433 // CHECK-ERROR:         ext v0.4s, v1.4s, v2.4s, #0x1
6434 // CHECK-ERROR:                ^
6435 // CHECK-ERROR: error: invalid operand for instruction
6436 // CHECK-ERROR:         ext v0.2d, v1.2d, v2.2d, #0x0
6437 // CHECK-ERROR:                ^
6438
6439
6440 //----------------------------------------------------------------------
6441 // Permutation with 3 vectors
6442 //----------------------------------------------------------------------
6443
6444         uzp1 v0.16b, v1.8b, v2.8b
6445         uzp1 v0.8b, v1.4b, v2.4b
6446         uzp1 v0.8h, v1.4h, v2.4h
6447         uzp1 v0.4h, v1.2h, v2.2h
6448         uzp1 v0.4s, v1.2s, v2.2s
6449         uzp1 v0.2s, v1.1s, v2.1s
6450         uzp1 v0.2d, v1.1d, v2.1d
6451         uzp1 v0.1d, v1.1d, v2.1d
6452
6453 // CHECK-ERROR <stdin>:4289:22: error: invalid operand for instruction
6454 // CHECK-ERROR         uzp1 v0.16b, v1.8b, v2.8b
6455 // CHECK-ERROR                      ^
6456 // CHECK-ERROR <stdin>:4290:21: error: invalid operand for instruction
6457 // CHECK-ERROR         uzp1 v0.8b, v1.4b, v2.4b
6458 // CHECK-ERROR                     ^
6459 // CHECK-ERROR <stdin>:4291:21: error: invalid operand for instruction
6460 // CHECK-ERROR         uzp1 v0.8h, v1.4h, v2.4h
6461 // CHECK-ERROR                     ^
6462 // CHECK-ERROR <stdin>:4292:21: error: invalid operand for instruction
6463 // CHECK-ERROR         uzp1 v0.4h, v1.2h, v2.2h
6464 // CHECK-ERROR                     ^
6465 // CHECK-ERROR <stdin>:4293:21: error: invalid operand for instruction
6466 // CHECK-ERROR         uzp1 v0.4s, v1.2s, v2.2s
6467 // CHECK-ERROR                     ^
6468 // CHECK-ERROR <stdin>:4294:21: error: invalid operand for instruction
6469 // CHECK-ERROR         uzp1 v0.2s, v1.1s, v2.1s
6470 // CHECK-ERROR                     ^
6471 // CHECK-ERROR <stdin>:4295:21: error: invalid operand for instruction
6472 // CHECK-ERROR         uzp1 v0.2d, v1.1d, v2.1d
6473 // CHECK-ERROR                     ^
6474 // CHECK-ERROR <stdin>:4296:17: error: invalid operand for instruction
6475 // CHECK-ERROR         uzp1 v0.1d, v1.1d, v2.1d
6476 // CHECK-ERROR                 ^
6477
6478         uzp2 v0.16b, v1.8b, v2.8b
6479         uzp2 v0.8b, v1.4b, v2.4b
6480         uzp2 v0.8h, v1.4h, v2.4h
6481         uzp2 v0.4h, v1.2h, v2.2h
6482         uzp2 v0.4s, v1.2s, v2.2s
6483         uzp2 v0.2s, v1.1s, v2.1s
6484         uzp2 v0.2d, v1.1d, v2.1d
6485         uzp2 v0.1d, v1.1d, v2.1d
6486
6487 // CHECK-ERROR <stdin>:4298:22: error: invalid operand for instruction
6488 // CHECK-ERROR         uzp2 v0.16b, v1.8b, v2.8b
6489 // CHECK-ERROR                      ^
6490 // CHECK-ERROR <stdin>:4299:21: error: invalid operand for instruction
6491 // CHECK-ERROR         uzp2 v0.8b, v1.4b, v2.4b
6492 // CHECK-ERROR                     ^
6493 // CHECK-ERROR <stdin>:4300:21: error: invalid operand for instruction
6494 // CHECK-ERROR         uzp2 v0.8h, v1.4h, v2.4h
6495 // CHECK-ERROR                     ^
6496 // CHECK-ERROR <stdin>:4301:21: error: invalid operand for instruction
6497 // CHECK-ERROR         uzp2 v0.4h, v1.2h, v2.2h
6498 // CHECK-ERROR                     ^
6499 // CHECK-ERROR <stdin>:4302:21: error: invalid operand for instruction
6500 // CHECK-ERROR         uzp2 v0.4s, v1.2s, v2.2s
6501 // CHECK-ERROR                     ^
6502 // CHECK-ERROR <stdin>:4303:21: error: invalid operand for instruction
6503 // CHECK-ERROR         uzp2 v0.2s, v1.1s, v2.1s
6504 // CHECK-ERROR                     ^
6505 // CHECK-ERROR <stdin>:4304:21: error: invalid operand for instruction
6506 // CHECK-ERROR         uzp2 v0.2d, v1.1d, v2.1d
6507 // CHECK-ERROR                     ^
6508 // CHECK-ERROR <stdin>:4305:17: error: invalid operand for instruction
6509 // CHECK-ERROR         uzp2 v0.1d, v1.1d, v2.1d
6510 // CHECK-ERROR                 ^
6511
6512         zip1 v0.16b, v1.8b, v2.8b
6513         zip1 v0.8b, v1.4b, v2.4b
6514         zip1 v0.8h, v1.4h, v2.4h
6515         zip1 v0.4h, v1.2h, v2.2h
6516         zip1 v0.4s, v1.2s, v2.2s
6517         zip1 v0.2s, v1.1s, v2.1s
6518         zip1 v0.2d, v1.1d, v2.1d
6519         zip1 v0.1d, v1.1d, v2.1d
6520
6521 // CHECK-ERROR <stdin>:4307:22: error: invalid operand for instruction
6522 // CHECK-ERROR         zip1 v0.16b, v1.8b, v2.8b
6523 // CHECK-ERROR                      ^
6524 // CHECK-ERROR <stdin>:4308:21: error: invalid operand for instruction
6525 // CHECK-ERROR         zip1 v0.8b, v1.4b, v2.4b
6526 // CHECK-ERROR                     ^
6527 // CHECK-ERROR <stdin>:4309:21: error: invalid operand for instruction
6528 // CHECK-ERROR         zip1 v0.8h, v1.4h, v2.4h
6529 // CHECK-ERROR                     ^
6530 // CHECK-ERROR <stdin>:4310:21: error: invalid operand for instruction
6531 // CHECK-ERROR         zip1 v0.4h, v1.2h, v2.2h
6532 // CHECK-ERROR                     ^
6533 // CHECK-ERROR <stdin>:4311:21: error: invalid operand for instruction
6534 // CHECK-ERROR         zip1 v0.4s, v1.2s, v2.2s
6535 // CHECK-ERROR                     ^
6536 // CHECK-ERROR <stdin>:4312:21: error: invalid operand for instruction
6537 // CHECK-ERROR         zip1 v0.2s, v1.1s, v2.1s
6538 // CHECK-ERROR                     ^
6539 // CHECK-ERROR <stdin>:4313:21: error: invalid operand for instruction
6540 // CHECK-ERROR         zip1 v0.2d, v1.1d, v2.1d
6541 // CHECK-ERROR                     ^
6542 // CHECK-ERROR <stdin>:4314:17: error: invalid operand for instruction
6543 // CHECK-ERROR         zip1 v0.1d, v1.1d, v2.1d
6544 // CHECK-ERROR                 ^
6545
6546         zip2 v0.16b, v1.8b, v2.8b
6547         zip2 v0.8b, v1.4b, v2.4b
6548         zip2 v0.8h, v1.4h, v2.4h
6549         zip2 v0.4h, v1.2h, v2.2h
6550         zip2 v0.4s, v1.2s, v2.2s
6551         zip2 v0.2s, v1.1s, v2.1s
6552         zip2 v0.2d, v1.1d, v2.1d
6553         zip2 v0.1d, v1.1d, v2.1d
6554
6555 // CHECK-ERROR <stdin>:4316:22: error: invalid operand for instruction
6556 // CHECK-ERROR         zip2 v0.16b, v1.8b, v2.8b
6557 // CHECK-ERROR                      ^
6558 // CHECK-ERROR <stdin>:4317:21: error: invalid operand for instruction
6559 // CHECK-ERROR         zip2 v0.8b, v1.4b, v2.4b
6560 // CHECK-ERROR                     ^
6561 // CHECK-ERROR <stdin>:4318:21: error: invalid operand for instruction
6562 // CHECK-ERROR         zip2 v0.8h, v1.4h, v2.4h
6563 // CHECK-ERROR                     ^
6564 // CHECK-ERROR <stdin>:4319:21: error: invalid operand for instruction
6565 // CHECK-ERROR         zip2 v0.4h, v1.2h, v2.2h
6566 // CHECK-ERROR                     ^
6567 // CHECK-ERROR <stdin>:4320:21: error: invalid operand for instruction
6568 // CHECK-ERROR         zip2 v0.4s, v1.2s, v2.2s
6569 // CHECK-ERROR                     ^
6570 // CHECK-ERROR <stdin>:4321:21: error: invalid operand for instruction
6571 // CHECK-ERROR         zip2 v0.2s, v1.1s, v2.1s
6572 // CHECK-ERROR                     ^
6573 // CHECK-ERROR <stdin>:4322:21: error: invalid operand for instruction
6574 // CHECK-ERROR         zip2 v0.2d, v1.1d, v2.1d
6575 // CHECK-ERROR                     ^
6576 // CHECK-ERROR <stdin>:4323:17: error: invalid operand for instruction
6577 // CHECK-ERROR         zip2 v0.1d, v1.1d, v2.1d
6578 // CHECK-ERROR                 ^
6579
6580         trn1 v0.16b, v1.8b, v2.8b
6581         trn1 v0.8b, v1.4b, v2.4b
6582         trn1 v0.8h, v1.4h, v2.4h
6583         trn1 v0.4h, v1.2h, v2.2h
6584         trn1 v0.4s, v1.2s, v2.2s
6585         trn1 v0.2s, v1.1s, v2.1s
6586         trn1 v0.2d, v1.1d, v2.1d
6587         trn1 v0.1d, v1.1d, v2.1d
6588
6589 // CHECK-ERROR <stdin>:4325:22: error: invalid operand for instruction
6590 // CHECK-ERROR         trn1 v0.16b, v1.8b, v2.8b
6591 // CHECK-ERROR                      ^
6592 // CHECK-ERROR <stdin>:4326:21: error: invalid operand for instruction
6593 // CHECK-ERROR         trn1 v0.8b, v1.4b, v2.4b
6594 // CHECK-ERROR                     ^
6595 // CHECK-ERROR <stdin>:4327:21: error: invalid operand for instruction
6596 // CHECK-ERROR         trn1 v0.8h, v1.4h, v2.4h
6597 // CHECK-ERROR                     ^
6598 // CHECK-ERROR <stdin>:4328:21: error: invalid operand for instruction
6599 // CHECK-ERROR         trn1 v0.4h, v1.2h, v2.2h
6600 // CHECK-ERROR                     ^
6601 // CHECK-ERROR <stdin>:4329:21: error: invalid operand for instruction
6602 // CHECK-ERROR         trn1 v0.4s, v1.2s, v2.2s
6603 // CHECK-ERROR                     ^
6604 // CHECK-ERROR <stdin>:4330:21: error: invalid operand for instruction
6605 // CHECK-ERROR         trn1 v0.2s, v1.1s, v2.1s
6606 // CHECK-ERROR                     ^
6607 // CHECK-ERROR <stdin>:4331:21: error: invalid operand for instruction
6608 // CHECK-ERROR         trn1 v0.2d, v1.1d, v2.1d
6609 // CHECK-ERROR                     ^
6610 // CHECK-ERROR <stdin>:4332:17: error: invalid operand for instruction
6611 // CHECK-ERROR         trn1 v0.1d, v1.1d, v2.1d
6612 // CHECK-ERROR                 ^
6613
6614         trn2 v0.16b, v1.8b, v2.8b
6615         trn2 v0.8b, v1.4b, v2.4b
6616         trn2 v0.8h, v1.4h, v2.4h
6617         trn2 v0.4h, v1.2h, v2.2h
6618         trn2 v0.4s, v1.2s, v2.2s
6619         trn2 v0.2s, v1.1s, v2.1s
6620         trn2 v0.2d, v1.1d, v2.1d
6621         trn2 v0.1d, v1.1d, v2.1d
6622
6623 // CHECK-ERROR <stdin>:4334:22: error: invalid operand for instruction
6624 // CHECK-ERROR         trn2 v0.16b, v1.8b, v2.8b
6625 // CHECK-ERROR                      ^
6626 // CHECK-ERROR <stdin>:4335:21: error: invalid operand for instruction
6627 // CHECK-ERROR         trn2 v0.8b, v1.4b, v2.4b
6628 // CHECK-ERROR                     ^
6629 // CHECK-ERROR <stdin>:4336:21: error: invalid operand for instruction
6630 // CHECK-ERROR         trn2 v0.8h, v1.4h, v2.4h
6631 // CHECK-ERROR                     ^
6632 // CHECK-ERROR <stdin>:4337:21: error: invalid operand for instruction
6633 // CHECK-ERROR         trn2 v0.4h, v1.2h, v2.2h
6634 // CHECK-ERROR                     ^
6635 // CHECK-ERROR <stdin>:4338:21: error: invalid operand for instruction
6636 // CHECK-ERROR         trn2 v0.4s, v1.2s, v2.2s
6637 // CHECK-ERROR                     ^
6638 // CHECK-ERROR <stdin>:4339:21: error: invalid operand for instruction
6639 // CHECK-ERROR         trn2 v0.2s, v1.1s, v2.1s
6640 // CHECK-ERROR                     ^
6641 // CHECK-ERROR <stdin>:4340:21: error: invalid operand for instruction
6642 // CHECK-ERROR         trn2 v0.2d, v1.1d, v2.1d
6643 // CHECK-ERROR                     ^
6644 // CHECK-ERROR <stdin>:4341:17: error: invalid operand for instruction
6645 // CHECK-ERROR         trn2 v0.1d, v1.1d, v2.1d
6646 // CHECK-ERROR                 ^
6647
6648 //----------------------------------------------------------------------
6649 // Permutation with 3 vectors
6650 //----------------------------------------------------------------------
6651
6652         uzp1 v0.16b, v1.8b, v2.8b
6653         uzp1 v0.8b, v1.4b, v2.4b
6654         uzp1 v0.8h, v1.4h, v2.4h
6655         uzp1 v0.4h, v1.2h, v2.2h
6656         uzp1 v0.4s, v1.2s, v2.2s
6657         uzp1 v0.2s, v1.1s, v2.1s
6658         uzp1 v0.2d, v1.1d, v2.1d
6659         uzp1 v0.1d, v1.1d, v2.1d
6660
6661 // CHECK-ERROR <stdin>:4289:22: error: invalid operand for instruction
6662 // CHECK-ERROR         uzp1 v0.16b, v1.8b, v2.8b
6663 // CHECK-ERROR                      ^
6664 // CHECK-ERROR <stdin>:4290:21: error: invalid operand for instruction
6665 // CHECK-ERROR         uzp1 v0.8b, v1.4b, v2.4b
6666 // CHECK-ERROR                     ^
6667 // CHECK-ERROR <stdin>:4291:21: error: invalid operand for instruction
6668 // CHECK-ERROR         uzp1 v0.8h, v1.4h, v2.4h
6669 // CHECK-ERROR                     ^
6670 // CHECK-ERROR <stdin>:4292:21: error: invalid operand for instruction
6671 // CHECK-ERROR         uzp1 v0.4h, v1.2h, v2.2h
6672 // CHECK-ERROR                     ^
6673 // CHECK-ERROR <stdin>:4293:21: error: invalid operand for instruction
6674 // CHECK-ERROR         uzp1 v0.4s, v1.2s, v2.2s
6675 // CHECK-ERROR                     ^
6676 // CHECK-ERROR <stdin>:4294:21: error: invalid operand for instruction
6677 // CHECK-ERROR         uzp1 v0.2s, v1.1s, v2.1s
6678 // CHECK-ERROR                     ^
6679 // CHECK-ERROR <stdin>:4295:21: error: invalid operand for instruction
6680 // CHECK-ERROR         uzp1 v0.2d, v1.1d, v2.1d
6681 // CHECK-ERROR                     ^
6682 // CHECK-ERROR <stdin>:4296:17: error: invalid operand for instruction
6683 // CHECK-ERROR         uzp1 v0.1d, v1.1d, v2.1d
6684 // CHECK-ERROR                 ^
6685
6686         uzp2 v0.16b, v1.8b, v2.8b
6687         uzp2 v0.8b, v1.4b, v2.4b
6688         uzp2 v0.8h, v1.4h, v2.4h
6689         uzp2 v0.4h, v1.2h, v2.2h
6690         uzp2 v0.4s, v1.2s, v2.2s
6691         uzp2 v0.2s, v1.1s, v2.1s
6692         uzp2 v0.2d, v1.1d, v2.1d
6693         uzp2 v0.1d, v1.1d, v2.1d
6694
6695 // CHECK-ERROR <stdin>:4298:22: error: invalid operand for instruction
6696 // CHECK-ERROR         uzp2 v0.16b, v1.8b, v2.8b
6697 // CHECK-ERROR                      ^
6698 // CHECK-ERROR <stdin>:4299:21: error: invalid operand for instruction
6699 // CHECK-ERROR         uzp2 v0.8b, v1.4b, v2.4b
6700 // CHECK-ERROR                     ^
6701 // CHECK-ERROR <stdin>:4300:21: error: invalid operand for instruction
6702 // CHECK-ERROR         uzp2 v0.8h, v1.4h, v2.4h
6703 // CHECK-ERROR                     ^
6704 // CHECK-ERROR <stdin>:4301:21: error: invalid operand for instruction
6705 // CHECK-ERROR         uzp2 v0.4h, v1.2h, v2.2h
6706 // CHECK-ERROR                     ^
6707 // CHECK-ERROR <stdin>:4302:21: error: invalid operand for instruction
6708 // CHECK-ERROR         uzp2 v0.4s, v1.2s, v2.2s
6709 // CHECK-ERROR                     ^
6710 // CHECK-ERROR <stdin>:4303:21: error: invalid operand for instruction
6711 // CHECK-ERROR         uzp2 v0.2s, v1.1s, v2.1s
6712 // CHECK-ERROR                     ^
6713 // CHECK-ERROR <stdin>:4304:21: error: invalid operand for instruction
6714 // CHECK-ERROR         uzp2 v0.2d, v1.1d, v2.1d
6715 // CHECK-ERROR                     ^
6716 // CHECK-ERROR <stdin>:4305:17: error: invalid operand for instruction
6717 // CHECK-ERROR         uzp2 v0.1d, v1.1d, v2.1d
6718 // CHECK-ERROR                 ^
6719
6720         zip1 v0.16b, v1.8b, v2.8b
6721         zip1 v0.8b, v1.4b, v2.4b
6722         zip1 v0.8h, v1.4h, v2.4h
6723         zip1 v0.4h, v1.2h, v2.2h
6724         zip1 v0.4s, v1.2s, v2.2s
6725         zip1 v0.2s, v1.1s, v2.1s
6726         zip1 v0.2d, v1.1d, v2.1d
6727         zip1 v0.1d, v1.1d, v2.1d
6728
6729 // CHECK-ERROR <stdin>:4307:22: error: invalid operand for instruction
6730 // CHECK-ERROR         zip1 v0.16b, v1.8b, v2.8b
6731 // CHECK-ERROR                      ^
6732 // CHECK-ERROR <stdin>:4308:21: error: invalid operand for instruction
6733 // CHECK-ERROR         zip1 v0.8b, v1.4b, v2.4b
6734 // CHECK-ERROR                     ^
6735 // CHECK-ERROR <stdin>:4309:21: error: invalid operand for instruction
6736 // CHECK-ERROR         zip1 v0.8h, v1.4h, v2.4h
6737 // CHECK-ERROR                     ^
6738 // CHECK-ERROR <stdin>:4310:21: error: invalid operand for instruction
6739 // CHECK-ERROR         zip1 v0.4h, v1.2h, v2.2h
6740 // CHECK-ERROR                     ^
6741 // CHECK-ERROR <stdin>:4311:21: error: invalid operand for instruction
6742 // CHECK-ERROR         zip1 v0.4s, v1.2s, v2.2s
6743 // CHECK-ERROR                     ^
6744 // CHECK-ERROR <stdin>:4312:21: error: invalid operand for instruction
6745 // CHECK-ERROR         zip1 v0.2s, v1.1s, v2.1s
6746 // CHECK-ERROR                     ^
6747 // CHECK-ERROR <stdin>:4313:21: error: invalid operand for instruction
6748 // CHECK-ERROR         zip1 v0.2d, v1.1d, v2.1d
6749 // CHECK-ERROR                     ^
6750 // CHECK-ERROR <stdin>:4314:17: error: invalid operand for instruction
6751 // CHECK-ERROR         zip1 v0.1d, v1.1d, v2.1d
6752 // CHECK-ERROR                 ^
6753
6754         zip2 v0.16b, v1.8b, v2.8b
6755         zip2 v0.8b, v1.4b, v2.4b
6756         zip2 v0.8h, v1.4h, v2.4h
6757         zip2 v0.4h, v1.2h, v2.2h
6758         zip2 v0.4s, v1.2s, v2.2s
6759         zip2 v0.2s, v1.1s, v2.1s
6760         zip2 v0.2d, v1.1d, v2.1d
6761         zip2 v0.1d, v1.1d, v2.1d
6762
6763 // CHECK-ERROR <stdin>:4316:22: error: invalid operand for instruction
6764 // CHECK-ERROR         zip2 v0.16b, v1.8b, v2.8b
6765 // CHECK-ERROR                      ^
6766 // CHECK-ERROR <stdin>:4317:21: error: invalid operand for instruction
6767 // CHECK-ERROR         zip2 v0.8b, v1.4b, v2.4b
6768 // CHECK-ERROR                     ^
6769 // CHECK-ERROR <stdin>:4318:21: error: invalid operand for instruction
6770 // CHECK-ERROR         zip2 v0.8h, v1.4h, v2.4h
6771 // CHECK-ERROR                     ^
6772 // CHECK-ERROR <stdin>:4319:21: error: invalid operand for instruction
6773 // CHECK-ERROR         zip2 v0.4h, v1.2h, v2.2h
6774 // CHECK-ERROR                     ^
6775 // CHECK-ERROR <stdin>:4320:21: error: invalid operand for instruction
6776 // CHECK-ERROR         zip2 v0.4s, v1.2s, v2.2s
6777 // CHECK-ERROR                     ^
6778 // CHECK-ERROR <stdin>:4321:21: error: invalid operand for instruction
6779 // CHECK-ERROR         zip2 v0.2s, v1.1s, v2.1s
6780 // CHECK-ERROR                     ^
6781 // CHECK-ERROR <stdin>:4322:21: error: invalid operand for instruction
6782 // CHECK-ERROR         zip2 v0.2d, v1.1d, v2.1d
6783 // CHECK-ERROR                     ^
6784 // CHECK-ERROR <stdin>:4323:17: error: invalid operand for instruction
6785 // CHECK-ERROR         zip2 v0.1d, v1.1d, v2.1d
6786 // CHECK-ERROR                 ^
6787
6788         trn1 v0.16b, v1.8b, v2.8b
6789         trn1 v0.8b, v1.4b, v2.4b
6790         trn1 v0.8h, v1.4h, v2.4h
6791         trn1 v0.4h, v1.2h, v2.2h
6792         trn1 v0.4s, v1.2s, v2.2s
6793         trn1 v0.2s, v1.1s, v2.1s
6794         trn1 v0.2d, v1.1d, v2.1d
6795         trn1 v0.1d, v1.1d, v2.1d
6796
6797 // CHECK-ERROR <stdin>:4325:22: error: invalid operand for instruction
6798 // CHECK-ERROR         trn1 v0.16b, v1.8b, v2.8b
6799 // CHECK-ERROR                      ^
6800 // CHECK-ERROR <stdin>:4326:21: error: invalid operand for instruction
6801 // CHECK-ERROR         trn1 v0.8b, v1.4b, v2.4b
6802 // CHECK-ERROR                     ^
6803 // CHECK-ERROR <stdin>:4327:21: error: invalid operand for instruction
6804 // CHECK-ERROR         trn1 v0.8h, v1.4h, v2.4h
6805 // CHECK-ERROR                     ^
6806 // CHECK-ERROR <stdin>:4328:21: error: invalid operand for instruction
6807 // CHECK-ERROR         trn1 v0.4h, v1.2h, v2.2h
6808 // CHECK-ERROR                     ^
6809 // CHECK-ERROR <stdin>:4329:21: error: invalid operand for instruction
6810 // CHECK-ERROR         trn1 v0.4s, v1.2s, v2.2s
6811 // CHECK-ERROR                     ^
6812 // CHECK-ERROR <stdin>:4330:21: error: invalid operand for instruction
6813 // CHECK-ERROR         trn1 v0.2s, v1.1s, v2.1s
6814 // CHECK-ERROR                     ^
6815 // CHECK-ERROR <stdin>:4331:21: error: invalid operand for instruction
6816 // CHECK-ERROR         trn1 v0.2d, v1.1d, v2.1d
6817 // CHECK-ERROR                     ^
6818 // CHECK-ERROR <stdin>:4332:17: error: invalid operand for instruction
6819 // CHECK-ERROR         trn1 v0.1d, v1.1d, v2.1d
6820 // CHECK-ERROR                 ^
6821
6822         trn2 v0.16b, v1.8b, v2.8b
6823         trn2 v0.8b, v1.4b, v2.4b
6824         trn2 v0.8h, v1.4h, v2.4h
6825         trn2 v0.4h, v1.2h, v2.2h
6826         trn2 v0.4s, v1.2s, v2.2s
6827         trn2 v0.2s, v1.1s, v2.1s
6828         trn2 v0.2d, v1.1d, v2.1d
6829         trn2 v0.1d, v1.1d, v2.1d
6830
6831 // CHECK-ERROR <stdin>:4334:22: error: invalid operand for instruction
6832 // CHECK-ERROR         trn2 v0.16b, v1.8b, v2.8b
6833 // CHECK-ERROR                      ^
6834 // CHECK-ERROR <stdin>:4335:21: error: invalid operand for instruction
6835 // CHECK-ERROR         trn2 v0.8b, v1.4b, v2.4b
6836 // CHECK-ERROR                     ^
6837 // CHECK-ERROR <stdin>:4336:21: error: invalid operand for instruction
6838 // CHECK-ERROR         trn2 v0.8h, v1.4h, v2.4h
6839 // CHECK-ERROR                     ^
6840 // CHECK-ERROR <stdin>:4337:21: error: invalid operand for instruction
6841 // CHECK-ERROR         trn2 v0.4h, v1.2h, v2.2h
6842 // CHECK-ERROR                     ^
6843 // CHECK-ERROR <stdin>:4338:21: error: invalid operand for instruction
6844 // CHECK-ERROR         trn2 v0.4s, v1.2s, v2.2s
6845 // CHECK-ERROR                     ^
6846 // CHECK-ERROR <stdin>:4339:21: error: invalid operand for instruction
6847 // CHECK-ERROR         trn2 v0.2s, v1.1s, v2.1s
6848 // CHECK-ERROR                     ^
6849 // CHECK-ERROR <stdin>:4340:21: error: invalid operand for instruction
6850 // CHECK-ERROR         trn2 v0.2d, v1.1d, v2.1d
6851 // CHECK-ERROR                     ^
6852 // CHECK-ERROR <stdin>:4341:17: error: invalid operand for instruction
6853 // CHECK-ERROR         trn2 v0.1d, v1.1d, v2.1d
6854 // CHECK-ERROR                 ^
6855
6856 //----------------------------------------------------------------------
6857 // Floating Point  multiply (scalar, by element)
6858 //----------------------------------------------------------------------
6859       // mismatched and invalid vector types
6860       fmul    s0, s1, v1.h[0]
6861       fmul    h0, h1, v1.s[0]
6862       // invalid lane
6863       fmul    s2, s29, v10.s[4]
6864
6865 // CHECK-ERROR: error: invalid operand for instruction
6866 // CHECK-ERROR:          fmul    s0, s1, v1.h[0]
6867 // CHECK-ERROR:                             ^
6868 // CHECK-ERROR: error: invalid operand for instruction
6869 // CHECK-ERROR:          fmul    h0, h1, v1.s[0]
6870 // CHECK-ERROR:                  ^
6871 // CHECK-ERROR: error:  lane number incompatible with layout
6872 // CHECK-ERROR:          fmul    s2, s29, v10.s[4]
6873 // CHECK-ERROR:                                 ^
6874
6875 //----------------------------------------------------------------------
6876 // Floating Point  multiply extended (scalar, by element)
6877 //----------------------------------------------------------------------
6878       // mismatched and invalid vector types
6879       fmulx    d0, d1, v1.b[0]
6880       fmulx    h0, h1, v1.d[0]
6881       // invalid lane
6882       fmulx    d2, d29, v10.d[3]
6883
6884 // CHECK-ERROR: error: invalid operand for instruction
6885 // CHECK-ERROR:          fmulx    d0, d1, v1.b[0]
6886 // CHECK-ERROR:                              ^
6887 // CHECK-ERROR: error: invalid operand for instruction
6888 // CHECK-ERROR:          fmulx    h0, h1, v1.d[0]
6889 // CHECK-ERROR:                   ^
6890 // CHECK-ERROR: error:  lane number incompatible with layout
6891 // CHECK-ERROR:          fmulx    d2, d29, v10.d[3]
6892 // CHECK-ERROR:                                  ^
6893
6894 //----------------------------------------------------------------------
6895 // Floating Point fused multiply-add (scalar, by element)
6896 //----------------------------------------------------------------------
6897       // mismatched and invalid vector types
6898       fmla    b0, b1, v1.b[0]
6899       fmla    d30, s11, v1.d[1]
6900       // invalid lane
6901       fmla    s16, s22, v16.s[5]
6902
6903 // CHECK-ERROR: error: invalid operand for instruction
6904 // CHECK-ERROR:          fmla    b0, b1, v1.b[0]
6905 // CHECK-ERROR:                  ^
6906 // CHECK-ERROR: error: invalid operand for instruction
6907 // CHECK-ERROR:          fmla    d30, s11, v1.d[1]
6908 // CHECK-ERROR:                       ^
6909 // CHECK-ERROR: error:  lane number incompatible with layout
6910 // CHECK-ERROR:          fmla    s16, s22, v16.s[5]
6911 // CHECK-ERROR:                                  ^
6912
6913 //----------------------------------------------------------------------
6914 // Floating Point fused multiply-subtract (scalar, by element)
6915 //----------------------------------------------------------------------
6916     // mismatched and invalid vector types
6917     fmls    s29, h10, v28.s[1]
6918     fmls    h7, h17, v26.s[2]
6919     // invalid lane
6920     fmls    d16, d22, v16.d[-1]
6921
6922 // CHECK-ERROR: error: invalid operand for instruction
6923 // CHECK-ERROR:          fmls    s29, h10, v28.s[1]
6924 // CHECK-ERROR:                       ^
6925 // CHECK-ERROR: error: invalid operand for instruction
6926 // CHECK-ERROR:          fmls    h7, h17, v26.s[2]
6927 // CHECK-ERROR:                  ^
6928 // CHECK-ERROR: error:  expected lane number
6929 // CHECK-ERROR:          fmls    d16, d22, v16.d[-1]
6930 // CHECK-ERROR:                                  ^
6931
6932 //----------------------------------------------------------------------
6933 // Scalar Signed saturating doubling multiply-add long
6934 // (scalar, by element)
6935 //----------------------------------------------------------------------
6936     // mismatched and invalid vector types
6937     sqdmlal s0, h0, v0.s[0]
6938     sqdmlal s8, s9, v14.s[1]
6939     // invalid lane
6940     sqdmlal s4, s5, v1.s[5]
6941     // invalid vector index
6942     sqdmlal s0, h0, v17.h[0]
6943
6944 // CHECK-ERROR: error: invalid operand for instruction
6945 // CHECK-ERROR:          sqdmlal s0, h0, v0.s[0]
6946 // CHECK-ERROR:                             ^
6947 // CHECK-ERROR: error: invalid operand for instruction
6948 // CHECK-ERROR:          sqdmlal s8, s9, v14.s[1]
6949 // CHECK-ERROR:                  ^
6950 // CHECK-ERROR: error: lane number incompatible with layout
6951 // CHECK-ERROR:          sqdmlal s4, s5, v1.s[5]
6952 // CHECK-ERROR:                               ^
6953 // CHECK-ERROR: error: invalid operand for instruction
6954 // CHECK-ERROR:          sqdmlal s0, h0, v17.h[0]
6955 // CHECK-ERROR:                           ^
6956
6957 //----------------------------------------------------------------------
6958 // Scalar Signed saturating doubling multiply-subtract long
6959 // (scalar, by element)
6960 //----------------------------------------------------------------------
6961     // mismatched and invalid vector types
6962     sqdmlsl s1, h1, v1.d[0]
6963     sqdmlsl d1, h1, v13.s[0]
6964     // invalid lane
6965     sqdmlsl d1, s1, v13.s[4]
6966     // invalid vector index
6967     sqdmlsl s1, h1, v20.h[7]
6968
6969 // CHECK-ERROR: error: invalid operand for instruction
6970 // CHECK-ERROR:          sqdmlsl s1, h1, v1.d[0]
6971 // CHECK-ERROR:                             ^
6972 // CHECK-ERROR: error: invalid operand for instruction
6973 // CHECK-ERROR:          sqdmlsl d1, h1, v13.s[0]
6974 // CHECK-ERROR:                      ^
6975 // CHECK-ERROR: error: lane number incompatible with layout
6976 // CHECK-ERROR:          sqdmlsl d1, s1, v13.s[4]
6977 // CHECK-ERROR:                                ^
6978 // CHECK-ERROR: error: invalid operand for instruction
6979 // CHECK-ERROR:          sqdmlsl s1, h1, v20.h[7]
6980 // CHECK-ERROR:                           ^
6981
6982 //----------------------------------------------------------------------
6983 // Scalar Signed saturating doubling multiply long (scalar, by element)
6984 //----------------------------------------------------------------------
6985     // mismatched and invalid vector types
6986     // invalid lane
6987     // invalid vector index
6988     // mismatched and invalid vector types
6989     sqdmull s1, h1, v1.s[1]
6990     sqdmull s1, s1, v4.s[0]
6991     // invalid lane
6992     sqdmull s12, h17, v9.h[9]
6993     // invalid vector index
6994     sqdmull s1, h1, v16.h[5]
6995
6996 // CHECK-ERROR: error: invalid operand for instruction
6997 // CHECK-ERROR:          sqdmull s1, h1, v1.s[1]
6998 // CHECK-ERROR:                             ^
6999 // CHECK-ERROR: error: invalid operand for instruction
7000 // CHECK-ERROR:          sqdmull s1, s1, v4.s[0]
7001 // CHECK-ERROR:                  ^
7002 // CHECK-ERROR: error: lane number incompatible with layout
7003 // CHECK-ERROR:          sqdmull s12, h17, v9.h[9]
7004 // CHECK-ERROR:                                 ^
7005 // CHECK-ERROR: error: invalid operand for instruction
7006 // CHECK-ERROR:          sqdmull s1, h1, v16.h[5]
7007 // CHECK-ERROR:                           ^
7008
7009 //----------------------------------------------------------------------
7010 // Scalar Signed saturating doubling multiply returning
7011 // high half (scalar, by element)
7012 //----------------------------------------------------------------------
7013     // mismatched and invalid vector types
7014     sqdmulh h0, s1, v0.h[0]
7015     sqdmulh s25, s26, v27.h[3]
7016     // invalid lane
7017     sqdmulh s25, s26, v27.s[4]
7018     // invalid vector index
7019     sqdmulh s0, h1, v30.h[0]
7020
7021 // CHECK-ERROR: error: invalid operand for instruction
7022 // CHECK-ERROR:          sqdmulh h0, s1, v0.h[0]
7023 // CHECK-ERROR:                      ^
7024 // CHECK-ERROR: error: invalid operand for instruction
7025 // CHECK-ERROR:          sqdmulh s25, s26, v27.h[3]
7026 // CHECK-ERROR:                  ^
7027 // CHECK-ERROR: error: lane number incompatible with layout
7028 // CHECK-ERROR:          sqdmulh s25, s26, v27.s[4]
7029 // CHECK-ERROR:                                  ^
7030 // CHECK-ERROR: error: invalid operand for instruction
7031 // CHECK-ERROR:          sqdmulh s0, h1, v30.h[0]
7032 // CHECK-ERROR:                      ^
7033
7034 //----------------------------------------------------------------------
7035 // Scalar Signed saturating rounding doubling multiply
7036 // returning high half (scalar, by element)
7037 //----------------------------------------------------------------------
7038     // mismatched and invalid vector types
7039     sqrdmulh h31, h30, v14.s[2]
7040     sqrdmulh s5, h6, v7.s[2]
7041     // invalid lane
7042     sqrdmulh h31, h30, v14.h[9]
7043     // invalid vector index
7044     sqrdmulh h31, h30, v20.h[4]
7045
7046 // CHECK-ERROR: error: invalid operand for instruction
7047 // CHECK-ERROR:          sqrdmulh h31, h30, v14.s[2]
7048 // CHECK-ERROR:                                 ^
7049 // CHECK-ERROR: error: invalid operand for instruction
7050 // CHECK-ERROR:          sqrdmulh s5, h6, v7.s[2]
7051 // CHECK-ERROR:                       ^
7052 // CHECK-ERROR: error: lane number incompatible with layout
7053 // CHECK-ERROR:          sqrdmulh h31, h30, v14.h[9]
7054 // CHECK-ERROR:                                 ^
7055 // CHECK-ERROR: error: invalid operand for instruction
7056 // CHECK-ERROR:          sqrdmulh h31, h30, v20.h[4]
7057 // CHECK-ERROR:                              ^
7058
7059 //----------------------------------------------------------------------
7060 // Scalar Duplicate element (scalar)
7061 //----------------------------------------------------------------------
7062       // mismatched and invalid vector types
7063       dup b0, v1.d[0]
7064       dup h0, v31.b[8]
7065       dup s0, v2.h[4]
7066       dup d0, v17.s[3]
7067       // invalid  lane
7068       dup d0, v17.d[4]
7069       dup s0, v1.s[7]
7070       dup h0, v31.h[16]
7071       dup b1, v3.b[16]
7072 // CHECK-ERROR: error: invalid operand for instruction
7073 // CHECK-ERROR:          dup b0, v1.d[0]
7074 // CHECK-ERROR:                     ^
7075 // CHECK-ERROR: error: invalid operand for instruction
7076 // CHECK-ERROR:          dup h0, v31.b[8]
7077 // CHECK-ERROR:                      ^
7078 // CHECK-ERROR: error: invalid operand for instruction
7079 // CHECK-ERROR:          dup s0, v2.h[4]
7080 // CHECK-ERROR:                     ^
7081 // CHECK-ERROR: error: invalid operand for instruction
7082 // CHECK-ERROR:          dup d0, v17.s[3]
7083 // CHECK-ERROR:                      ^
7084 // CHECK-ERROR: error: lane number incompatible with layout
7085 // CHECK-ERROR:          dup d0, v17.d[4]
7086 // CHECK-ERROR:                        ^
7087 // CHECK-ERROR: error: lane number incompatible with layout
7088 // CHECK-ERROR:          dup s0, v1.s[7]
7089 // CHECK-ERROR:                       ^
7090 // CHECK-ERROR: error: lane number incompatible with layout
7091 // CHECK-ERROR:          dup h0, v31.h[16]
7092 // CHECK-ERROR:                        ^
7093 // CHECK-ERROR: error: lane number incompatible with layout
7094 // CHECK-ERROR:          dup b1, v3.b[16]
7095 // CHECK-ERROR:                       ^
7096
7097 //----------------------------------------------------------------------
7098 // Table look up
7099 //----------------------------------------------------------------------
7100
7101         tbl v0.8b, {v1.8b}, v2.8b
7102         tbl v0.8b, {v1.8b, v2.8b}, v2.8b
7103         tbl v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7104         tbl v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7105         tbl v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7106
7107 // CHECK-ERROR: error: invalid operand for instruction
7108 // CHECK-ERROR:        tbl v0.8b, {v1.8b}, v2.8b
7109 // CHECK-ERROR:                   ^
7110 // CHECK-ERROR: error: invalid operand for instruction
7111 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b}, v2.8b
7112 // CHECK-ERROR:                   ^
7113 // CHECK-ERROR: error: invalid operand for instruction
7114 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7115 // CHECK-ERROR:                   ^
7116 // CHECK-ERROR: error: invalid operand for instruction
7117 // CHECK-ERROR:        tbl v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7118 // CHECK-ERROR:                   ^
7119 // CHECK-ERROR: error: invalid number of vectors
7120 // CHECK-ERROR:        tbl v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7121 // CHECK-ERROR:                                                    ^
7122
7123         tbx v0.8b, {v1.8b}, v2.8b
7124         tbx v0.8b, {v1.8b, v2.8b}, v2.8b
7125         tbx v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7126         tbx v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7127         tbx v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7128
7129 // CHECK-ERROR: error: invalid operand for instruction
7130 // CHECK-ERROR:        tbx v0.8b, {v1.8b}, v2.8b
7131 // CHECK-ERROR:                   ^
7132 // CHECK-ERROR: error: invalid operand for instruction
7133 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b}, v2.8b
7134 // CHECK-ERROR:                   ^
7135 // CHECK-ERROR: error: invalid operand for instruction
7136 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b, v3.8b}, v2.8b
7137 // CHECK-ERROR:                   ^
7138 // CHECK-ERROR: error: invalid operand for instruction
7139 // CHECK-ERROR:        tbx v0.8b, {v1.8b, v2.8b, v3.8b, v4.8b}, v2.8b
7140 // CHECK-ERROR:                   ^
7141 // CHECK-ERROR: error: invalid number of vectors
7142 // CHECK-ERROR:        tbx v0.8b, {v1.16b, v2.16b, v3.16b, v4.16b, v5.16b}, v2.8b
7143 // CHECK-ERROR:                                                    ^
7144
7145 //----------------------------------------------------------------------
7146 // Scalar Floating-point Convert To Lower Precision Narrow, Rounding To
7147 // Odd
7148 //----------------------------------------------------------------------
7149
7150     fcvtxn s0, s1
7151
7152 // CHECK-ERROR: error: invalid operand for instruction
7153 // CHECK-ERROR:        fcvtxn s0, s1
7154 // CHECK-ERROR:                   ^
7155
7156 //----------------------------------------------------------------------
7157 // Scalar Floating-point Convert To Signed Integer, Rounding To Nearest
7158 // With Ties To Away
7159 //----------------------------------------------------------------------
7160
7161     fcvtas s0, d0
7162     fcvtas d0, s0
7163
7164 // CHECK-ERROR: error: invalid operand for instruction
7165 // CHECK-ERROR:        fcvtas s0, d0
7166 // CHECK-ERROR:                   ^
7167 // CHECK-ERROR: error: invalid operand for instruction
7168 // CHECK-ERROR:        fcvtas d0, s0
7169 // CHECK-ERROR:                   ^
7170
7171 //----------------------------------------------------------------------
7172 // Scalar Floating-point Convert To Unsigned Integer, Rounding To
7173 // Nearest With Ties To Away
7174 //----------------------------------------------------------------------
7175
7176     fcvtau s0, d0
7177     fcvtau d0, s0
7178
7179 // CHECK-ERROR: error: invalid operand for instruction
7180 // CHECK-ERROR:        fcvtau s0, d0
7181 // CHECK-ERROR:                   ^
7182 // CHECK-ERROR: error: invalid operand for instruction
7183 // CHECK-ERROR:        fcvtau d0, s0
7184 // CHECK-ERROR:                   ^
7185
7186 //----------------------------------------------------------------------
7187 // Scalar Floating-point Convert To Signed Integer, Rounding Toward
7188 // Minus Infinity
7189 //----------------------------------------------------------------------
7190
7191     fcvtms s0, d0
7192     fcvtms d0, s0
7193
7194 // CHECK-ERROR: error: invalid operand for instruction
7195 // CHECK-ERROR:        fcvtms s0, d0
7196 // CHECK-ERROR:                   ^
7197 // CHECK-ERROR: error: invalid operand for instruction
7198 // CHECK-ERROR:        fcvtms d0, s0
7199 // CHECK-ERROR:                   ^
7200
7201 //----------------------------------------------------------------------
7202 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward
7203 // Minus Infinity
7204 //----------------------------------------------------------------------
7205
7206     fcvtmu s0, d0
7207     fcvtmu d0, s0
7208
7209 // CHECK-ERROR: error: invalid operand for instruction
7210 // CHECK-ERROR:        fcvtmu s0, d0
7211 // CHECK-ERROR:                   ^
7212 // CHECK-ERROR: error: invalid operand for instruction
7213 // CHECK-ERROR:        fcvtmu d0, s0
7214 // CHECK-ERROR:                   ^
7215
7216 //----------------------------------------------------------------------
7217 // Scalar Floating-point Convert To Signed Integer, Rounding To Nearest
7218 // With Ties To Even
7219 //----------------------------------------------------------------------
7220
7221     fcvtns s0, d0
7222     fcvtns d0, s0
7223
7224 // CHECK-ERROR: error: invalid operand for instruction
7225 // CHECK-ERROR:        fcvtns s0, d0
7226 // CHECK-ERROR:                   ^
7227 // CHECK-ERROR: error: invalid operand for instruction
7228 // CHECK-ERROR:        fcvtns d0, s0
7229 // CHECK-ERROR:                   ^
7230
7231 //----------------------------------------------------------------------
7232 // Scalar Floating-point Convert To Unsigned Integer, Rounding To
7233 // Nearest With Ties To Even
7234 //----------------------------------------------------------------------
7235
7236     fcvtnu s0, d0
7237     fcvtnu d0, s0
7238
7239 // CHECK-ERROR: error: invalid operand for instruction
7240 // CHECK-ERROR:        fcvtnu s0, d0
7241 // CHECK-ERROR:                   ^
7242 // CHECK-ERROR: error: invalid operand for instruction
7243 // CHECK-ERROR:        fcvtnu d0, s0
7244 // CHECK-ERROR:                   ^
7245
7246 //----------------------------------------------------------------------
7247 // Scalar Floating-point Convert To Signed Integer, Rounding Toward
7248 // Positive Infinity
7249 //----------------------------------------------------------------------
7250
7251     fcvtps s0, d0
7252     fcvtps d0, s0
7253
7254 // CHECK-ERROR: error: invalid operand for instruction
7255 // CHECK-ERROR:        fcvtps s0, d0
7256 // CHECK-ERROR:                   ^
7257 // CHECK-ERROR: error: invalid operand for instruction
7258 // CHECK-ERROR:        fcvtps d0, s0
7259 // CHECK-ERROR:                   ^
7260
7261 //----------------------------------------------------------------------
7262 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward
7263 // Positive Infinity
7264 //----------------------------------------------------------------------
7265
7266     fcvtpu s0, d0
7267     fcvtpu d0, s0
7268
7269 // CHECK-ERROR: error: invalid operand for instruction
7270 // CHECK-ERROR:        fcvtpu s0, d0
7271 // CHECK-ERROR:                   ^
7272 // CHECK-ERROR: error: invalid operand for instruction
7273 // CHECK-ERROR:        fcvtpu d0, s0
7274 // CHECK-ERROR:                   ^
7275
7276 //----------------------------------------------------------------------
7277 // Scalar Floating-point Convert To Signed Integer, Rounding Toward Zero
7278 //----------------------------------------------------------------------
7279
7280     fcvtzs s0, d0
7281     fcvtzs d0, s0
7282
7283 // CHECK-ERROR: error: invalid operand for instruction
7284 // CHECK-ERROR:        fcvtzs s0, d0
7285 // CHECK-ERROR:                   ^
7286 // CHECK-ERROR: error: invalid operand for instruction
7287 // CHECK-ERROR:        fcvtzs d0, s0
7288 // CHECK-ERROR:                   ^
7289
7290 //----------------------------------------------------------------------
7291 // Scalar Floating-point Convert To Unsigned Integer, Rounding Toward 
7292 // Zero
7293 //----------------------------------------------------------------------
7294
7295     fcvtzu s0, d0
7296     fcvtzu d0, s0
7297
7298 // CHECK-ERROR: error: invalid operand for instruction
7299 // CHECK-ERROR:        fcvtzu s0, d0
7300 // CHECK-ERROR:                   ^
7301 // CHECK-ERROR: error: invalid operand for instruction
7302 // CHECK-ERROR:        fcvtzu d0, s0
7303 // CHECK-ERROR:                   ^
7304
7305 //----------------------------------------------------------------------
7306 // Scalar Floating-point Absolute Difference
7307 //----------------------------------------------------------------------
7308
7309
7310     fabd s29, d24, s20
7311     fabd d29, s24, d20
7312
7313 // CHECK-ERROR: error: invalid operand for instruction
7314 // CHECK-ERROR:        fabd s29, d24, s20
7315 // CHECK-ERROR:                  ^
7316 // CHECK-ERROR: error: invalid operand for instruction
7317 // CHECK-ERROR:        fabd d29, s24, d20
7318 // CHECK-ERROR:                  ^