Home | History | Annotate | Download | only in AArch64
      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 //----------------------------------------------------------------------
    218 // Vector Move Immediate - bytemask, per doubleword
    219 //---------------------------------------------------------------------
    220         // invalid bytemask (0x00 or 0xff)
    221         movi v0.2d, #0x10ff00ff00ff00ff
    222 
    223 // CHECK:ERROR: error: invalid operand for instruction
    224 // CHECK:ERROR:         movi v0.2d, #0x10ff00ff00ff00ff
    225 // CHECK:ERROR:                     ^
    226 
    227 //----------------------------------------------------------------------
    228 // Vector Move Immediate - bytemask, one doubleword
    229 //----------------------------------------------------------------------
    230         // invalid bytemask (0x00 or 0xff)
    231         movi v0.2d, #0xffff00ff001f00ff
    232 
    233 // CHECK:ERROR: error: invalid operand for instruction
    234 // CHECK:ERROR:         movi v0.2d, #0xffff00ff001f00ff
    235 // CHECK:ERROR:                     ^
    236 //----------------------------------------------------------------------
    237 // Vector Floating Point Move Immediate
    238 //----------------------------------------------------------------------
    239         // invalid vector type (2s, 4s, 2d)
    240          fmov v0.4h, #1.0
    241 
    242 // CHECK:ERROR: error: invalid operand for instruction
    243 // CHECK:ERROR:         fmov v0.4h, #1.0
    244 // CHECK:ERROR:              ^
    245 
    246 //----------------------------------------------------------------------
    247 // Vector Move -  register
    248 //----------------------------------------------------------------------
    249       // invalid vector type (8b, 16b)
    250       mov v0.2s, v31.8b
    251 // CHECK:ERROR: error: invalid operand for instruction
    252 // CHECK:ERROR:         mov v0.2s, v31.8b
    253 // CHECK:ERROR:                ^
    254 
    255 //----------------------------------------------------------------------
    256 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
    257 //----------------------------------------------------------------------
    258 
    259         // Mismatched and invalid vector types (2d)
    260         saba v0.16b, v1.8b, v2.8b
    261         uaba v0.2d, v1.2d, v2.2d
    262 
    263 // CHECK-ERROR: error: invalid operand for instruction
    264 // CHECK-ERROR:         saba v0.16b, v1.8b, v2.8b
    265 // CHECK-ERROR:                        ^
    266 // CHECK-ERROR: error: invalid operand for instruction
    267 // CHECK-ERROR:         uaba v0.2d, v1.2d, v2.2d
    268 // CHECK-ERROR:                ^
    269 
    270 //----------------------------------------------------------------------
    271 // Vector Absolute Difference and Accumulate (Signed, Unsigned)
    272 // Vector Absolute Difference (Signed, Unsigned)
    273 
    274         // Mismatched and invalid vector types (2d)
    275         uaba v0.16b, v1.8b, v2.8b
    276         saba v0.2d, v1.2d, v2.2d
    277         uabd v0.4s, v1.2s, v2.2s
    278         sabd v0.4h, v1.8h, v8.8h
    279 
    280 // CHECK-ERROR: error: invalid operand for instruction
    281 // CHECK-ERROR:         uaba v0.16b, v1.8b, v2.8b
    282 // CHECK-ERROR:                        ^
    283 // CHECK-ERROR: error: invalid operand for instruction
    284 // CHECK-ERROR:         saba v0.2d, v1.2d, v2.2d
    285 // CHECK-ERROR:                ^
    286 // CHECK-ERROR: error: invalid operand for instruction
    287 // CHECK-ERROR:         uabd v0.4s, v1.2s, v2.2s
    288 // CHECK-ERROR:                        ^
    289 // CHECK-ERROR: error: invalid operand for instruction
    290 // CHECK-ERROR:         sabd v0.4h, v1.8h, v8.8h
    291 // CHECK-ERROR:                        ^
    292 
    293 //----------------------------------------------------------------------
    294 // Vector Absolute Difference (Floating Point)
    295 //----------------------------------------------------------------------
    296         // Mismatched and invalid vector types
    297         fabd v0.2s, v1.4s, v2.2d
    298         fabd v0.4h, v1.4h, v2.4h
    299 
    300 // CHECK-ERROR: error: invalid operand for instruction
    301 // CHECK-ERROR:         fabd v0.2s, v1.4s, v2.2d
    302 // CHECK-ERROR:                        ^
    303 // CHECK-ERROR: error: invalid operand for instruction
    304 // CHECK-ERROR:         fabd v0.4h, v1.4h, v2.4h
    305 // CHECK-ERROR:                 ^
    306 //----------------------------------------------------------------------
    307 // Vector Multiply (Polynomial)
    308 //----------------------------------------------------------------------
    309 
    310         // Mismatched and invalid vector types
    311          pmul v0.8b, v1.8b, v2.16b
    312          pmul v0.2s, v1.2s, v2.2s
    313 
    314 // CHECK-ERROR: error: invalid operand for instruction
    315 // CHECK-ERROR:         pmul v0.8b, v1.8b, v2.16b
    316 // CHECK-ERROR:                               ^
    317 // CHECK-ERROR: error: invalid operand for instruction
    318 // CHECK-ERROR:         pmul v0.2s, v1.2s, v2.2s
    319 // CHECK-ERROR:                 ^
    320 
    321 //----------------------------------------------------------------------
    322 // Scalar Integer Add and Sub
    323 //----------------------------------------------------------------------
    324 
    325       // Mismatched registers
    326          add d0, s1, d2
    327          sub s1, d1, d2
    328 
    329 // CHECK-ERROR: error: invalid operand for instruction
    330 // CHECK-ERROR:         add d0, s1, d2
    331 // CHECK-ERROR:                 ^
    332 // CHECK-ERROR: error: invalid operand for instruction
    333 // CHECK-ERROR:         sub s1, d1, d2
    334 // CHECK-ERROR:             ^
    335 
    336 //----------------------------------------------------------------------
    337 // Vector Reciprocal Step (Floating Point)
    338 //----------------------------------------------------------------------
    339 
    340         // Mismatched and invalid vector types
    341          frecps v0.4s, v1.2d, v2.4s
    342          frecps v0.8h, v1.8h, v2.8h
    343 
    344 // CHECK-ERROR: error: invalid operand for instruction
    345 // CHECK-ERROR:        frecps v0.4s, v1.2d, v2.4s
    346 // CHECK-ERROR:                         ^
    347 // CHECK-ERROR: error: invalid operand for instruction
    348 // CHECK-ERROR:        frecps v0.8h, v1.8h, v2.8h
    349 // CHECK-ERROR:                  ^
    350 
    351 //----------------------------------------------------------------------
    352 // Vector Reciprocal Square Root Step (Floating Point)
    353 //----------------------------------------------------------------------
    354 
    355         // Mismatched and invalid vector types
    356          frsqrts v0.2d, v1.2d, v2.2s
    357          frsqrts v0.4h, v1.4h, v2.4h
    358 
    359 // CHECK-ERROR: error: invalid operand for instruction
    360 // CHECK-ERROR:        frsqrts v0.2d, v1.2d, v2.2s
    361 // CHECK-ERROR:                                 ^
    362 // CHECK-ERROR: error: invalid operand for instruction
    363 // CHECK-ERROR:        frsqrts v0.4h, v1.4h, v2.4h
    364 // CHECK-ERROR:                   ^
    365 
    366 
    367 //----------------------------------------------------------------------
    368 // Vector Absolute Compare Mask Less Than Or Equal (Floating Point)
    369 //----------------------------------------------------------------------
    370 
    371         // Mismatched and invalid vector types
    372         facge v0.2d, v1.2s, v2.2d
    373         facge v0.4h, v1.4h, v2.4h
    374         facle v0.8h, v1.4h, v2.4h
    375 
    376 // CHECK-ERROR: error: invalid operand for instruction
    377 // CHECK-ERROR:        facge v0.2d, v1.2s, v2.2d
    378 // CHECK-ERROR:                        ^
    379 // CHECK-ERROR: error: invalid operand for instruction
    380 // CHECK-ERROR:        facge v0.4h, v1.4h, v2.4h
    381 // CHECK-ERROR:                 ^
    382 // CHECK-ERROR: error: invalid operand for instruction
    383 // CHECK-ERROR:        facle v0.8h, v1.4h, v2.4h
    384 // CHECK-ERROR:                 ^
    385 //----------------------------------------------------------------------
    386 // Vector Absolute Compare Mask Less Than (Floating Point)
    387 //----------------------------------------------------------------------
    388 
    389         // Mismatched and invalid vector types
    390         facgt v0.2d, v1.2d, v2.4s
    391         facgt v0.8h, v1.8h, v2.8h
    392         faclt v0.8b, v1.8b, v2.8b
    393 
    394 // CHECK-ERROR: error: invalid operand for instruction
    395 // CHECK-ERROR:        facgt v0.2d, v1.2d, v2.4s
    396 // CHECK-ERROR:                               ^
    397 // CHECK-ERROR: error: invalid operand for instruction
    398 // CHECK-ERROR:        facgt v0.8h, v1.8h, v2.8h
    399 // CHECK-ERROR:                 ^
    400 // CHECK-ERROR: error: invalid operand for instruction
    401 // CHECK-ERROR:        faclt v0.8b, v1.8b, v2.8b
    402 // CHECK-ERROR:                 ^
    403 
    404 
    405 //----------------------------------------------------------------------
    406 // Vector Compare Mask Equal (Integer)
    407 //----------------------------------------------------------------------
    408 
    409          // Mismatched vector types
    410          cmeq c0.2d, v1.2d, v2.2s
    411 
    412 // CHECK-ERROR: error: invalid operand for instruction
    413 // CHECK-ERROR:        cmeq c0.2d, v1.2d, v2.2s
    414 // CHECK-ERROR:                              ^
    415 
    416 //----------------------------------------------------------------------
    417 // Vector Compare Mask Higher or Same (Unsigned Integer)
    418 // Vector Compare Mask Less or Same (Unsigned Integer)
    419 // CMLS is alias for CMHS with operands reversed.
    420 //----------------------------------------------------------------------
    421 
    422          // Mismatched vector types
    423          cmhs c0.4h, v1.8b, v2.8b
    424          cmls c0.16b, v1.16b, v2.2d
    425 
    426 // CHECK-ERROR: error: invalid operand for instruction
    427 // CHECK-ERROR:        cmhs c0.4h, v1.8b, v2.8b
    428 // CHECK-ERROR:                       ^
    429 // CHECK-ERROR: error: invalid operand for instruction
    430 // CHECK-ERROR:        cmls c0.16b, v1.16b, v2.2d
    431 // CHECK-ERROR:                                ^
    432 
    433 //----------------------------------------------------------------------
    434 // Vector Compare Mask Greater Than or Equal (Integer)
    435 // Vector Compare Mask Less Than or Equal (Integer)
    436 // CMLE is alias for CMGE with operands reversed.
    437 //----------------------------------------------------------------------
    438 
    439          // Mismatched vector types
    440          cmge c0.8h, v1.8b, v2.8b
    441          cmle c0.4h, v1.2s, v2.2s
    442 
    443 // CHECK-ERROR: error: invalid operand for instruction
    444 // CHECK-ERROR:        cmge c0.8h, v1.8b, v2.8b
    445 // CHECK-ERROR:                       ^
    446 // CHECK-ERROR: error: invalid operand for instruction
    447 // CHECK-ERROR:         cmle c0.4h, v1.2s, v2.2s
    448 // CHECK-ERROR:                        ^
    449 
    450 //----------------------------------------------------------------------
    451 // Vector Compare Mask Higher (Unsigned Integer)
    452 // Vector Compare Mask Lower (Unsigned Integer)
    453 // CMLO is alias for CMHI with operands reversed.
    454 //----------------------------------------------------------------------
    455 
    456          // Mismatched vector types
    457          cmhi c0.4s, v1.4s, v2.16b
    458          cmlo c0.8b, v1.8b, v2.2s
    459 
    460 // CHECK-ERROR: error: invalid operand for instruction
    461 // CHECK-ERROR:        cmhi c0.4s, v1.4s, v2.16b
    462 // CHECK-ERROR:                              ^
    463 // CHECK-ERROR: error: invalid operand for instruction
    464 // CHECK-ERROR:         cmlo c0.8b, v1.8b, v2.2s
    465 // CHECK-ERROR:                               ^
    466 
    467 //----------------------------------------------------------------------
    468 // Vector Compare Mask Greater Than (Integer)
    469 // Vector Compare Mask Less Than (Integer)
    470 // CMLT is alias for CMGT with operands reversed.
    471 //----------------------------------------------------------------------
    472 
    473          // Mismatched vector types
    474          cmgt c0.8b, v1.4s, v2.16b
    475          cmlt c0.8h, v1.16b, v2.4s
    476 
    477 // CHECK-ERROR: error: invalid operand for instruction
    478 // CHECK-ERROR:         cmgt c0.8b, v1.4s, v2.16b
    479 // CHECK-ERROR:                        ^
    480 // CHECK-ERROR: error: invalid operand for instruction
    481 // CHECK-ERROR:         cmlt c0.8h, v1.16b, v2.4s
    482 // CHECK-ERROR:                        ^
    483 
    484 //----------------------------------------------------------------------
    485 // Vector Compare Mask Bitwise Test (Integer)
    486 //----------------------------------------------------------------------
    487 
    488          // Mismatched vector types
    489          cmtst c0.16b, v1.16b, v2.4s
    490 
    491 // CHECK-ERROR: error: invalid operand for instruction
    492 // CHECK-ERROR:         cmtst c0.16b, v1.16b, v2.4s
    493 // CHECK-ERROR:                                  ^
    494 
    495 //----------------------------------------------------------------------
    496 // Vector Compare Mask Equal (Floating Point)
    497 //----------------------------------------------------------------------
    498 
    499         // Mismatched and invalid vector types
    500         fcmeq v0.2d, v1.2s, v2.2d
    501         fcmeq v0.16b, v1.16b, v2.16b
    502         fcmeq v0.8b, v1.4h, v2.4h
    503 
    504 // CHECK-ERROR: error: invalid operand for instruction
    505 // CHECK-ERROR:        fcmeq v0.2d, v1.2s, v2.2d
    506 // CHECK-ERROR:                        ^
    507 // CHECK-ERROR: error: invalid operand for instruction
    508 // CHECK-ERROR:        fcmeq v0.16b, v1.16b, v2.16b
    509 // CHECK-ERROR:                 ^
    510 // CHECK-ERROR: error: invalid operand for instruction
    511 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, v2.4h
    512 // CHECK-ERROR:                 ^
    513 
    514 //----------------------------------------------------------------------
    515 // Vector Compare Mask Greater Than Or Equal (Floating Point)
    516 // Vector Compare Mask Less Than Or Equal (Floating Point)
    517 // FCMLE is alias for FCMGE with operands reversed.
    518 //----------------------------------------------------------------------
    519 
    520         // Mismatched and invalid vector types
    521          fcmge v31.4s, v29.2s, v28.4s
    522          fcmge v3.8b, v8.2s, v12.2s
    523          fcmle v17.8h, v15.2d, v13.2d
    524 
    525 // CHECK-ERROR: error: invalid operand for instruction
    526 // CHECK-ERROR:        fcmge v31.4s, v29.2s, v28.4s
    527 // CHECK-ERROR:                          ^
    528 // CHECK-ERROR: error: invalid operand for instruction
    529 // CHECK-ERROR:        fcmge v3.8b, v8.2s, v12.2s
    530 // CHECK-ERROR:                 ^
    531 // CHECK-ERROR: error: invalid operand for instruction
    532 // CHECK-ERROR:        fcmle v17.8h, v15.2d, v13.2d
    533 // CHECK-ERROR:                 ^
    534 
    535 //----------------------------------------------------------------------
    536 // Vector Compare Mask Greater Than (Floating Point)
    537 // Vector Compare Mask Less Than (Floating Point)
    538 // FCMLT is alias for FCMGT with operands reversed.
    539 //----------------------------------------------------------------------
    540 
    541         // Mismatched and invalid vector types
    542          fcmgt v0.2d, v31.2s, v16.2s
    543          fcmgt v4.4s, v7.4s, v15.4h
    544          fcmlt v29.2d, v5.2d, v2.16b
    545 
    546 // CHECK-ERROR: error: invalid operand for instruction
    547 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, v16.2s
    548 // CHECK-ERROR:                         ^
    549 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
    550 // CHECK-ERROR:        fcmgt v4.4s, v7.4s, v15.4h
    551 // CHECK-ERROR:                                ^
    552 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
    553 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, v2.16b
    554 // CHECK-ERROR:                                ^
    555 
    556 //----------------------------------------------------------------------
    557 // Vector Compare Mask Equal to Zero (Integer)
    558 //----------------------------------------------------------------------
    559         // Mismatched vector types and invalid imm
    560          // Mismatched vector types
    561          cmeq c0.2d, v1.2s, #0
    562          cmeq c0.2d, v1.2d, #1
    563 
    564 // CHECK-ERROR: error: invalid operand for instruction
    565 // CHECK-ERROR:        cmeq c0.2d, v1.2s, #0
    566 // CHECK-ERROR:                       ^
    567 // CHECK-ERROR: error: invalid operand for instruction
    568 // CHECK-ERROR:        cmeq c0.2d, v1.2d, #1
    569 // CHECK-ERROR:                            ^
    570 
    571 //----------------------------------------------------------------------
    572 // Vector Compare Mask Greater Than or Equal to Zero (Signed Integer)
    573 //----------------------------------------------------------------------
    574         // Mismatched vector types and invalid imm
    575          cmge c0.8h, v1.8b, #0
    576          cmge c0.4s, v1.4s, #-1
    577 
    578 // CHECK-ERROR: error: invalid operand for instruction
    579 // CHECK-ERROR:        cmge c0.8h, v1.8b, #0
    580 // CHECK-ERROR:                       ^
    581 // CHECK-ERROR: error: invalid operand for instruction
    582 // CHECK-ERROR:         cmge c0.4s, v1.4s, #-1
    583 // CHECK-ERROR:                             ^
    584 
    585 //----------------------------------------------------------------------
    586 // Vector Compare Mask Greater Than Zero (Signed Integer)
    587 //----------------------------------------------------------------------
    588         // Mismatched vector types and invalid imm
    589          cmgt c0.8b, v1.4s, #0
    590          cmgt c0.8b, v1.8b, #-255
    591 
    592 // CHECK-ERROR: error: invalid operand for instruction
    593 // CHECK-ERROR:         cmgt c0.8b, v1.4s, #0
    594 // CHECK-ERROR:                        ^
    595 // CHECK-ERROR: error: invalid operand for instruction
    596 // CHECK-ERROR:         cmgt c0.8b, v1.8b, #-255
    597 // CHECK-ERROR:                             ^
    598 
    599 //----------------------------------------------------------------------
    600 // Vector Compare Mask Less Than or Equal To Zero (Signed Integer)
    601 //----------------------------------------------------------------------
    602         // Mismatched vector types and invalid imm
    603          cmle c0.4h, v1.2s, #0
    604          cmle c0.16b, v1.16b, #16
    605 
    606 // CHECK-ERROR: error: invalid operand for instruction
    607 // CHECK-ERROR:        cmle c0.4h, v1.2s, #0
    608 // CHECK-ERROR:                       ^
    609 // CHECK-ERROR: error: invalid operand for instruction
    610 // CHECK-ERROR:         cmle c0.16b, v1.16b, #16
    611 // CHECK-ERROR:                               ^
    612 //----------------------------------------------------------------------
    613 // Vector Compare Mask Less Than Zero (Signed Integer)
    614 //----------------------------------------------------------------------
    615         // Mismatched vector types and invalid imm
    616          cmlt c0.8h, v1.16b, #0
    617          cmlt c0.8h, v1.8h, #-15
    618 
    619 // CHECK-ERROR: error: invalid operand for instruction
    620 // CHECK-ERROR:         cmlt c0.8h, v1.16b, #0
    621 // CHECK-ERROR:                        ^
    622 // CHECK-ERROR: error: invalid operand for instruction
    623 // CHECK-ERROR:         cmlt c0.8h, v1.8h, #-15
    624 // CHECK-ERROR:                             ^
    625 
    626 //----------------------------------------------------------------------
    627 // Vector Compare Mask Equal to Zero (Floating Point)
    628 //----------------------------------------------------------------------
    629 
    630         // Mismatched and invalid vector types, invalid imm
    631         fcmeq v0.2d, v1.2s, #0.0
    632         fcmeq v0.16b, v1.16b, #0.0
    633         fcmeq v0.8b, v1.4h, #1.0
    634         fcmeq v0.8b, v1.4h, #1
    635 
    636 // CHECK-ERROR: error: invalid operand for instruction
    637 // CHECK-ERROR:        fcmeq v0.2d, v1.2s, #0.0
    638 // CHECK-ERROR:                        ^
    639 // CHECK-ERROR: error: invalid operand for instruction
    640 // CHECK-ERROR:        fcmeq v0.16b, v1.16b, #0.0
    641 // CHECK-ERROR:                 ^
    642 // CHECK-ERROR: error: invalid operand for instruction
    643 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1.0
    644 // CHECK-ERROR:                             ^
    645 // CHECK-ERROR: error:  Expected floating-point immediate
    646 // CHECK-ERROR:        fcmeq v0.8b, v1.4h, #1
    647 // CHECK-ERROR:                             ^
    648 //----------------------------------------------------------------------
    649 // Vector Compare Mask Greater Than or Equal to Zero (Floating Point)
    650 //----------------------------------------------------------------------
    651 
    652         // Mismatched and invalid vector types, invalid imm
    653          fcmge v31.4s, v29.2s, #0.0
    654          fcmge v3.8b, v8.2s, #0.0
    655          fcmle v17.8h, v15.2d, #-1.0
    656          fcmle v17.8h, v15.2d, #0
    657 
    658 // CHECK-ERROR: error: invalid operand for instruction
    659 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
    660 // CHECK-ERROR:                          ^
    661 // CHECK-ERROR: error: invalid operand for instruction
    662 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
    663 // CHECK-ERROR:                 ^
    664 // CHECK-ERROR: error: invalid operand for instruction
    665 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #-1.0
    666 // CHECK-ERROR:                               ^
    667 // CHECK-ERROR: error:  Expected floating-point immediate
    668 // CHECK-ERROR:        fcmle v17.8h, v15.2d, #0
    669 // CHECK-ERROR:                               ^
    670 //----------------------------------------------------------------------
    671 // Vector Compare Mask Greater Than Zero (Floating Point)
    672 //----------------------------------------------------------------------
    673         // Mismatched and invalid vector types, invalid imm
    674          fcmgt v0.2d, v31.2s, #0.0
    675          fcmgt v4.4s, v7.4h, #0.0
    676          fcmlt v29.2d, v5.2d, #255.0
    677          fcmlt v29.2d, v5.2d, #255
    678 
    679 // CHECK-ERROR: error: invalid operand for instruction
    680 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
    681 // CHECK-ERROR:                         ^
    682 // CHECK-ERROR: error: invalid operand for instruction
    683 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
    684 // CHECK-ERROR:                        ^
    685 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
    686 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255.0
    687 // CHECK-ERROR:                              ^
    688 // CHECK-ERROR: error:  Expected floating-point immediate
    689 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #255
    690 // CHECK-ERROR:                              ^
    691 
    692 //----------------------------------------------------------------------
    693 // Vector Compare Mask Less Than or Equal To Zero (Floating Point)
    694 //----------------------------------------------------------------------
    695         // Mismatched and invalid vector types, invalid imm
    696          fcmge v31.4s, v29.2s, #0.0
    697          fcmge v3.8b, v8.2s, #0.0
    698          fcmle v17.2d, v15.2d, #15.0
    699          fcmle v17.2d, v15.2d, #15
    700 
    701 // CHECK-ERROR: error: invalid operand for instruction
    702 // CHECK-ERROR:        fcmge v31.4s, v29.2s, #0.0
    703 // CHECK-ERROR:                          ^
    704 // CHECK-ERROR: error: invalid operand for instruction
    705 // CHECK-ERROR:        fcmge v3.8b, v8.2s, #0.0
    706 // CHECK-ERROR:                 ^
    707 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
    708 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15.0
    709 // CHECK-ERROR:                               ^
    710 // CHECK-ERROR: error:  Expected floating-point immediate
    711 // CHECK-ERROR:        fcmle v17.2d, v15.2d, #15
    712 // CHECK-ERROR:                              ^
    713 
    714 //----------------------------------------------------------------------
    715 // Vector Compare Mask Less Than Zero (Floating Point)
    716 //----------------------------------------------------------------------
    717         // Mismatched and invalid vector types, invalid imm
    718          fcmgt v0.2d, v31.2s, #0.0
    719          fcmgt v4.4s, v7.4h, #0.0
    720          fcmlt v29.2d, v5.2d, #16.0
    721          fcmlt v29.2d, v5.2d, #2
    722 
    723 // CHECK-ERROR: error: invalid operand for instruction
    724 // CHECK-ERROR:        fcmgt v0.2d, v31.2s, #0.0
    725 // CHECK-ERROR:                         ^
    726 // CHECK-ERROR: error: invalid operand for instruction
    727 // CHECK-ERROR:        fcmgt v4.4s, v7.4h, #0.0
    728 // CHECK-ERROR:                        ^
    729 // CHECK-ERROR: error: expected floating-point constant #0.0 or invalid register type
    730 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #16.0
    731 // CHECK-ERROR:                              ^
    732 // CHECK-ERROR: error:  Expected floating-point immediate
    733 // CHECK-ERROR:        fcmlt v29.2d, v5.2d, #2
    734 // CHECK-ERROR:                              ^
    735 
    736 /-----------------------------------------------------------------------
    737 // Vector Integer Halving Add (Signed)
    738 // Vector Integer Halving Add (Unsigned)
    739 // Vector Integer Halving Sub (Signed)
    740 // Vector Integer Halving Sub (Unsigned)
    741 //----------------------------------------------------------------------
    742         // Mismatched and invalid vector types (2d)
    743         shadd v0.2d, v1.2d, v2.2d
    744         uhadd v4.2s, v5.2s, v5.4h
    745         shsub v11.4h, v12.8h, v13.4h
    746         uhsub v31.16b, v29.8b, v28.8b
    747 
    748 // CHECK-ERROR: error: invalid operand for instruction
    749 // CHECK-ERROR:        shadd v0.2d, v1.2d, v2.2d
    750 // CHECK-ERROR:                 ^
    751 // CHECK-ERROR: error: invalid operand for instruction
    752 // CHECK-ERROR:        uhadd v4.2s, v5.2s, v5.4h
    753 // CHECK-ERROR:                               ^
    754 // CHECK-ERROR: error: invalid operand for instruction
    755 // CHECK-ERROR:        shsub v11.4h, v12.8h, v13.4h
    756 // CHECK-ERROR:                          ^
    757 // CHECK-ERROR: error: invalid operand for instruction
    758 // CHECK-ERROR:        uhsub v31.16b, v29.8b, v28.8b
    759 // CHECK-ERROR:                          ^
    760 
    761 //----------------------------------------------------------------------
    762 // Vector Integer Rouding Halving Add (Signed)
    763 // Vector Integer Rouding Halving Add (Unsigned)
    764 //----------------------------------------------------------------------
    765 
    766         // Mismatched and invalid vector types (2d)
    767         srhadd v0.2s, v1.2s, v2.2d
    768         urhadd v0.16b, v1.16b, v2.8h
    769 
    770 // CHECK-ERROR: error: invalid operand for instruction
    771 // CHECK-ERROR:        srhadd v0.2s, v1.2s, v2.2d
    772 // CHECK-ERROR:                                ^
    773 // CHECK-ERROR: error: invalid operand for instruction
    774 // CHECK-ERROR:        urhadd v0.16b, v1.16b, v2.8h
    775 // CHECK-ERROR:                                  ^
    776 
    777 //----------------------------------------------------------------------
    778 // Vector Integer Saturating Add (Signed)
    779 // Vector Integer Saturating Add (Unsigned)
    780 // Vector Integer Saturating Sub (Signed)
    781 // Vector Integer Saturating Sub (Unsigned)
    782 //----------------------------------------------------------------------
    783 
    784         // Mismatched vector types
    785         sqadd v0.2s, v1.2s, v2.2d
    786         uqadd v31.8h, v1.4h, v2.4h
    787         sqsub v10.8h, v1.16b, v2.16b
    788         uqsub v31.8b, v1.8b, v2.4s
    789 
    790 // CHECK-ERROR: error: invalid operand for instruction
    791 // CHECK-ERROR:        sqadd v0.2s, v1.2s, v2.2d
    792 // CHECK-ERROR:                               ^
    793 // CHECK-ERROR: error: invalid operand for instruction
    794 // CHECK-ERROR:        uqadd v31.8h, v1.4h, v2.4h
    795 // CHECK-ERROR:                         ^
    796 // CHECK-ERROR: error: invalid operand for instruction
    797 // CHECK-ERROR:        sqsub v10.8h, v1.16b, v2.16b
    798 // CHECK-ERROR:                         ^
    799 // CHECK-ERROR: error: invalid operand for instruction
    800 // CHECK-ERROR:        uqsub v31.8b, v1.8b, v2.4s
    801 // CHECK-ERROR:                                ^
    802 
    803 //----------------------------------------------------------------------
    804 // Scalar Integer Saturating Add (Signed)
    805 // Scalar Integer Saturating Add (Unsigned)
    806 // Scalar Integer Saturating Sub (Signed)
    807 // Scalar Integer Saturating Sub (Unsigned)
    808 //----------------------------------------------------------------------
    809 
    810       // Mismatched registers
    811          sqadd d0, s31, d2
    812          uqadd s0, s1, d2
    813          sqsub b0, b2, s18
    814          uqsub h1, h2, d2
    815 
    816 // CHECK-ERROR: error: invalid operand for instruction
    817 // CHECK-ERROR:        sqadd d0, s31, d2
    818 // CHECK-ERROR:                  ^
    819 // CHECK-ERROR: error: invalid operand for instruction
    820 // CHECK-ERROR:        uqadd s0, s1, d2
    821 // CHECK-ERROR:                      ^
    822 // CHECK-ERROR: error: invalid operand for instruction
    823 // CHECK-ERROR:        sqsub b0, b2, s18
    824 // CHECK-ERROR:                      ^
    825 // CHECK-ERROR: error: invalid operand for instruction
    826 // CHECK-ERROR:        uqsub h1, h2, d2
    827 // CHECK-ERROR:                      ^
    828 
    829 
    830 //----------------------------------------------------------------------
    831 // Vector Shift Left (Signed and Unsigned Integer)
    832 //----------------------------------------------------------------------
    833         // Mismatched vector types
    834         sshl v0.4s, v15.2s, v16.2s
    835         ushl v1.16b, v25.16b, v6.8h
    836 
    837 // CHECK-ERROR: error: invalid operand for instruction
    838 // CHECK-ERROR:        sshl v0.4s, v15.2s, v16.2s
    839 // CHECK-ERROR:                        ^
    840 // CHECK-ERROR: error: invalid operand for instruction
    841 // CHECK-ERROR:        ushl v1.16b, v25.16b, v6.8h
    842 // CHECK-ERROR:                                 ^
    843 
    844 //----------------------------------------------------------------------
    845 // Vector Saturating Shift Left (Signed and Unsigned Integer)
    846 //----------------------------------------------------------------------
    847         // Mismatched vector types
    848         sqshl v0.2s, v15.2s, v16.2d
    849         uqshl v1.8b, v25.4h, v6.8h
    850 
    851 // CHECK-ERROR: error: invalid operand for instruction
    852 // CHECK-ERROR:        sqshl v0.2s, v15.2s, v16.2d
    853 // CHECK-ERROR:                                 ^
    854 // CHECK-ERROR: error: invalid operand for instruction
    855 // CHECK-ERROR:        uqshl v1.8b, v25.4h, v6.8h
    856 // CHECK-ERROR:                         ^
    857 
    858 //----------------------------------------------------------------------
    859 // Vector Rouding Shift Left (Signed and Unsigned Integer)
    860 //----------------------------------------------------------------------
    861         // Mismatched vector types
    862         srshl v0.8h, v15.8h, v16.16b
    863         urshl v1.2d, v25.2d, v6.4s
    864 
    865 // CHECK-ERROR: error: invalid operand for instruction
    866 // CHECK-ERROR:        srshl v0.8h, v15.8h, v16.16b
    867 // CHECK-ERROR:                                 ^
    868 // CHECK-ERROR: error: invalid operand for instruction
    869 // CHECK-ERROR:        urshl v1.2d, v25.2d, v6.4s
    870 // CHECK-ERROR:                                ^
    871 
    872 //----------------------------------------------------------------------
    873 // Vector Saturating Rouding Shift Left (Signed and Unsigned Integer)
    874 //----------------------------------------------------------------------
    875         // Mismatched vector types
    876         sqrshl v0.2s, v15.8h, v16.16b
    877         uqrshl v1.4h, v25.4h,  v6.2d
    878 
    879 // CHECK-ERROR: error: invalid operand for instruction
    880 // CHECK-ERROR:        sqrshl v0.2s, v15.8h, v16.16b
    881 // CHECK-ERROR:                          ^
    882 // CHECK-ERROR: error: invalid operand for instruction
    883 // CHECK-ERROR:        uqrshl v1.4h, v25.4h,  v6.2d
    884 // CHECK-ERROR:                                  ^
    885 
    886 //----------------------------------------------------------------------
    887 // Scalar Integer Shift Left (Signed, Unsigned)
    888 //----------------------------------------------------------------------
    889         // Mismatched and invalid vector types
    890         sshl d0, d1, s2
    891         ushl b2, b0, b1
    892 
    893 // CHECK-ERROR: error: invalid operand for instruction
    894 // CHECK-ERROR:        sshl d0, d1, s2
    895 // CHECK-ERROR:                     ^
    896 // CHECK-ERROR: error: invalid operand for instruction
    897 // CHECK-ERROR:        ushl b2, b0, b1
    898 // CHECK-ERROR:             ^
    899 
    900 //----------------------------------------------------------------------
    901 // Scalar Integer Saturating Shift Left (Signed, Unsigned)
    902 //----------------------------------------------------------------------
    903 
    904         // Mismatched vector types
    905         sqshl b0, b1, s0
    906         uqshl h0, h1, b0
    907         sqshl s0, s1, h0
    908         uqshl d0, d1, b0
    909 
    910 // CHECK-ERROR: error: invalid operand for instruction
    911 // CHECK-ERROR:        sqshl b0, b1, s0
    912 // CHECK-ERROR:                      ^
    913 // CHECK-ERROR: error: invalid operand for instruction
    914 // CHECK-ERROR:        uqshl h0, h1, b0
    915 // CHECK-ERROR:                      ^
    916 // CHECK-ERROR: error: invalid operand for instruction
    917 // CHECK-ERROR:        sqshl s0, s1, h0
    918 // CHECK-ERROR:                      ^
    919 // CHECK-ERROR: error: invalid operand for instruction
    920 // CHECK-ERROR:        uqshl d0, d1, b0
    921 // CHECK-ERROR:                      ^
    922 
    923 //----------------------------------------------------------------------
    924 // Scalar Integer Rouding Shift Left (Signed, Unsigned)
    925 //----------------------------------------------------------------------
    926         // Mismatched and invalid vector types
    927         srshl h0, h1, h2
    928         urshl s0, s1, s2
    929 
    930 // CHECK-ERROR: error: invalid operand for instruction
    931 // CHECK-ERROR:        srshl h0, h1, h2
    932 // CHECK-ERROR:              ^
    933 // CHECK-ERROR: error: invalid operand for instruction
    934 // CHECK-ERROR:        urshl s0, s1, s2
    935 // CHECK-ERROR:              ^
    936 
    937 
    938 //----------------------------------------------------------------------
    939 // Scalar Integer Saturating Rounding Shift Left (Signed, Unsigned)
    940 //----------------------------------------------------------------------
    941 
    942         // Mismatched vector types
    943         sqrshl b0, b1, s0
    944         uqrshl h0, h1, b0
    945         sqrshl s0, s1, h0
    946         uqrshl d0, d1, b0
    947 
    948 // CHECK-ERROR: error: invalid operand for instruction
    949 // CHECK-ERROR:        sqrshl b0, b1, s0
    950 // CHECK-ERROR:                       ^
    951 // CHECK-ERROR: error: invalid operand for instruction
    952 // CHECK-ERROR:        uqrshl h0, h1, b0
    953 // CHECK-ERROR:                       ^
    954 // CHECK-ERROR: error: invalid operand for instruction
    955 // CHECK-ERROR:        sqrshl s0, s1, h0
    956 // CHECK-ERROR:                       ^
    957 // CHECK-ERROR: error: invalid operand for instruction
    958 // CHECK-ERROR:        uqrshl d0, d1, b0
    959 // CHECK-ERROR:                       ^
    960 
    961 
    962 //----------------------------------------------------------------------
    963 // Vector Maximum (Signed, Unsigned)
    964 //----------------------------------------------------------------------
    965         // Mismatched and invalid vector types
    966         smax v0.2d, v1.2d, v2.2d
    967         umax v0.4h, v1.4h, v2.2s
    968 
    969 // CHECK-ERROR: error: invalid operand for instruction
    970 // CHECK-ERROR:        smax v0.2d, v1.2d, v2.2d
    971 // CHECK-ERROR:                ^
    972 // CHECK-ERROR: error: invalid operand for instruction
    973 // CHECK-ERROR:        umax v0.4h, v1.4h, v2.2s
    974 // CHECK-ERROR:                              ^
    975 
    976 //----------------------------------------------------------------------
    977 // Vector Minimum (Signed, Unsigned)
    978 //----------------------------------------------------------------------
    979         // Mismatched and invalid vector types
    980         smin v0.2d, v1.2d, v2.2d
    981         umin v0.2s, v1.2s, v2.8b
    982 
    983 // CHECK-ERROR: error: invalid operand for instruction
    984 // CHECK-ERROR:        smin v0.2d, v1.2d, v2.2d
    985 // CHECK-ERROR:                ^
    986 // CHECK-ERROR: error: invalid operand for instruction
    987 // CHECK-ERROR:        umin v0.2s, v1.2s, v2.8b
    988 // CHECK-ERROR:                             ^
    989 
    990 
    991 //----------------------------------------------------------------------
    992 // Vector Maximum (Floating Point)
    993 //----------------------------------------------------------------------
    994         // Mismatched and invalid vector types
    995         fmax v0.2s, v1.2s, v2.4s
    996         fmax v0.8b, v1.8b, v2.8b
    997 
    998 // CHECK-ERROR: error: invalid operand for instruction
    999 // CHECK-ERROR:        fmax v0.2s, v1.2s, v2.4s
   1000 // CHECK-ERROR:                              ^
   1001 // CHECK-ERROR: error: invalid operand for instruction
   1002 // CHECK-ERROR:        fmax v0.8b, v1.8b, v2.8b
   1003 // CHECK-ERROR:                ^
   1004 //----------------------------------------------------------------------
   1005 // Vector Minimum (Floating Point)
   1006 //----------------------------------------------------------------------
   1007         // Mismatched and invalid vector types
   1008         fmin v0.4s, v1.4s, v2.2d
   1009         fmin v0.8h, v1.8h, v2.8h
   1010 
   1011 // CHECK-ERROR: error: invalid operand for instruction
   1012 // CHECK-ERROR:        fmin v0.4s, v1.4s, v2.2d
   1013 // CHECK-ERROR:                              ^
   1014 // CHECK-ERROR: error: invalid operand for instruction
   1015 // CHECK-ERROR:        fmin v0.8h, v1.8h, v2.8h
   1016 // CHECK-ERROR:                ^
   1017 
   1018 //----------------------------------------------------------------------
   1019 // Vector maxNum (Floating Point)
   1020 //----------------------------------------------------------------------
   1021         // Mismatched and invalid vector types
   1022         fmaxnm v0.2s, v1.2s, v2.2d
   1023         fmaxnm v0.4h, v1.8h, v2.4h
   1024 
   1025 // CHECK-ERROR: error: invalid operand for instruction
   1026 // CHECK-ERROR:        fmaxnm v0.2s, v1.2s, v2.2d
   1027 // CHECK-ERROR:                                ^
   1028 // CHECK-ERROR: error: invalid operand for instruction
   1029 // CHECK-ERROR:        fmaxnm v0.4h, v1.8h, v2.4h
   1030 // CHECK-ERROR:                  ^
   1031 
   1032 //----------------------------------------------------------------------
   1033 // Vector minNum (Floating Point)
   1034 //----------------------------------------------------------------------
   1035         // Mismatched and invalid vector types
   1036         fminnm v0.4s, v1.2s, v2.4s
   1037         fminnm v0.16b, v0.16b, v0.16b
   1038 
   1039 // CHECK-ERROR: error: invalid operand for instruction
   1040 // CHECK-ERROR:        fminnm v0.4s, v1.2s, v2.4s
   1041 // CHECK-ERROR:                         ^
   1042 // CHECK-ERROR: error: invalid operand for instruction
   1043 // CHECK-ERROR:        fminnm v0.16b, v0.16b, v0.16b
   1044 // CHECK-ERROR:                  ^
   1045 
   1046 
   1047 //----------------------------------------------------------------------
   1048 // Vector Maximum Pairwise (Signed, Unsigned)
   1049 //----------------------------------------------------------------------
   1050         // Mismatched and invalid vector types
   1051         smaxp v0.2d, v1.2d, v2.2d
   1052         umaxp v0.4h, v1.4h, v2.2s
   1053 
   1054 // CHECK-ERROR: error: invalid operand for instruction
   1055 // CHECK-ERROR:        smaxp v0.2d, v1.2d, v2.2d
   1056 // CHECK-ERROR:                 ^
   1057 // CHECK-ERROR: error: invalid operand for instruction
   1058 // CHECK-ERROR:        umaxp v0.4h, v1.4h, v2.2s
   1059 // CHECK-ERROR:                               ^
   1060 
   1061 //----------------------------------------------------------------------
   1062 // Vector Minimum Pairwise (Signed, Unsigned)
   1063 //----------------------------------------------------------------------
   1064         // Mismatched and invalid vector types
   1065         sminp v0.2d, v1.2d, v2.2d
   1066         uminp v0.2s, v1.2s, v2.8b
   1067 
   1068 // CHECK-ERROR: error: invalid operand for instruction
   1069 // CHECK-ERROR:        sminp v0.2d, v1.2d, v2.2d
   1070 // CHECK-ERROR:                 ^
   1071 // CHECK-ERROR: error: invalid operand for instruction
   1072 // CHECK-ERROR:        uminp v0.2s, v1.2s, v2.8b
   1073 // CHECK-ERROR:                               ^
   1074 
   1075 
   1076 //----------------------------------------------------------------------
   1077 // Vector Maximum Pairwise (Floating Point)
   1078 //----------------------------------------------------------------------
   1079         // Mismatched and invalid vector types
   1080         fmaxp v0.2s, v1.2s, v2.4s
   1081         fmaxp v0.8b, v1.8b, v2.8b
   1082 
   1083 // CHECK-ERROR: error: invalid operand for instruction
   1084 // CHECK-ERROR:        fmaxp v0.2s, v1.2s, v2.4s
   1085 // CHECK-ERROR:                               ^
   1086 // CHECK-ERROR: error: invalid operand for instruction
   1087 // CHECK-ERROR:        fmaxp v0.8b, v1.8b, v2.8b
   1088 // CHECK-ERROR:                 ^
   1089 //----------------------------------------------------------------------
   1090 // Vector Minimum Pairwise (Floating Point)
   1091 //----------------------------------------------------------------------
   1092         // Mismatched and invalid vector types
   1093         fminp v0.4s, v1.4s, v2.2d
   1094         fminp v0.8h, v1.8h, v2.8h
   1095 
   1096 // CHECK-ERROR: error: invalid operand for instruction
   1097 // CHECK-ERROR:        fminp v0.4s, v1.4s, v2.2d
   1098 // CHECK-ERROR:                               ^
   1099 // CHECK-ERROR: error: invalid operand for instruction
   1100 // CHECK-ERROR:        fminp v0.8h, v1.8h, v2.8h
   1101 // CHECK-ERROR:                 ^
   1102 
   1103 //----------------------------------------------------------------------
   1104 // Vector maxNum Pairwise (Floating Point)
   1105 //----------------------------------------------------------------------
   1106         // Mismatched and invalid vector types
   1107         fmaxnmp v0.2s, v1.2s, v2.2d
   1108         fmaxnmp v0.4h, v1.8h, v2.4h
   1109 
   1110 // CHECK-ERROR: error: invalid operand for instruction
   1111 // CHECK-ERROR:        fmaxnmp v0.2s, v1.2s, v2.2d
   1112 // CHECK-ERROR:                                 ^
   1113 // CHECK-ERROR: error: invalid operand for instruction
   1114 // CHECK-ERROR:        fmaxnmp v0.4h, v1.8h, v2.4h
   1115 // CHECK-ERROR:                   ^
   1116 
   1117 //----------------------------------------------------------------------
   1118 // Vector minNum Pairwise (Floating Point)
   1119 //----------------------------------------------------------------------
   1120         // Mismatched and invalid vector types
   1121         fminnmp v0.4s, v1.2s, v2.4s
   1122         fminnmp v0.16b, v0.16b, v0.16b
   1123 
   1124 // CHECK-ERROR: error: invalid operand for instruction
   1125 // CHECK-ERROR:        fminnmp v0.4s, v1.2s, v2.4s
   1126 // CHECK-ERROR:                          ^
   1127 // CHECK-ERROR: error: invalid operand for instruction
   1128 // CHECK-ERROR:        fminnmp v0.16b, v0.16b, v0.16b
   1129 // CHECK-ERROR:                   ^
   1130 
   1131 
   1132 //----------------------------------------------------------------------
   1133 // Vector Add Pairwise (Integer)
   1134 //----------------------------------------------------------------------
   1135 
   1136         // Mismatched vector types
   1137         addp v0.16b, v1.8b, v2.8b
   1138 
   1139 // CHECK-ERROR: error: invalid operand for instruction
   1140 // CHECK-ERROR:         addp v0.16b, v1.8b, v2.8b
   1141 // CHECK-ERROR:                         ^
   1142 
   1143 //----------------------------------------------------------------------
   1144 // Vector Add Pairwise (Floating Point)
   1145 //----------------------------------------------------------------------
   1146         // Mismatched and invalid vector types
   1147         faddp v0.16b, v1.8b, v2.8b
   1148         faddp v0.2d, v1.2d, v2.8h
   1149 
   1150 // CHECK-ERROR: error: invalid operand for instruction
   1151 // CHECK-ERROR:         faddp v0.16b, v1.8b, v2.8b
   1152 // CHECK-ERROR:                  ^
   1153 // CHECK-ERROR: error: invalid operand for instruction
   1154 // CHECK-ERROR:         faddp v0.2d, v1.2d, v2.8h
   1155 // CHECK-ERROR:                                ^
   1156 
   1157 
   1158 //----------------------------------------------------------------------
   1159 // Vector Saturating Doubling Multiply High
   1160 //----------------------------------------------------------------------
   1161          // Mismatched and invalid vector types
   1162          sqdmulh v2.4h, v25.8h, v3.4h
   1163          sqdmulh v12.2d, v5.2d, v13.2d
   1164          sqdmulh v3.8b, v1.8b, v30.8b
   1165 
   1166 // CHECK-ERROR: error: invalid operand for instruction
   1167 // CHECK-ERROR:         sqdmulh v2.4h, v25.8h, v3.4h
   1168 // CHECK-ERROR:                            ^
   1169 // CHECK-ERROR: error: invalid operand for instruction
   1170 // CHECK-ERROR:         sqdmulh v12.2d, v5.2d, v13.2d
   1171 // CHECK-ERROR:                     ^
   1172 // CHECK-ERROR: error: invalid operand for instruction
   1173 // CHECK-ERROR:         sqdmulh v3.8b, v1.8b, v30.8b
   1174 // CHECK-ERROR:                    ^
   1175 
   1176 //----------------------------------------------------------------------
   1177 // Vector Saturating Rouding Doubling Multiply High
   1178 //----------------------------------------------------------------------
   1179          // Mismatched and invalid vector types
   1180          sqrdmulh v2.2s, v25.4s, v3.4s
   1181          sqrdmulh v12.16b, v5.16b, v13.16b
   1182          sqrdmulh v3.4h, v1.4h, v30.2d
   1183 
   1184 
   1185 // CHECK-ERROR: error: invalid operand for instruction
   1186 // CHECK-ERROR:         sqrdmulh v2.2s, v25.4s, v3.4s
   1187 // CHECK-ERROR:                             ^
   1188 // CHECK-ERROR: error: invalid operand for instruction
   1189 // CHECK-ERROR:         sqrdmulh v12.16b, v5.16b, v13.16b
   1190 // CHECK-ERROR:                       ^
   1191 // CHECK-ERROR: error: invalid operand for instruction
   1192 // CHECK-ERROR:         sqrdmulh v3.4h, v1.4h, v30.2d
   1193 // CHECK-ERROR:                                    ^
   1194 
   1195 //----------------------------------------------------------------------
   1196 // Vector Multiply Extended
   1197 //----------------------------------------------------------------------
   1198          // Mismatched and invalid vector types
   1199       fmulx v21.2s, v5.2s, v13.2d
   1200       fmulx v1.4h, v25.4h, v3.4h
   1201 
   1202 // CHECK-ERROR: error: invalid operand for instruction
   1203 // CHECK-ERROR:         fmulx v21.2s, v5.2s, v13.2d
   1204 // CHECK-ERROR:                                  ^
   1205 // CHECK-ERROR: error: invalid operand for instruction
   1206 // CHECK-ERROR:         fmulx v1.4h, v25.4h, v3.4h
   1207 // CHECK-ERROR:                  ^
   1208