Home | History | Annotate | Download | only in AArch64
      1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
      2 // RUN: FileCheck --check-prefix=CHECK-ERROR --check-prefix=CHECK-ERROR-ARM64 < %t %s
      3 
      4 //------------------------------------------------------------------------------
      5 // Add/sub (extended register)
      6 //------------------------------------------------------------------------------
      7 
      8         // Mismatched final register and extend
      9         add x2, x3, x5, sxtb
     10         add x2, x4, w2, uxtx
     11         add w5, w7, x9, sxtx
     12 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
     13 // CHECK-ERROR:         add x2, x3, x5, sxtb
     14 // CHECK-ERROR:                         ^
     15 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
     16 // CHECK-ERROR:         add x2, x4, w2, uxtx
     17 // CHECK-ERROR:                         ^
     18 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
     19 // CHECK-ERROR:         add w5, w7, x9, sxtx
     20 // CHECK-ERROR:                     ^
     21 
     22         // Out of range extends
     23         add x9, x10, w11, uxtb #-1
     24         add x3, x5, w7, uxtb #5
     25         sub x9, x15, x2, uxth #5
     26 // CHECK-ERROR: error: expected integer shift amount
     27 // CHECK-ERROR:         add x9, x10, w11, uxtb #-1
     28 // CHECK-ERROR:                                 ^
     29 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
     30 // CHECK-ERROR:         add x3, x5, w7, uxtb #5
     31 // CHECK-ERROR:                         ^
     32 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
     33 // CHECK-ERROR:         sub x9, x15, x2, uxth #5
     34 // CHECK-ERROR:                          ^
     35 
     36         // Wrong registers on normal variants
     37         add xzr, x3, x5, uxtx
     38         sub x3, xzr, w9, sxth #1
     39         add x1, x2, sp, uxtx
     40 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
     41 // CHECK-ERROR:         add xzr, x3, x5, uxtx
     42 // CHECK-ERROR:                          ^
     43 // CHECK-ERROR: error: invalid operand for instruction
     44 // CHECK-ERROR:         sub x3, xzr, w9, sxth #1
     45 // CHECK-ERROR:                 ^
     46 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
     47 // CHECK-ERROR:         add x1, x2, sp, uxtx
     48 // CHECK-ERROR:                     ^
     49 
     50         // Wrong registers on flag-setting variants
     51         adds sp, x3, w2, uxtb
     52         adds x3, xzr, x9, uxtx
     53         subs x2, x1, sp, uxtx
     54         adds x2, x1, sp, uxtb #2
     55 // CHECK-ERROR: error: invalid operand for instruction
     56 // CHECK-ERROR:         adds sp, x3, w2, uxtb
     57 // CHECK-ERROR:              ^
     58 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
     59 // CHECK-ERROR:         adds x3, xzr, x9, uxtx
     60 // CHECK-ERROR:                           ^
     61 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
     62 // CHECK-ERROR:         subs x2, x1, sp, uxtx
     63 // CHECK-ERROR:                      ^
     64 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
     65 // CHECK-ERROR:         adds x2, x1, sp, uxtb #2
     66 // CHECK-ERROR:                      ^
     67 
     68         // Amount not optional if lsl valid and used
     69         add sp, x5, x7, lsl
     70 // CHECK-ERROR: error: expected #imm after shift specifier
     71 // CHECK-ERROR:         add sp, x5, x7, lsl
     72 // CHECK-ERROR:                             ^
     73 
     74 //------------------------------------------------------------------------------
     75 // Add/sub (immediate)
     76 //------------------------------------------------------------------------------
     77 
     78 // Out of range immediates: < 0 or more than 12 bits
     79         add w4, w5, #-1
     80         add w5, w6, #0x1000
     81         add w4, w5, #-1, lsl #12
     82         add w5, w6, #0x1000, lsl #12
     83 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
     84 // CHECK-ERROR-NEXT:         add w4, w5, #-1
     85 // CHECK-ERROR-NEXT:                     ^
     86 // CHECK-ERROR-AARCH64-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
     87 // CHECK-ERROR-AARCH64-NEXT:         add w5, w6, #0x1000
     88 // CHECK-ERROR-AARCH64-NEXT:                     ^
     89 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
     90 // CHECK-ERROR-NEXT:         add w4, w5, #-1, lsl #12
     91 // CHECK-ERROR-NEXT:                     ^
     92 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
     93 // CHECK-ERROR-NEXT:         add w5, w6, #0x1000, lsl #12
     94 // CHECK-ERROR-NEXT:                     ^
     95 
     96 // Only lsl #0 and lsl #12 are allowed
     97         add w2, w3, #0x1, lsl #1
     98         add w5, w17, #0xfff, lsl #13
     99         add w17, w20, #0x1000, lsl #12
    100         sub xsp, x34, #0x100, lsl #-1
    101 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
    102 // CHECK-ERROR-NEXT:         add w2, w3, #0x1, lsl #1
    103 // CHECK-ERROR-NEXT:                                ^
    104 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
    105 // CHECK-ERROR-NEXT:         add w5, w17, #0xfff, lsl #13
    106 // CHECK-ERROR-NEXT:                                   ^
    107 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
    108 // CHECK-ERROR-NEXT:         add w17, w20, #0x1000, lsl #12
    109 // CHECK-ERROR-NEXT:                       ^
    110 // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate
    111 // CHECK-ERROR-NEXT:         sub xsp, x34, #0x100, lsl #-1
    112 // CHECK-ERROR-NEXT:                                    ^
    113 
    114 // Incorrect registers (w31 doesn't exist at all, and 31 decodes to sp for these).
    115         add w31, w20, #1234
    116         add wzr, w20, #0x123
    117         add w20, wzr, #0x321
    118         add wzr, wzr, #0xfff
    119 // CHECK-ERROR: error: invalid operand for instruction
    120 // CHECK-ERROR-NEXT:         add w31, w20, #1234
    121 // CHECK-ERROR-NEXT:             ^
    122 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    123 // CHECK-ERROR-NEXT:         add wzr, w20, #0x123
    124 // CHECK-ERROR-NEXT:             ^
    125 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    126 // CHECK-ERROR-NEXT:         add w20, wzr, #0x321
    127 // CHECK-ERROR-NEXT:                  ^
    128 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    129 // CHECK-ERROR-NEXT:         add wzr, wzr, #0xfff
    130 // CHECK-ERROR-NEXT:             ^
    131 
    132 // Mixed register classes
    133         add xsp, w2, #123
    134         sub w2, x30, #32
    135 // CHECK-ERROR: error: invalid operand for instruction
    136 // CHECK-ERROR-NEXT:         add xsp, w2, #123
    137 // CHECK-ERROR-NEXT:             ^
    138 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    139 // CHECK-ERROR-NEXT:         sub w2, x30, #32
    140 // CHECK-ERROR-NEXT:                 ^
    141 
    142 // Out of range immediate
    143         adds w0, w5, #0x10000
    144 // CHECK-ERROR-AARCH64: error: expected compatible register, symbol or integer in range [0, 4095]
    145 // CHECK-ERROR-AARCH64-NEXT:         adds w0, w5, #0x10000
    146 // CHECK-ERROR-AARCH64-NEXT:                      ^
    147 
    148 // Wn|WSP should be in second place
    149         adds w4, wzr, #0x123
    150 // ...but wzr is the 31 destination
    151         subs wsp, w5, #123
    152         subs x5, xzr, #0x456, lsl #12
    153 // CHECK-ERROR: error: invalid operand for instruction
    154 // CHECK-ERROR-NEXT:         adds w4, wzr, #0x123
    155 // CHECK-ERROR-NEXT:                  ^
    156 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    157 // CHECK-ERROR-NEXT:         subs wsp, w5, #123
    158 // CHECK-ERROR-NEXT:              ^
    159 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    160 // CHECK-ERROR-NEXT:         subs x5, xzr, #0x456, lsl #12
    161 // CHECK-ERROR-NEXT:                  ^
    162 
    163         // MOV alias should not accept any fiddling
    164         mov x2, xsp, #123
    165         mov wsp, w27, #0xfff, lsl #12
    166 // CHECK-ERROR: error: expected compatible register or logical immediate
    167 // CHECK-ERROR-NEXT:         mov x2, xsp, #123
    168 // CHECK-ERROR-NEXT:                 ^
    169 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    170 // CHECK-ERROR-NEXT:         mov wsp, w27, #0xfff, lsl #12
    171 // CHECK-ERROR-NEXT:                       ^
    172 
    173         // A relocation should be provided for symbols
    174         add x3, x9, #variable
    175 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
    176 // CHECK-ERROR-NEXT:         add x3, x9, #variable
    177 // CHECK-ERROR-NEXT:                      ^
    178 
    179 
    180 //------------------------------------------------------------------------------
    181 // Add-subtract (shifted register)
    182 //------------------------------------------------------------------------------
    183 
    184         add wsp, w1, w2, lsr #3
    185         add x4, sp, x9, asr #5
    186         add x9, x10, x5, ror #3
    187 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    188 // CHECK-ERROR-NEXT:         add wsp, w1, w2, lsr #3
    189 // CHECK-ERROR-NEXT:                          ^
    190 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    191 // CHECK-ERROR-NEXT:         add x4, sp, x9, asr #5
    192 // CHECK-ERROR-NEXT:                         ^
    193 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    194 // CHECK-ERROR-NEXT:         add x9, x10, x5, ror #3
    195 // CHECK-ERROR-NEXT:                          ^
    196 
    197         add w1, w2, w3, lsl #-1
    198         add w1, w2, w3, lsl #32
    199         add w1, w2, w3, lsr #-1
    200         add w1, w2, w3, lsr #32
    201         add w1, w2, w3, asr #-1
    202         add w1, w2, w3, asr #32
    203         add x1, x2, x3, lsl #-1
    204         add x1, x2, x3, lsl #64
    205         add x1, x2, x3, lsr #-1
    206         add x1, x2, x3, lsr #64
    207         add x1, x2, x3, asr #-1
    208         add x1, x2, x3, asr #64
    209 // CHECK-ERROR: error: expected integer shift amount
    210 // CHECK-ERROR-NEXT:         add w1, w2, w3, lsl #-1
    211 // CHECK-ERROR-NEXT:                              ^
    212 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    213 // CHECK-ERROR-NEXT:         add w1, w2, w3, lsl #32
    214 // CHECK-ERROR-NEXT:                         ^
    215 // CHECK-ERROR-NEXT: error: expected integer shift amount
    216 // CHECK-ERROR-NEXT:         add w1, w2, w3, lsr #-1
    217 // CHECK-ERROR-NEXT:                              ^
    218 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    219 // CHECK-ERROR-NEXT:         add w1, w2, w3, lsr #32
    220 // CHECK-ERROR-NEXT:                         ^
    221 // CHECK-ERROR-NEXT: error: expected integer shift amount
    222 // CHECK-ERROR-NEXT:         add w1, w2, w3, asr #-1
    223 // CHECK-ERROR-NEXT:                              ^
    224 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    225 // CHECK-ERROR-NEXT:         add w1, w2, w3, asr #32
    226 // CHECK-ERROR-NEXT:                         ^
    227 // CHECK-ERROR-NEXT: error: expected integer shift amount
    228 // CHECK-ERROR-NEXT:         add x1, x2, x3, lsl #-1
    229 // CHECK-ERROR-NEXT:                              ^
    230 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    231 // CHECK-ERROR-NEXT:         add x1, x2, x3, lsl #64
    232 // CHECK-ERROR-NEXT:                         ^
    233 // CHECK-ERROR-NEXT: error: expected integer shift amount
    234 // CHECK-ERROR-NEXT:         add x1, x2, x3, lsr #-1
    235 // CHECK-ERROR-NEXT:                              ^
    236 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    237 // CHECK-ERROR-NEXT:         add x1, x2, x3, lsr #64
    238 // CHECK-ERROR-NEXT:                         ^
    239 // CHECK-ERROR-NEXT: error: expected integer shift amount
    240 // CHECK-ERROR-NEXT:         add x1, x2, x3, asr #-1
    241 // CHECK-ERROR-NEXT:                              ^
    242 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    243 // CHECK-ERROR-NEXT:         add x1, x2, x3, asr #64
    244 // CHECK-ERROR-NEXT:                         ^
    245 
    246         adds w1, w2, w3, lsl #-1
    247         adds w1, w2, w3, lsl #32
    248         adds w1, w2, w3, lsr #-1
    249         adds w1, w2, w3, lsr #32
    250         adds w1, w2, w3, asr #-1
    251         adds w1, w2, w3, asr #32
    252         adds x1, x2, x3, lsl #-1
    253         adds x1, x2, x3, lsl #64
    254         adds x1, x2, x3, lsr #-1
    255         adds x1, x2, x3, lsr #64
    256         adds x1, x2, x3, asr #-1
    257         adds x1, x2, x3, asr #64
    258 // CHECK-ERROR: error: expected integer shift amount
    259 // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsl #-1
    260 // CHECK-ERROR-NEXT:                               ^
    261 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    262 // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsl #32
    263 // CHECK-ERROR-NEXT:                          ^
    264 // CHECK-ERROR-NEXT: error: expected integer shift amount
    265 // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsr #-1
    266 // CHECK-ERROR-NEXT:                               ^
    267 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    268 // CHECK-ERROR-NEXT:         adds w1, w2, w3, lsr #32
    269 // CHECK-ERROR-NEXT:                          ^
    270 // CHECK-ERROR-NEXT: error: expected integer shift amount
    271 // CHECK-ERROR-NEXT:         adds w1, w2, w3, asr #-1
    272 // CHECK-ERROR-NEXT:                               ^
    273 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    274 // CHECK-ERROR-NEXT:         adds w1, w2, w3, asr #32
    275 // CHECK-ERROR-NEXT:                          ^
    276 // CHECK-ERROR-NEXT: error: expected integer shift amount
    277 // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsl #-1
    278 // CHECK-ERROR-NEXT:                               ^
    279 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    280 // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsl #64
    281 // CHECK-ERROR-NEXT:                          ^
    282 // CHECK-ERROR-NEXT: error: expected integer shift amount
    283 // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsr #-1
    284 // CHECK-ERROR-NEXT:                               ^
    285 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    286 // CHECK-ERROR-NEXT:         adds x1, x2, x3, lsr #64
    287 // CHECK-ERROR-NEXT:                          ^
    288 // CHECK-ERROR-NEXT: error: expected integer shift amount
    289 // CHECK-ERROR-NEXT:         adds x1, x2, x3, asr #-1
    290 // CHECK-ERROR-NEXT:                               ^
    291 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    292 // CHECK-ERROR-NEXT:         adds x1, x2, x3, asr #64
    293 // CHECK-ERROR-NEXT:                          ^
    294 
    295         sub w1, w2, w3, lsl #-1
    296         sub w1, w2, w3, lsl #32
    297         sub w1, w2, w3, lsr #-1
    298         sub w1, w2, w3, lsr #32
    299         sub w1, w2, w3, asr #-1
    300         sub w1, w2, w3, asr #32
    301         sub x1, x2, x3, lsl #-1
    302         sub x1, x2, x3, lsl #64
    303         sub x1, x2, x3, lsr #-1
    304         sub x1, x2, x3, lsr #64
    305         sub x1, x2, x3, asr #-1
    306         sub x1, x2, x3, asr #64
    307 // CHECK-ERROR: error: expected integer shift amount
    308 // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsl #-1
    309 // CHECK-ERROR-NEXT:                              ^
    310 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    311 // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsl #32
    312 // CHECK-ERROR-NEXT:                         ^
    313 // CHECK-ERROR-NEXT: error: expected integer shift amount
    314 // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsr #-1
    315 // CHECK-ERROR-NEXT:                              ^
    316 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    317 // CHECK-ERROR-NEXT:         sub w1, w2, w3, lsr #32
    318 // CHECK-ERROR-NEXT:                         ^
    319 // CHECK-ERROR-NEXT: error: expected integer shift amount
    320 // CHECK-ERROR-NEXT:         sub w1, w2, w3, asr #-1
    321 // CHECK-ERROR-NEXT:                              ^
    322 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    323 // CHECK-ERROR-NEXT:         sub w1, w2, w3, asr #32
    324 // CHECK-ERROR-NEXT:                         ^
    325 // CHECK-ERROR-NEXT: error: expected integer shift amount
    326 // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsl #-1
    327 // CHECK-ERROR-NEXT:                              ^
    328 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    329 // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsl #64
    330 // CHECK-ERROR-NEXT:                         ^
    331 // CHECK-ERROR-NEXT: error: expected integer shift amount
    332 // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsr #-1
    333 // CHECK-ERROR-NEXT:                              ^
    334 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    335 // CHECK-ERROR-NEXT:         sub x1, x2, x3, lsr #64
    336 // CHECK-ERROR-NEXT:                         ^
    337 // CHECK-ERROR-NEXT: error: expected integer shift amount
    338 // CHECK-ERROR-NEXT:         sub x1, x2, x3, asr #-1
    339 // CHECK-ERROR-NEXT:                              ^
    340 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    341 // CHECK-ERROR-NEXT:         sub x1, x2, x3, asr #64
    342 // CHECK-ERROR-NEXT:                         ^
    343 
    344         subs w1, w2, w3, lsl #-1
    345         subs w1, w2, w3, lsl #32
    346         subs w1, w2, w3, lsr #-1
    347         subs w1, w2, w3, lsr #32
    348         subs w1, w2, w3, asr #-1
    349         subs w1, w2, w3, asr #32
    350         subs x1, x2, x3, lsl #-1
    351         subs x1, x2, x3, lsl #64
    352         subs x1, x2, x3, lsr #-1
    353         subs x1, x2, x3, lsr #64
    354         subs x1, x2, x3, asr #-1
    355         subs x1, x2, x3, asr #64
    356 // CHECK-ERROR: error: expected integer shift amount
    357 // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsl #-1
    358 // CHECK-ERROR-NEXT:                               ^
    359 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    360 // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsl #32
    361 // CHECK-ERROR-NEXT:                          ^
    362 // CHECK-ERROR-NEXT: error: expected integer shift amount
    363 // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsr #-1
    364 // CHECK-ERROR-NEXT:                               ^
    365 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    366 // CHECK-ERROR-NEXT:         subs w1, w2, w3, lsr #32
    367 // CHECK-ERROR-NEXT:                          ^
    368 // CHECK-ERROR-NEXT: error: expected integer shift amount
    369 // CHECK-ERROR-NEXT:         subs w1, w2, w3, asr #-1
    370 // CHECK-ERROR-NEXT:                               ^
    371 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    372 // CHECK-ERROR-NEXT:         subs w1, w2, w3, asr #32
    373 // CHECK-ERROR-NEXT:                          ^
    374 // CHECK-ERROR-NEXT: error: expected integer shift amount
    375 // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsl #-1
    376 // CHECK-ERROR-NEXT:                               ^
    377 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    378 // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsl #64
    379 // CHECK-ERROR-NEXT:                          ^
    380 // CHECK-ERROR-NEXT: error: expected integer shift amount
    381 // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsr #-1
    382 // CHECK-ERROR-NEXT:                               ^
    383 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    384 // CHECK-ERROR-NEXT:         subs x1, x2, x3, lsr #64
    385 // CHECK-ERROR-NEXT:                          ^
    386 // CHECK-ERROR-NEXT: error: expected integer shift amount
    387 // CHECK-ERROR-NEXT:         subs x1, x2, x3, asr #-1
    388 // CHECK-ERROR-NEXT:                               ^
    389 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    390 // CHECK-ERROR-NEXT:         subs x1, x2, x3, asr #64
    391 // CHECK-ERROR-NEXT:                          ^
    392 
    393         cmn w9, w10, lsl #-1
    394         cmn w9, w10, lsl #32
    395         cmn w11, w12, lsr #-1
    396         cmn w11, w12, lsr #32
    397         cmn w19, wzr, asr #-1
    398         cmn wzr, wzr, asr #32
    399         cmn x9, x10, lsl #-1
    400         cmn x9, x10, lsl #64
    401         cmn x11, x12, lsr #-1
    402         cmn x11, x12, lsr #64
    403         cmn x19, xzr, asr #-1
    404         cmn xzr, xzr, asr #64
    405 // CHECK-ERROR: error: expected integer shift amount
    406 // CHECK-ERROR-NEXT:         cmn w9, w10, lsl #-1
    407 // CHECK-ERROR-NEXT:                           ^
    408 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    409 // CHECK-ERROR-NEXT:         cmn w9, w10, lsl #32
    410 // CHECK-ERROR-NEXT:                      ^
    411 // CHECK-ERROR-NEXT: error: expected integer shift amount
    412 // CHECK-ERROR-NEXT:         cmn w11, w12, lsr #-1
    413 // CHECK-ERROR-NEXT:                            ^
    414 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    415 // CHECK-ERROR-NEXT:         cmn w11, w12, lsr #32
    416 // CHECK-ERROR-NEXT:                       ^
    417 // CHECK-ERROR-NEXT: error: expected integer shift amount
    418 // CHECK-ERROR-NEXT:         cmn w19, wzr, asr #-1
    419 // CHECK-ERROR-NEXT:                            ^
    420 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    421 // CHECK-ERROR-NEXT:         cmn wzr, wzr, asr #32
    422 // CHECK-ERROR-NEXT:                       ^
    423 // CHECK-ERROR-NEXT: error: expected integer shift amount
    424 // CHECK-ERROR-NEXT:         cmn x9, x10, lsl #-1
    425 // CHECK-ERROR-NEXT:                           ^
    426 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    427 // CHECK-ERROR-NEXT:         cmn x9, x10, lsl #64
    428 // CHECK-ERROR-NEXT:                      ^
    429 // CHECK-ERROR-NEXT: error: expected integer shift amount
    430 // CHECK-ERROR-NEXT:         cmn x11, x12, lsr #-1
    431 // CHECK-ERROR-NEXT:                            ^
    432 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    433 // CHECK-ERROR-NEXT:         cmn x11, x12, lsr #64
    434 // CHECK-ERROR-NEXT:                       ^
    435 // CHECK-ERROR-NEXT: error: expected integer shift amount
    436 // CHECK-ERROR-NEXT:         cmn x19, xzr, asr #-1
    437 // CHECK-ERROR-NEXT:                            ^
    438 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    439 // CHECK-ERROR-NEXT:         cmn xzr, xzr, asr #64
    440 // CHECK-ERROR-NEXT:                       ^
    441 
    442         cmp w9, w10, lsl #-1
    443         cmp w9, w10, lsl #32
    444         cmp w11, w12, lsr #-1
    445         cmp w11, w12, lsr #32
    446         cmp w19, wzr, asr #-1
    447         cmp wzr, wzr, asr #32
    448         cmp x9, x10, lsl #-1
    449         cmp x9, x10, lsl #64
    450         cmp x11, x12, lsr #-1
    451         cmp x11, x12, lsr #64
    452         cmp x19, xzr, asr #-1
    453         cmp xzr, xzr, asr #64
    454 // CHECK-ERROR: error: expected integer shift amount
    455 // CHECK-ERROR-NEXT:         cmp w9, w10, lsl #-1
    456 // CHECK-ERROR-NEXT:                           ^
    457 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    458 // CHECK-ERROR-NEXT:         cmp w9, w10, lsl #32
    459 // CHECK-ERROR-NEXT:                      ^
    460 // CHECK-ERROR-NEXT: error: expected integer shift amount
    461 // CHECK-ERROR-NEXT:         cmp w11, w12, lsr #-1
    462 // CHECK-ERROR-NEXT:                            ^
    463 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    464 // CHECK-ERROR-NEXT:         cmp w11, w12, lsr #32
    465 // CHECK-ERROR-NEXT:                       ^
    466 // CHECK-ERROR-NEXT: error: expected integer shift amount
    467 // CHECK-ERROR-NEXT:         cmp w19, wzr, asr #-1
    468 // CHECK-ERROR-NEXT:                            ^
    469 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    470 // CHECK-ERROR-NEXT:         cmp wzr, wzr, asr #32
    471 // CHECK-ERROR-NEXT:                       ^
    472 // CHECK-ERROR-NEXT: error: expected integer shift amount
    473 // CHECK-ERROR-NEXT:         cmp x9, x10, lsl #-1
    474 // CHECK-ERROR-NEXT:                           ^
    475 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    476 // CHECK-ERROR-NEXT:         cmp x9, x10, lsl #64
    477 // CHECK-ERROR-NEXT:                      ^
    478 // CHECK-ERROR-NEXT: error: expected integer shift amount
    479 // CHECK-ERROR-NEXT:         cmp x11, x12, lsr #-1
    480 // CHECK-ERROR-NEXT:                            ^
    481 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    482 // CHECK-ERROR-NEXT:         cmp x11, x12, lsr #64
    483 // CHECK-ERROR-NEXT:                       ^
    484 // CHECK-ERROR-NEXT: error: expected integer shift amount
    485 // CHECK-ERROR-NEXT:         cmp x19, xzr, asr #-1
    486 // CHECK-ERROR-NEXT:                            ^
    487 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    488 // CHECK-ERROR-NEXT:         cmp xzr, xzr, asr #64
    489 // CHECK-ERROR-NEXT:                       ^
    490 
    491         neg w9, w10, lsl #-1
    492         neg w9, w10, lsl #32
    493         neg w11, w12, lsr #-1
    494         neg w11, w12, lsr #32
    495         neg w19, wzr, asr #-1
    496         neg wzr, wzr, asr #32
    497         neg x9, x10, lsl #-1
    498         neg x9, x10, lsl #64
    499         neg x11, x12, lsr #-1
    500         neg x11, x12, lsr #64
    501         neg x19, xzr, asr #-1
    502         neg xzr, xzr, asr #64
    503 // CHECK-ERROR: error: expected integer shift amount
    504 // CHECK-ERROR-NEXT:         neg w9, w10, lsl #-1
    505 // CHECK-ERROR-NEXT:                           ^
    506 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    507 // CHECK-ERROR-NEXT:         neg w9, w10, lsl #32
    508 // CHECK-ERROR-NEXT:                      ^
    509 // CHECK-ERROR-NEXT: error: expected integer shift amount
    510 // CHECK-ERROR-NEXT:         neg w11, w12, lsr #-1
    511 // CHECK-ERROR-NEXT:                            ^
    512 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    513 // CHECK-ERROR-NEXT:         neg w11, w12, lsr #32
    514 // CHECK-ERROR-NEXT:                       ^
    515 // CHECK-ERROR-NEXT: error: expected integer shift amount
    516 // CHECK-ERROR-NEXT:         neg w19, wzr, asr #-1
    517 // CHECK-ERROR-NEXT:                            ^
    518 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    519 // CHECK-ERROR-NEXT:         neg wzr, wzr, asr #32
    520 // CHECK-ERROR-NEXT:                       ^
    521 // CHECK-ERROR-NEXT: error: expected integer shift amount
    522 // CHECK-ERROR-NEXT:         neg x9, x10, lsl #-1
    523 // CHECK-ERROR-NEXT:                           ^
    524 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    525 // CHECK-ERROR-NEXT:         neg x9, x10, lsl #64
    526 // CHECK-ERROR-NEXT:                      ^
    527 // CHECK-ERROR-NEXT: error: expected integer shift amount
    528 // CHECK-ERROR-NEXT:         neg x11, x12, lsr #-1
    529 // CHECK-ERROR-NEXT:                            ^
    530 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    531 // CHECK-ERROR-NEXT:         neg x11, x12, lsr #64
    532 // CHECK-ERROR-NEXT:                       ^
    533 // CHECK-ERROR-NEXT: error: expected integer shift amount
    534 // CHECK-ERROR-NEXT:         neg x19, xzr, asr #-1
    535 // CHECK-ERROR-NEXT:                            ^
    536 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    537 // CHECK-ERROR-NEXT:         neg xzr, xzr, asr #64
    538 // CHECK-ERROR-NEXT:                       ^
    539 
    540         negs w9, w10, lsl #-1
    541         negs w9, w10, lsl #32
    542         negs w11, w12, lsr #-1
    543         negs w11, w12, lsr #32
    544         negs w19, wzr, asr #-1
    545         negs wzr, wzr, asr #32
    546         negs x9, x10, lsl #-1
    547         negs x9, x10, lsl #64
    548         negs x11, x12, lsr #-1
    549         negs x11, x12, lsr #64
    550         negs x19, xzr, asr #-1
    551         negs xzr, xzr, asr #64
    552 // CHECK-ERROR: error: expected integer shift amount
    553 // CHECK-ERROR-NEXT:         negs w9, w10, lsl #-1
    554 // CHECK-ERROR-NEXT:                            ^
    555 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    556 // CHECK-ERROR-NEXT:         negs w9, w10, lsl #32
    557 // CHECK-ERROR-NEXT:                       ^
    558 // CHECK-ERROR-NEXT: error: expected integer shift amount
    559 // CHECK-ERROR-NEXT:         negs w11, w12, lsr #-1
    560 // CHECK-ERROR-NEXT:                             ^
    561 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    562 // CHECK-ERROR-NEXT:         negs w11, w12, lsr #32
    563 // CHECK-ERROR-NEXT:                        ^
    564 // CHECK-ERROR-NEXT: error: expected integer shift amount
    565 // CHECK-ERROR-NEXT:         negs w19, wzr, asr #-1
    566 // CHECK-ERROR-NEXT:                             ^
    567 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    568 // CHECK-ERROR-NEXT:         negs wzr, wzr, asr #32
    569 // CHECK-ERROR-NEXT:                        ^
    570 // CHECK-ERROR-NEXT: error: expected integer shift amount
    571 // CHECK-ERROR-NEXT:         negs x9, x10, lsl #-1
    572 // CHECK-ERROR-NEXT:                            ^
    573 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    574 // CHECK-ERROR-NEXT:         negs x9, x10, lsl #64
    575 // CHECK-ERROR-NEXT:                       ^
    576 // CHECK-ERROR-NEXT: error: expected integer shift amount
    577 // CHECK-ERROR-NEXT:         negs x11, x12, lsr #-1
    578 // CHECK-ERROR-NEXT:                             ^
    579 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    580 // CHECK-ERROR-NEXT:         negs x11, x12, lsr #64
    581 // CHECK-ERROR-NEXT:                        ^
    582 // CHECK-ERROR-NEXT: error: expected integer shift amount
    583 // CHECK-ERROR-NEXT:         negs x19, xzr, asr #-1
    584 // CHECK-ERROR-NEXT:                             ^
    585 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
    586 // CHECK-ERROR-NEXT:         negs xzr, xzr, asr #64
    587 // CHECK-ERROR-NEXT:                        ^
    588 
    589 //------------------------------------------------------------------------------
    590 // Add-subtract (shifted register)
    591 //------------------------------------------------------------------------------
    592 
    593         adc wsp, w3, w5
    594         adc w1, wsp, w2
    595         adc w0, w10, wsp
    596 // CHECK-ERROR: error: invalid operand for instruction
    597 // CHECK-ERROR-NEXT:        adc wsp, w3, w5
    598 // CHECK-ERROR-NEXT:            ^
    599 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    600 // CHECK-ERROR-NEXT:         adc w1, wsp, w2
    601 // CHECK-ERROR-NEXT:                 ^
    602 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    603 // CHECK-ERROR-NEXT:         adc w0, w10, wsp
    604 // CHECK-ERROR-NEXT:                      ^
    605 
    606         adc sp, x3, x5
    607         adc x1, sp, x2
    608         adc x0, x10, sp
    609 // CHECK-ERROR: error: invalid operand for instruction
    610 // CHECK-ERROR-NEXT:         adc sp, x3, x5
    611 // CHECK-ERROR-NEXT:             ^
    612 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    613 // CHECK-ERROR-NEXT:         adc x1, sp, x2
    614 // CHECK-ERROR-NEXT:                 ^
    615 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    616 // CHECK-ERROR-NEXT:         adc x0, x10, sp
    617 // CHECK-ERROR-NEXT:                      ^
    618 
    619         adcs wsp, w3, w5
    620         adcs w1, wsp, w2
    621         adcs w0, w10, wsp
    622 // CHECK-ERROR: error: invalid operand for instruction
    623 // CHECK-ERROR-NEXT:         adcs wsp, w3, w5
    624 // CHECK-ERROR-NEXT:              ^
    625 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    626 // CHECK-ERROR-NEXT:         adcs w1, wsp, w2
    627 // CHECK-ERROR-NEXT:                  ^
    628 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    629 // CHECK-ERROR-NEXT:         adcs w0, w10, wsp
    630 // CHECK-ERROR-NEXT:                       ^
    631 
    632         adcs sp, x3, x5
    633         adcs x1, sp, x2
    634         adcs x0, x10, sp
    635 // CHECK-ERROR: error: invalid operand for instruction
    636 // CHECK-ERROR-NEXT:         adcs sp, x3, x5
    637 // CHECK-ERROR-NEXT:              ^
    638 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    639 // CHECK-ERROR-NEXT:         adcs x1, sp, x2
    640 // CHECK-ERROR-NEXT:                  ^
    641 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    642 // CHECK-ERROR-NEXT:         adcs x0, x10, sp
    643 // CHECK-ERROR-NEXT:                       ^
    644 
    645         sbc wsp, w3, w5
    646         sbc w1, wsp, w2
    647         sbc w0, w10, wsp
    648 // CHECK-ERROR: error: invalid operand for instruction
    649 // CHECK-ERROR-NEXT:         sbc wsp, w3, w5
    650 // CHECK-ERROR-NEXT:             ^
    651 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    652 // CHECK-ERROR-NEXT:         sbc w1, wsp, w2
    653 // CHECK-ERROR-NEXT:                 ^
    654 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    655 // CHECK-ERROR-NEXT:         sbc w0, w10, wsp
    656 // CHECK-ERROR-NEXT:                      ^
    657 
    658         sbc sp, x3, x5
    659         sbc x1, sp, x2
    660         sbc x0, x10, sp
    661 // CHECK-ERROR: error: invalid operand for instruction
    662 // CHECK-ERROR-NEXT:         sbc sp, x3, x5
    663 // CHECK-ERROR-NEXT:             ^
    664 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    665 // CHECK-ERROR-NEXT:         sbc x1, sp, x2
    666 // CHECK-ERROR-NEXT:                 ^
    667 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    668 // CHECK-ERROR-NEXT:         sbc x0, x10, sp
    669 // CHECK-ERROR-NEXT:                      ^
    670 
    671         sbcs wsp, w3, w5
    672         sbcs w1, wsp, w2
    673         sbcs w0, w10, wsp
    674 // CHECK-ERROR: error: invalid operand for instruction
    675 // CHECK-ERROR-NEXT:         sbcs wsp, w3, w5
    676 // CHECK-ERROR-NEXT:              ^
    677 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    678 // CHECK-ERROR-NEXT:         sbcs w1, wsp, w2
    679 // CHECK-ERROR-NEXT:                  ^
    680 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    681 // CHECK-ERROR-NEXT:         sbcs w0, w10, wsp
    682 // CHECK-ERROR-NEXT:                       ^
    683 
    684         sbcs sp, x3, x5
    685         sbcs x1, sp, x2
    686         sbcs x0, x10, sp
    687 // CHECK-ERROR: error: invalid operand for instruction
    688 // CHECK-ERROR-NEXT:         sbcs sp, x3, x5
    689 // CHECK-ERROR-NEXT:              ^
    690 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    691 // CHECK-ERROR-NEXT:         sbcs x1, sp, x2
    692 // CHECK-ERROR-NEXT:                  ^
    693 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    694 // CHECK-ERROR-NEXT:         sbcs x0, x10, sp
    695 // CHECK-ERROR-NEXT:                       ^
    696 
    697         ngc wsp, w3
    698         ngc w9, wsp
    699         ngc sp, x9
    700         ngc x2, sp
    701 // CHECK-ERROR: error: invalid operand for instruction
    702 // CHECK-ERROR-NEXT:         ngc wsp, w3
    703 // CHECK-ERROR-NEXT:             ^
    704 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    705 // CHECK-ERROR-NEXT:         ngc w9, wsp
    706 // CHECK-ERROR-NEXT:                 ^
    707 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    708 // CHECK-ERROR-NEXT:         ngc sp, x9
    709 // CHECK-ERROR-NEXT:             ^
    710 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    711 // CHECK-ERROR-NEXT:         ngc x2, sp
    712 // CHECK-ERROR-NEXT:                 ^
    713 
    714         ngcs wsp, w3
    715         ngcs w9, wsp
    716         ngcs sp, x9
    717         ngcs x2, sp
    718 // CHECK-ERROR: error: invalid operand for instruction
    719 // CHECK-ERROR-NEXT:         ngcs wsp, w3
    720 // CHECK-ERROR-NEXT:              ^
    721 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    722 // CHECK-ERROR-NEXT:         ngcs w9, wsp
    723 // CHECK-ERROR-NEXT:                  ^
    724 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    725 // CHECK-ERROR-NEXT:         ngcs sp, x9
    726 // CHECK-ERROR-NEXT:              ^
    727 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    728 // CHECK-ERROR-NEXT:         ngcs x2, sp
    729 // CHECK-ERROR-NEXT:                  ^
    730 
    731 //------------------------------------------------------------------------------
    732 // Logical (immediates)
    733 //------------------------------------------------------------------------------
    734 
    735         and w2, w3, #4294967296
    736         eor w2, w3, #4294967296
    737         orr w2, w3, #4294967296
    738         ands w2, w3, #4294967296
    739 // CHECK-ERROR: error: expected compatible register or logical immediate
    740 // CHECK-ERROR-NEXT:         and w2, w3, #4294967296
    741 // CHECK-ERROR-NEXT:                     ^
    742 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
    743 // CHECK-ERROR-NEXT:         eor w2, w3, #4294967296
    744 // CHECK-ERROR-NEXT:                     ^
    745 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
    746 // CHECK-ERROR-NEXT:         orr w2, w3, #4294967296
    747 // CHECK-ERROR-NEXT:                     ^
    748 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
    749 // CHECK-ERROR-NEXT:         ands w2, w3, #4294967296
    750 // CHECK-ERROR-NEXT:                      ^
    751 
    752 //------------------------------------------------------------------------------
    753 // Bitfield
    754 //------------------------------------------------------------------------------
    755 
    756         sbfm x3, w13, #0, #0
    757         sbfm w12, x9, #0, #0
    758         sbfm sp, x3, #3, #5
    759         sbfm w3, wsp, #1, #9
    760         sbfm x9, x5, #-1, #0
    761         sbfm x9, x5, #0, #-1
    762 // CHECK-ERROR: error: invalid operand for instruction
    763 // CHECK-ERROR-NEXT:         sbfm x3, w13, #0, #0
    764 // CHECK-ERROR-NEXT:                  ^
    765 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    766 // CHECK-ERROR-NEXT:         sbfm w12, x9, #0, #0
    767 // CHECK-ERROR-NEXT:                   ^
    768 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    769 // CHECK-ERROR-NEXT:         sbfm sp, x3, #3, #5
    770 // CHECK-ERROR-NEXT:              ^
    771 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    772 // CHECK-ERROR-NEXT:         sbfm w3, wsp, #1, #9
    773 // CHECK-ERROR-NEXT:                  ^
    774 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    775 // CHECK-ERROR-NEXT:         sbfm x9, x5, #-1, #0
    776 // CHECK-ERROR-NEXT:                      ^
    777 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    778 // CHECK-ERROR-NEXT:         sbfm x9, x5, #0, #-1
    779 // CHECK-ERROR-NEXT:                          ^
    780 
    781         sbfm w3, w5, #32, #1
    782         sbfm w7, w11, #19, #32
    783         sbfm x29, x30, #64, #0
    784         sbfm x10, x20, #63, #64
    785 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
    786 // CHECK-ERROR-NEXT:         sbfm w3, w5, #32, #1
    787 // CHECK-ERROR-NEXT:                      ^
    788 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    789 // CHECK-ERROR-NEXT:         sbfm w7, w11, #19, #32
    790 // CHECK-ERROR-NEXT:                            ^
    791 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    792 // CHECK-ERROR-NEXT:         sbfm x29, x30, #64, #0
    793 // CHECK-ERROR-NEXT:                        ^
    794 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    795 // CHECK-ERROR-NEXT:         sbfm x10, x20, #63, #64
    796 // CHECK-ERROR-NEXT:                             ^
    797 
    798         ubfm w3, w5, #32, #1
    799         ubfm w7, w11, #19, #32
    800         ubfm x29, x30, #64, #0
    801         ubfm x10, x20, #63, #64
    802 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
    803 // CHECK-ERROR-NEXT:         ubfm w3, w5, #32, #1
    804 // CHECK-ERROR-NEXT:                      ^
    805 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    806 // CHECK-ERROR-NEXT:         ubfm w7, w11, #19, #32
    807 // CHECK-ERROR-NEXT:                            ^
    808 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    809 // CHECK-ERROR-NEXT:         ubfm x29, x30, #64, #0
    810 // CHECK-ERROR-NEXT:                        ^
    811 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    812 // CHECK-ERROR-NEXT:         ubfm x10, x20, #63, #64
    813 // CHECK-ERROR-NEXT:                             ^
    814 
    815         bfm w3, w5, #32, #1
    816         bfm w7, w11, #19, #32
    817         bfm x29, x30, #64, #0
    818         bfm x10, x20, #63, #64
    819 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
    820 // CHECK-ERROR-NEXT:         bfm w3, w5, #32, #1
    821 // CHECK-ERROR-NEXT:                      ^
    822 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    823 // CHECK-ERROR-NEXT:         bfm w7, w11, #19, #32
    824 // CHECK-ERROR-NEXT:                            ^
    825 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    826 // CHECK-ERROR-NEXT:         bfm x29, x30, #64, #0
    827 // CHECK-ERROR-NEXT:                        ^
    828 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    829 // CHECK-ERROR-NEXT:         bfm x10, x20, #63, #64
    830 // CHECK-ERROR-NEXT:                             ^
    831 
    832         sxtb x3, x2
    833         sxth xzr, xzr
    834         sxtw x3, x5
    835 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
    836 // CHECK-ERROR-AARCH64-NEXT:         sxtb x3, x2
    837 // CHECK-ERROR-AARCH64-NEXT:                  ^
    838 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
    839 // CHECK-ERROR-AARCH64-NEXT:         sxth xzr, xzr
    840 // CHECK-ERROR-AARCH64-NEXT:                   ^
    841 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
    842 // CHECK-ERROR-AARCH64-NEXT:         sxtw x3, x5
    843 // CHECK-ERROR-AARCH64-NEXT:                  ^
    844 
    845         uxtb x3, x12
    846         uxth x5, x9
    847         uxtw x3, x5
    848         uxtb x2, sp
    849         uxtb sp, xzr
    850 // CHECK-ERROR: error: invalid operand for instruction
    851 // CHECK-ERROR-NEXT:         uxtb x3, x12
    852 // CHECK-ERROR-NEXT:                  ^
    853 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    854 // CHECK-ERROR-NEXT:         uxth x5, x9
    855 // CHECK-ERROR-NEXT:                  ^
    856 // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction
    857 // CHECK-ERROR-AARCH64-NEXT:         uxtw x3, x5
    858 // CHECK-ERROR-AARCH64-NEXT:         ^
    859 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    860 // CHECK-ERROR-NEXT:         uxtb x2, sp
    861 // CHECK-ERROR-NEXT:                  ^
    862 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    863 // CHECK-ERROR-NEXT:         uxtb sp, xzr
    864 // CHECK-ERROR-NEXT:              ^
    865 
    866         asr x3, w2, #1
    867         asr sp, x2, #1
    868         asr x25, x26, #-1
    869         asr x25, x26, #64
    870         asr w9, w8, #32
    871 // CHECK-ERROR: error: invalid operand for instruction
    872 // CHECK-ERROR-NEXT:         asr x3, w2, #1
    873 // CHECK-ERROR-NEXT:                 ^
    874 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    875 // CHECK-ERROR-NEXT:         asr sp, x2, #1
    876 // CHECK-ERROR-NEXT:             ^
    877 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    878 // CHECK-ERROR-NEXT:         asr x25, x26, #-1
    879 // CHECK-ERROR-NEXT:                       ^
    880 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
    881 // CHECK-ERROR-NEXT:         asr x25, x26, #64
    882 // CHECK-ERROR-NEXT:                       ^
    883 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    884 // CHECK-ERROR-NEXT:         asr w9, w8, #32
    885 // CHECK-ERROR-NEXT:                     ^
    886 
    887         sbfiz w1, w2, #0, #0
    888         sbfiz wsp, w9, #0, #1
    889         sbfiz w9, w10, #32, #1
    890         sbfiz w11, w12, #32, #0
    891         sbfiz w9, w10, #10, #23
    892         sbfiz x3, x5, #12, #53
    893         sbfiz sp, x3, #7, #6
    894         sbfiz w3, wsp, #10, #8
    895 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
    896 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
    897 // CHECK-ERROR-NEXT:         sbfiz w1, w2, #0, #0
    898 // CHECK-ERROR-NEXT:                           ^
    899 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    900 // CHECK-ERROR-NEXT:         sbfiz wsp, w9, #0, #1
    901 // CHECK-ERROR-NEXT:               ^
    902 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    903 // CHECK-ERROR-NEXT:         sbfiz w9, w10, #32, #1
    904 // CHECK-ERROR-NEXT:                        ^
    905 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    906 // CHECK-ERROR-NEXT:         sbfiz w11, w12, #32, #0
    907 // CHECK-ERROR-NEXT:                         ^
    908 // CHECK-ERROR-NEXT: error: requested insert overflows register
    909 // CHECK-ERROR-NEXT:         sbfiz w9, w10, #10, #23
    910 // CHECK-ERROR-NEXT:                             ^
    911 // CHECK-ERROR-NEXT: error: requested insert overflows register
    912 // CHECK-ERROR-NEXT:         sbfiz x3, x5, #12, #53
    913 // CHECK-ERROR-NEXT:                            ^
    914 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    915 // CHECK-ERROR-NEXT:         sbfiz sp, x3, #7, #6
    916 // CHECK-ERROR-NEXT:               ^
    917 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    918 // CHECK-ERROR-NEXT:         sbfiz w3, wsp, #10, #8
    919 // CHECK-ERROR-NEXT:                   ^
    920 
    921         sbfx w1, w2, #0, #0
    922         sbfx wsp, w9, #0, #1
    923         sbfx w9, w10, #32, #1
    924         sbfx w11, w12, #32, #0
    925         sbfx w9, w10, #10, #23
    926         sbfx x3, x5, #12, #53
    927         sbfx sp, x3, #7, #6
    928         sbfx w3, wsp, #10, #8
    929 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
    930 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
    931 // CHECK-ERROR-NEXT:         sbfx w1, w2, #0, #0
    932 // CHECK-ERROR-NEXT:                          ^
    933 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    934 // CHECK-ERROR-NEXT:         sbfx wsp, w9, #0, #1
    935 // CHECK-ERROR-NEXT:              ^
    936 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    937 // CHECK-ERROR-NEXT:         sbfx w9, w10, #32, #1
    938 // CHECK-ERROR-NEXT:                       ^
    939 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    940 // CHECK-ERROR-NEXT:         sbfx w11, w12, #32, #0
    941 // CHECK-ERROR-NEXT:                        ^
    942 // CHECK-ERROR-NEXT: error: requested extract overflows register
    943 // CHECK-ERROR-NEXT:         sbfx w9, w10, #10, #23
    944 // CHECK-ERROR-NEXT:                            ^
    945 // CHECK-ERROR-NEXT: error: requested extract overflows register
    946 // CHECK-ERROR-NEXT:         sbfx x3, x5, #12, #53
    947 // CHECK-ERROR-NEXT:                           ^
    948 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    949 // CHECK-ERROR-NEXT:         sbfx sp, x3, #7, #6
    950 // CHECK-ERROR-NEXT:              ^
    951 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    952 // CHECK-ERROR-NEXT:         sbfx w3, wsp, #10, #8
    953 // CHECK-ERROR-NEXT:                  ^
    954 
    955         bfi w1, w2, #0, #0
    956         bfi wsp, w9, #0, #1
    957         bfi w9, w10, #32, #1
    958         bfi w11, w12, #32, #0
    959         bfi w9, w10, #10, #23
    960         bfi x3, x5, #12, #53
    961         bfi sp, x3, #7, #6
    962         bfi w3, wsp, #10, #8
    963 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
    964 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
    965 // CHECK-ERROR-NEXT:         bfi w1, w2, #0, #0
    966 // CHECK-ERROR-NEXT:                         ^
    967 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    968 // CHECK-ERROR-NEXT:         bfi wsp, w9, #0, #1
    969 // CHECK-ERROR-NEXT:             ^
    970 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    971 // CHECK-ERROR-NEXT:         bfi w9, w10, #32, #1
    972 // CHECK-ERROR-NEXT:                      ^
    973 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
    974 // CHECK-ERROR-NEXT:         bfi w11, w12, #32, #0
    975 // CHECK-ERROR-NEXT:                       ^
    976 // CHECK-ERROR-NEXT: error: requested insert overflows register
    977 // CHECK-ERROR-NEXT:         bfi w9, w10, #10, #23
    978 // CHECK-ERROR-NEXT:                           ^
    979 // CHECK-ERROR-NEXT: error: requested insert overflows register
    980 // CHECK-ERROR-NEXT:         bfi x3, x5, #12, #53
    981 // CHECK-ERROR-NEXT:                          ^
    982 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    983 // CHECK-ERROR-NEXT:         bfi sp, x3, #7, #6
    984 // CHECK-ERROR-NEXT:             ^
    985 // CHECK-ERROR-NEXT: error: invalid operand for instruction
    986 // CHECK-ERROR-NEXT:         bfi w3, wsp, #10, #8
    987 // CHECK-ERROR-NEXT:                 ^
    988 
    989         bfxil w1, w2, #0, #0
    990         bfxil wsp, w9, #0, #1
    991         bfxil w9, w10, #32, #1
    992         bfxil w11, w12, #32, #0
    993         bfxil w9, w10, #10, #23
    994         bfxil x3, x5, #12, #53
    995         bfxil sp, x3, #7, #6
    996         bfxil w3, wsp, #10, #8
    997 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
    998 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
    999 // CHECK-ERROR-NEXT:         bfxil w1, w2, #0, #0
   1000 // CHECK-ERROR-NEXT:                           ^
   1001 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1002 // CHECK-ERROR-NEXT:         bfxil wsp, w9, #0, #1
   1003 // CHECK-ERROR-NEXT:               ^
   1004 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1005 // CHECK-ERROR-NEXT:         bfxil w9, w10, #32, #1
   1006 // CHECK-ERROR-NEXT:                        ^
   1007 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1008 // CHECK-ERROR-NEXT:         bfxil w11, w12, #32, #0
   1009 // CHECK-ERROR-NEXT:                         ^
   1010 // CHECK-ERROR-NEXT: error: requested extract overflows register
   1011 // CHECK-ERROR-NEXT:         bfxil w9, w10, #10, #23
   1012 // CHECK-ERROR-NEXT:                             ^
   1013 // CHECK-ERROR-NEXT: error: requested extract overflows register
   1014 // CHECK-ERROR-NEXT:         bfxil x3, x5, #12, #53
   1015 // CHECK-ERROR-NEXT:                            ^
   1016 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1017 // CHECK-ERROR-NEXT:         bfxil sp, x3, #7, #6
   1018 // CHECK-ERROR-NEXT:               ^
   1019 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1020 // CHECK-ERROR-NEXT:         bfxil w3, wsp, #10, #8
   1021 // CHECK-ERROR-NEXT:                   ^
   1022 
   1023         ubfiz w1, w2, #0, #0
   1024         ubfiz wsp, w9, #0, #1
   1025         ubfiz w9, w10, #32, #1
   1026         ubfiz w11, w12, #32, #0
   1027         ubfiz w9, w10, #10, #23
   1028         ubfiz x3, x5, #12, #53
   1029         ubfiz sp, x3, #7, #6
   1030         ubfiz w3, wsp, #10, #8
   1031 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
   1032 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
   1033 // CHECK-ERROR-NEXT:         ubfiz w1, w2, #0, #0
   1034 // CHECK-ERROR-NEXT:                           ^
   1035 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1036 // CHECK-ERROR-NEXT:         ubfiz wsp, w9, #0, #1
   1037 // CHECK-ERROR-NEXT:               ^
   1038 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1039 // CHECK-ERROR-NEXT:         ubfiz w9, w10, #32, #1
   1040 // CHECK-ERROR-NEXT:                        ^
   1041 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1042 // CHECK-ERROR-NEXT:         ubfiz w11, w12, #32, #0
   1043 // CHECK-ERROR-NEXT:                         ^
   1044 // CHECK-ERROR-NEXT: error: requested insert overflows register
   1045 // CHECK-ERROR-NEXT:         ubfiz w9, w10, #10, #23
   1046 // CHECK-ERROR-NEXT:                             ^
   1047 // CHECK-ERROR-NEXT: error: requested insert overflows register
   1048 // CHECK-ERROR-NEXT:         ubfiz x3, x5, #12, #53
   1049 // CHECK-ERROR-NEXT:                            ^
   1050 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1051 // CHECK-ERROR-NEXT:         ubfiz sp, x3, #7, #6
   1052 // CHECK-ERROR-NEXT:               ^
   1053 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1054 // CHECK-ERROR-NEXT:         ubfiz w3, wsp, #10, #8
   1055 // CHECK-ERROR-NEXT:                   ^
   1056 
   1057         ubfx w1, w2, #0, #0
   1058         ubfx wsp, w9, #0, #1
   1059         ubfx w9, w10, #32, #1
   1060         ubfx w11, w12, #32, #0
   1061         ubfx w9, w10, #10, #23
   1062         ubfx x3, x5, #12, #53
   1063         ubfx sp, x3, #7, #6
   1064         ubfx w3, wsp, #10, #8
   1065 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
   1066 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
   1067 // CHECK-ERROR-NEXT:         ubfx w1, w2, #0, #0
   1068 // CHECK-ERROR-NEXT:                      ^
   1069 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1070 // CHECK-ERROR-NEXT:         ubfx wsp, w9, #0, #1
   1071 // CHECK-ERROR-NEXT:              ^
   1072 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1073 // CHECK-ERROR-NEXT:         ubfx w9, w10, #32, #1
   1074 // CHECK-ERROR-NEXT:                       ^
   1075 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1076 // CHECK-ERROR-NEXT:         ubfx w11, w12, #32, #0
   1077 // CHECK-ERROR-NEXT:                        ^
   1078 // CHECK-ERROR-NEXT: error: requested extract overflows register
   1079 // CHECK-ERROR-NEXT:         ubfx w9, w10, #10, #23
   1080 // CHECK-ERROR-NEXT:                            ^
   1081 // CHECK-ERROR-NEXT: error: requested extract overflows register
   1082 // CHECK-ERROR-NEXT:         ubfx x3, x5, #12, #53
   1083 // CHECK-ERROR-NEXT:                           ^
   1084 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1085 // CHECK-ERROR-NEXT:         ubfx sp, x3, #7, #6
   1086 // CHECK-ERROR-NEXT:              ^
   1087 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1088 // CHECK-ERROR-NEXT:         ubfx w3, wsp, #10, #8
   1089 // CHECK-ERROR-NEXT:                  ^
   1090 
   1091 //------------------------------------------------------------------------------
   1092 // Compare & branch (immediate)
   1093 //------------------------------------------------------------------------------
   1094 
   1095         cbnz wsp, lbl
   1096         cbz  sp, lbl
   1097         cbz  x3, x5
   1098 // CHECK-ERROR: error: invalid operand for instruction
   1099 // CHECK-ERROR-NEXT:           cbnz wsp, lbl
   1100 // CHECK-ERROR-NEXT:                ^
   1101 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1102 // CHECK-ERROR-NEXT:           cbz sp, lbl
   1103 // CHECK-ERROR-NEXT:               ^
   1104 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1105 // CHECK-ERROR-NEXT:           cbz x3, x5
   1106 // CHECK-ERROR-NEXT:                   ^
   1107 
   1108         cbz w20, #1048576
   1109         cbnz xzr, #-1048580
   1110         cbz x29, #1
   1111 // CHECK-ERROR: error: expected label or encodable integer pc offset
   1112 // CHECK-ERROR-NEXT:           cbz w20, #1048576
   1113 // CHECK-ERROR-NEXT:                     ^
   1114 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1115 // CHECK-ERROR-NEXT:           cbnz xzr, #-1048580
   1116 // CHECK-ERROR-NEXT:                    ^
   1117 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1118 // CHECK-ERROR-NEXT:           cbz x29, #1
   1119 // CHECK-ERROR-NEXT:                    ^
   1120 
   1121 //------------------------------------------------------------------------------
   1122 // Conditional branch (immediate)
   1123 //------------------------------------------------------------------------------
   1124 
   1125         b.zf lbl
   1126 // CHECK-ERROR: error: invalid condition code
   1127 // CHECK-ERROR-NEXT:           b.zf lbl
   1128 // CHECK-ERROR-NEXT:             ^
   1129 
   1130         b.eq #1048576
   1131         b.ge #-1048580
   1132         b.cc #1
   1133 // CHECK-ERROR: error: expected label or encodable integer pc offset
   1134 // CHECK-ERROR-NEXT:           b.eq #1048576
   1135 // CHECK-ERROR-NEXT:                ^
   1136 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1137 // CHECK-ERROR-NEXT:           b.ge #-1048580
   1138 // CHECK-ERROR-NEXT:                ^
   1139 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1140 // CHECK-ERROR-NEXT:           b.cc #1
   1141 // CHECK-ERROR-NEXT:                ^
   1142 
   1143 //------------------------------------------------------------------------------
   1144 // Conditional compare (immediate)
   1145 //------------------------------------------------------------------------------
   1146 
   1147         ccmp wsp, #4, #2, ne
   1148         ccmp w25, #-1, #15, hs
   1149         ccmp w3, #32, #0, ge
   1150         ccmp w19, #5, #-1, lt
   1151         ccmp w20, #7, #16, hs
   1152 // CHECK-ERROR: error: invalid operand for instruction
   1153 // CHECK-ERROR-NEXT:        ccmp wsp, #4, #2, ne
   1154 // CHECK-ERROR-NEXT:             ^
   1155 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1156 // CHECK-ERROR-NEXT:        ccmp w25, #-1, #15, hs
   1157 // CHECK-ERROR-NEXT:                  ^
   1158 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1159 // CHECK-ERROR-NEXT:        ccmp w3, #32, #0, ge
   1160 // CHECK-ERROR-NEXT:                 ^
   1161 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1162 // CHECK-ERROR-NEXT:        ccmp w19, #5, #-1, lt
   1163 // CHECK-ERROR-NEXT:                      ^
   1164 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1165 // CHECK-ERROR-NEXT:        ccmp w20, #7, #16, hs
   1166 // CHECK-ERROR-NEXT:                      ^
   1167 
   1168         ccmp sp, #4, #2, ne
   1169         ccmp x25, #-1, #15, hs
   1170         ccmp x3, #32, #0, ge
   1171         ccmp x19, #5, #-1, lt
   1172         ccmp x20, #7, #16, hs
   1173 // CHECK-ERROR: error: invalid operand for instruction
   1174 // CHECK-ERROR-NEXT:        ccmp sp, #4, #2, ne
   1175 // CHECK-ERROR-NEXT:             ^
   1176 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1177 // CHECK-ERROR-NEXT:        ccmp x25, #-1, #15, hs
   1178 // CHECK-ERROR-NEXT:                  ^
   1179 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1180 // CHECK-ERROR-NEXT:        ccmp x3, #32, #0, ge
   1181 // CHECK-ERROR-NEXT:                 ^
   1182 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1183 // CHECK-ERROR-NEXT:        ccmp x19, #5, #-1, lt
   1184 // CHECK-ERROR-NEXT:                      ^
   1185 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1186 // CHECK-ERROR-NEXT:        ccmp x20, #7, #16, hs
   1187 // CHECK-ERROR-NEXT:                      ^
   1188 
   1189         ccmn wsp, #4, #2, ne
   1190         ccmn w25, #-1, #15, hs
   1191         ccmn w3, #32, #0, ge
   1192         ccmn w19, #5, #-1, lt
   1193         ccmn w20, #7, #16, hs
   1194 // CHECK-ERROR: error: invalid operand for instruction
   1195 // CHECK-ERROR-NEXT:        ccmn wsp, #4, #2, ne
   1196 // CHECK-ERROR-NEXT:             ^
   1197 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1198 // CHECK-ERROR-NEXT:        ccmn w25, #-1, #15, hs
   1199 // CHECK-ERROR-NEXT:                  ^
   1200 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1201 // CHECK-ERROR-NEXT:        ccmn w3, #32, #0, ge
   1202 // CHECK-ERROR-NEXT:                 ^
   1203 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1204 // CHECK-ERROR-NEXT:        ccmn w19, #5, #-1, lt
   1205 // CHECK-ERROR-NEXT:                      ^
   1206 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1207 // CHECK-ERROR-NEXT:        ccmn w20, #7, #16, hs
   1208 // CHECK-ERROR-NEXT:                      ^
   1209 
   1210         ccmn sp, #4, #2, ne
   1211         ccmn x25, #-1, #15, hs
   1212         ccmn x3, #32, #0, ge
   1213         ccmn x19, #5, #-1, lt
   1214         ccmn x20, #7, #16, hs
   1215 // CHECK-ERROR: error: invalid operand for instruction
   1216 // CHECK-ERROR-NEXT:        ccmn sp, #4, #2, ne
   1217 // CHECK-ERROR-NEXT:             ^
   1218 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1219 // CHECK-ERROR-NEXT:        ccmn x25, #-1, #15, hs
   1220 // CHECK-ERROR-NEXT:                  ^
   1221 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1222 // CHECK-ERROR-NEXT:        ccmn x3, #32, #0, ge
   1223 // CHECK-ERROR-NEXT:                 ^
   1224 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1225 // CHECK-ERROR-NEXT:        ccmn x19, #5, #-1, lt
   1226 // CHECK-ERROR-NEXT:                      ^
   1227 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1228 // CHECK-ERROR-NEXT:        ccmn x20, #7, #16, hs
   1229 // CHECK-ERROR-NEXT:                      ^
   1230 
   1231 //------------------------------------------------------------------------------
   1232 // Conditional compare (register)
   1233 //------------------------------------------------------------------------------
   1234 
   1235         ccmp wsp, w4, #2, ne
   1236         ccmp w3, wsp, #0, ge
   1237         ccmp w19, w5, #-1, lt
   1238         ccmp w20, w7, #16, hs
   1239 // CHECK-ERROR: error: invalid operand for instruction
   1240 // CHECK-ERROR-NEXT:        ccmp wsp, w4, #2, ne
   1241 // CHECK-ERROR-NEXT:             ^
   1242 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1243 // CHECK-ERROR-NEXT:        ccmp w3, wsp, #0, ge
   1244 // CHECK-ERROR-NEXT:                 ^
   1245 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1246 // CHECK-ERROR-NEXT:        ccmp w19, w5, #-1, lt
   1247 // CHECK-ERROR-NEXT:                      ^
   1248 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1249 // CHECK-ERROR-NEXT:        ccmp w20, w7, #16, hs
   1250 // CHECK-ERROR-NEXT:                      ^
   1251 
   1252         ccmp sp, x4, #2, ne
   1253         ccmp x25, sp, #15, hs
   1254         ccmp x19, x5, #-1, lt
   1255         ccmp x20, x7, #16, hs
   1256 // CHECK-ERROR: error: invalid operand for instruction
   1257 // CHECK-ERROR-NEXT:        ccmp sp, x4, #2, ne
   1258 // CHECK-ERROR-NEXT:             ^
   1259 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1260 // CHECK-ERROR-NEXT:        ccmp x25, sp, #15, hs
   1261 // CHECK-ERROR-NEXT:                  ^
   1262 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1263 // CHECK-ERROR-NEXT:        ccmp x19, x5, #-1, lt
   1264 // CHECK-ERROR-NEXT:                      ^
   1265 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1266 // CHECK-ERROR-NEXT:        ccmp x20, x7, #16, hs
   1267 // CHECK-ERROR-NEXT:                      ^
   1268 
   1269         ccmn wsp, w4, #2, ne
   1270         ccmn w25, wsp, #15, hs
   1271         ccmn w19, w5, #-1, lt
   1272         ccmn w20, w7, #16, hs
   1273 // CHECK-ERROR: error: invalid operand for instruction
   1274 // CHECK-ERROR-NEXT:        ccmn wsp, w4, #2, ne
   1275 // CHECK-ERROR-NEXT:             ^
   1276 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1277 // CHECK-ERROR-NEXT:        ccmn w25, wsp, #15, hs
   1278 // CHECK-ERROR-NEXT:                  ^
   1279 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1280 // CHECK-ERROR-NEXT:        ccmn w19, w5, #-1, lt
   1281 // CHECK-ERROR-NEXT:                      ^
   1282 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1283 // CHECK-ERROR-NEXT:        ccmn w20, w7, #16, hs
   1284 // CHECK-ERROR-NEXT:                      ^
   1285 
   1286         ccmn sp, x4, #2, ne
   1287         ccmn x25, sp, #15, hs
   1288         ccmn x19, x5, #-1, lt
   1289         ccmn x20, x7, #16, hs
   1290 // CHECK-ERROR: error: invalid operand for instruction
   1291 // CHECK-ERROR-NEXT:        ccmn sp, x4, #2, ne
   1292 // CHECK-ERROR-NEXT:             ^
   1293 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1294 // CHECK-ERROR-NEXT:        ccmn x25, sp, #15, hs
   1295 // CHECK-ERROR-NEXT:                  ^
   1296 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1297 // CHECK-ERROR-NEXT:        ccmn x19, x5, #-1, lt
   1298 // CHECK-ERROR-NEXT:                      ^
   1299 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1300 // CHECK-ERROR-NEXT:        ccmn x20, x7, #16, hs
   1301 // CHECK-ERROR-NEXT:                      ^
   1302 
   1303 //------------------------------------------------------------------------------
   1304 // Conditional select
   1305 //------------------------------------------------------------------------------
   1306 
   1307         csel w4, wsp, w9, eq
   1308         csel wsp, w2, w3, ne
   1309         csel w10, w11, wsp, ge
   1310         csel w1, w2, w3, #3
   1311         csel x4, sp, x9, eq
   1312         csel sp, x2, x3, ne
   1313         csel x10, x11, sp, ge
   1314         csel x1, x2, x3, #3
   1315 // CHECK-ERROR: error: invalid operand for instruction
   1316 // CHECK-ERROR-NEXT:        csel w4, wsp, w9, eq
   1317 // CHECK-ERROR-NEXT:                 ^
   1318 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1319 // CHECK-ERROR-NEXT:        csel wsp, w2, w3, ne
   1320 // CHECK-ERROR-NEXT:             ^
   1321 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1322 // CHECK-ERROR-NEXT:        csel w10, w11, wsp, ge
   1323 // CHECK-ERROR-NEXT:                       ^
   1324 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
   1325 // CHECK-ERROR-NEXT:        csel w1, w2, w3, #3
   1326 // CHECK-ERROR-NEXT:                         ^
   1327 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1328 // CHECK-ERROR-NEXT:        csel x4, sp, x9, eq
   1329 // CHECK-ERROR-NEXT:                 ^
   1330 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1331 // CHECK-ERROR-NEXT:        csel sp, x2, x3, ne
   1332 // CHECK-ERROR-NEXT:             ^
   1333 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1334 // CHECK-ERROR-NEXT:        csel x10, x11, sp, ge
   1335 // CHECK-ERROR-NEXT:                       ^
   1336 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
   1337 // CHECK-ERROR-NEXT:        csel x1, x2, x3, #3
   1338 // CHECK-ERROR-NEXT:                         ^
   1339 
   1340         csinc w20, w21, wsp, mi
   1341         csinc sp, x30, x29, eq
   1342 // CHECK-ERROR: error: invalid operand for instruction
   1343 // CHECK-ERROR-NEXT:        csinc w20, w21, wsp, mi
   1344 // CHECK-ERROR-NEXT:                        ^
   1345 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1346 // CHECK-ERROR-NEXT:        csinc sp, x30, x29, eq
   1347 // CHECK-ERROR-NEXT:              ^
   1348 
   1349         csinv w20, wsp, wsp, mi
   1350         csinv sp, x30, x29, le
   1351 // CHECK-ERROR: error: invalid operand for instruction
   1352 // CHECK-ERROR-NEXT:        csinv w20, wsp, wsp, mi
   1353 // CHECK-ERROR-NEXT:                   ^
   1354 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1355 // CHECK-ERROR-NEXT:        csinv sp, x30, x29, le
   1356 // CHECK-ERROR-NEXT:              ^
   1357 
   1358         csneg w20, w21, wsp, mi
   1359         csneg x0, sp, x29, le
   1360 // CHECK-ERROR: error: invalid operand for instruction
   1361 // CHECK-ERROR-NEXT:        csneg w20, w21, wsp, mi
   1362 // CHECK-ERROR-NEXT:                        ^
   1363 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1364 // CHECK-ERROR-NEXT:        csneg x0, sp, x29, le
   1365 // CHECK-ERROR-NEXT:                  ^
   1366 
   1367         cset wsp, lt
   1368         csetm sp, ge
   1369         cset w1, al
   1370         csetm x6, nv
   1371 // CHECK-ERROR: error: invalid operand for instruction
   1372 // CHECK-ERROR-NEXT:        cset wsp, lt
   1373 // CHECK-ERROR-NEXT:             ^
   1374 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1375 // CHECK-ERROR-NEXT:        csetm sp, ge
   1376 // CHECK-ERROR-NEXT:              ^
   1377 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
   1378 // CHECK-ERROR-NEXT:        cset w1, al
   1379 // CHECK-ERROR-NEXT:                   ^
   1380 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
   1381 // CHECK-ERROR-NEXT:        csetm x6, nv
   1382 // CHECK-ERROR-NEXT:                    ^
   1383 
   1384         cinc w3, wsp, ne
   1385         cinc sp, x9, eq
   1386         cinc x2, x0, nv
   1387 // CHECK-ERROR: error: invalid operand for instruction
   1388 // CHECK-ERROR-NEXT:        cinc w3, wsp, ne
   1389 // CHECK-ERROR-NEXT:                 ^
   1390 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1391 // CHECK-ERROR-NEXT:        cinc sp, x9, eq
   1392 // CHECK-ERROR-NEXT:             ^
   1393 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
   1394 // CHECK-ERROR-NEXT:        cinc x2, x0, nv
   1395 // CHECK-ERROR-NEXT:                       ^
   1396 
   1397         cinv w3, wsp, ne
   1398         cinv sp, x9, eq
   1399         cinv w8, x7, nv
   1400 // CHECK-ERROR: error: invalid operand for instruction
   1401 // CHECK-ERROR-NEXT:        cinv w3, wsp, ne
   1402 // CHECK-ERROR-NEXT:                 ^
   1403 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1404 // CHECK-ERROR-NEXT:        cinv sp, x9, eq
   1405 // CHECK-ERROR-NEXT:             ^
   1406 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
   1407 // CHECK-ERROR-NEXT:        cinv w8, x7, nv
   1408 // CHECK-ERROR-NEXT:                       ^
   1409 
   1410         cneg w3, wsp, ne
   1411         cneg sp, x9, eq
   1412         cneg x4, x5, al
   1413 // CHECK-ERROR: error: invalid operand for instruction
   1414 // CHECK-ERROR-NEXT:        cneg w3, wsp, ne
   1415 // CHECK-ERROR-NEXT:                 ^
   1416 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1417 // CHECK-ERROR-NEXT:        cneg sp, x9, eq
   1418 // CHECK-ERROR-NEXT:             ^
   1419 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
   1420 // CHECK-ERROR-NEXT:        cneg x4, x5, al
   1421 // CHECK-ERROR-NEXT:                       ^
   1422 
   1423 //------------------------------------------------------------------------------
   1424 // Data Processing (1 source)
   1425 //------------------------------------------------------------------------------
   1426         rbit x23, w2
   1427 //CHECK-ERROR: error: invalid operand for instruction
   1428 //CHECK-ERROR-NEXT:     rbit x23, w2
   1429 
   1430         cls sp, x2
   1431 //CHECK-ERROR: error: invalid operand for instruction
   1432 //CHECK-ERROR-NEXT:     cls sp, x2
   1433 
   1434         clz wsp, w3
   1435 //CHECK-ERROR: error: invalid operand for instruction
   1436 //CHECK-ERROR-NEXT:     clz wsp, w3
   1437 
   1438 //------------------------------------------------------------------------------
   1439 // Data Processing (2 sources)
   1440 //------------------------------------------------------------------------------
   1441         udiv x23, w2, x18
   1442 //CHECK-ERROR: error: invalid operand for instruction
   1443 //CHECK-ERROR-NEXT:     udiv x23, w2, x18
   1444 
   1445         lsl sp, x2, x4
   1446 //CHECK-ERROR: error: invalid operand for instruction
   1447 //CHECK-ERROR-NEXT:     lsl sp, x2, x4
   1448 
   1449         asr wsp, w3, w9
   1450 //CHECK-ERROR: error: invalid operand for instruction
   1451 //CHECK-ERROR-NEXT:     asr wsp, w3, w9
   1452 
   1453 //------------------------------------------------------------------------------
   1454 // Data Processing (3 sources)
   1455 //------------------------------------------------------------------------------
   1456 
   1457         madd sp, x3, x9, x10
   1458 //CHECK-ERROR: error: invalid operand for instruction
   1459 //CHECK-ERROR-NEXT:     madd sp, x3, x9, x10
   1460 
   1461 //------------------------------------------------------------------------------
   1462 // Exception generation
   1463 //------------------------------------------------------------------------------
   1464         svc #-1
   1465         hlt #65536
   1466         dcps4 #43
   1467         dcps4
   1468 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
   1469 // CHECK-ERROR-NEXT:         svc #-1
   1470 // CHECK-ERROR-NEXT:             ^
   1471 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
   1472 // CHECK-ERROR-NEXT:         hlt #65536
   1473 // CHECK-ERROR-NEXT:             ^
   1474 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
   1475 // CHECK-ERROR-NEXT:         dcps4 #43
   1476 // CHECK-ERROR-NEXT:         ^
   1477 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
   1478 // CHECK-ERROR-NEXT:         dcps4
   1479 // CHECK-ERROR-NEXT:         ^
   1480 
   1481 //------------------------------------------------------------------------------
   1482 // Extract (immediate)
   1483 //------------------------------------------------------------------------------
   1484 
   1485         extr w2, w20, w30, #-1
   1486         extr w9, w19, w20, #32
   1487 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1488 // CHECK-ERROR-NEXT:         extr w2, w20, w30, #-1
   1489 // CHECK-ERROR-NEXT:                            ^
   1490 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1491 // CHECK-ERROR-NEXT:         extr w9, w19, w20, #32
   1492 // CHECK-ERROR-NEXT:                            ^
   1493 
   1494         extr x10, x15, x20, #-1
   1495         extr x20, x25, x30, #64
   1496 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   1497 // CHECK-ERROR-NEXT:         extr x10, x15, x20, #-1
   1498 // CHECK-ERROR-NEXT:                             ^
   1499 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   1500 // CHECK-ERROR-NEXT:         extr x20, x25, x30, #64
   1501 // CHECK-ERROR-NEXT:                             ^
   1502 
   1503         ror w9, w10, #32
   1504         ror x10, x11, #64
   1505 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   1506 // CHECK-ERROR-NEXT:         ror w9, w10, #32
   1507 // CHECK-ERROR-NEXT:                      ^
   1508 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   1509 // CHECK-ERROR-NEXT:         ror x10, x11, #64
   1510 // CHECK-ERROR-NEXT:                       ^
   1511 
   1512 //------------------------------------------------------------------------------
   1513 // Floating-point compare
   1514 //------------------------------------------------------------------------------
   1515 
   1516         fcmp s3, d2
   1517 // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
   1518 // CHECK-ERROR-ARM64: error: invalid operand for instruction
   1519 // CHECK-ERROR-NEXT:         fcmp s3, d2
   1520 // CHECK-ERROR-NEXT:                  ^
   1521 
   1522         fcmp s9, #-0.0
   1523         fcmp d3, #-0.0
   1524         fcmp s1, #1.0
   1525         fcmpe s30, #-0.0
   1526 // CHECK-ERROR: error: expected floating-point constant #0.0
   1527 // CHECK-ERROR-NEXT:         fcmp s9, #-0.0
   1528 // CHECK-ERROR-NEXT:                  ^
   1529 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
   1530 // CHECK-ERROR-NEXT:         fcmp d3, #-0.0
   1531 // CHECK-ERROR-NEXT:                  ^
   1532 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
   1533 // CHECK-ERROR-NEXT:         fcmp s1, #1.0
   1534 // CHECK-ERROR-NEXT:                  ^
   1535 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
   1536 // CHECK-ERROR-NEXT:         fcmpe s30, #-0.0
   1537 // CHECK-ERROR-NEXT:                    ^
   1538 
   1539 //------------------------------------------------------------------------------
   1540 // Floating-point conditional compare
   1541 //------------------------------------------------------------------------------
   1542 
   1543         fccmp s19, s5, #-1, lt
   1544         fccmp s20, s7, #16, hs
   1545 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1546 // CHECK-ERROR-NEXT:        fccmp s19, s5, #-1, lt
   1547 // CHECK-ERROR-NEXT:                      ^
   1548 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1549 // CHECK-ERROR-NEXT:        fccmp s20, s7, #16, hs
   1550 // CHECK-ERROR-NEXT:                      ^
   1551 
   1552         fccmp d19, d5, #-1, lt
   1553         fccmp d20, d7, #16, hs
   1554 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1555 // CHECK-ERROR-NEXT:        fccmp d19, d5, #-1, lt
   1556 // CHECK-ERROR-NEXT:                      ^
   1557 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1558 // CHECK-ERROR-NEXT:        fccmp d20, d7, #16, hs
   1559 // CHECK-ERROR-NEXT:                      ^
   1560 
   1561         fccmpe s19, s5, #-1, lt
   1562         fccmpe s20, s7, #16, hs
   1563 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1564 // CHECK-ERROR-NEXT:        fccmpe s19, s5, #-1, lt
   1565 // CHECK-ERROR-NEXT:                      ^
   1566 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1567 // CHECK-ERROR-NEXT:        fccmpe s20, s7, #16, hs
   1568 // CHECK-ERROR-NEXT:                      ^
   1569 
   1570         fccmpe d19, d5, #-1, lt
   1571         fccmpe d20, d7, #16, hs
   1572 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1573 // CHECK-ERROR-NEXT:        fccmpe d19, d5, #-1, lt
   1574 // CHECK-ERROR-NEXT:                      ^
   1575 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   1576 // CHECK-ERROR-NEXT:        fccmpe d20, d7, #16, hs
   1577 // CHECK-ERROR-NEXT:                      ^
   1578 
   1579 //------------------------------------------------------------------------------
   1580 // Floating-point conditional compare
   1581 //------------------------------------------------------------------------------
   1582 
   1583         fcsel q3, q20, q9, pl
   1584         fcsel h9, h10, h11, mi
   1585         fcsel b9, b10, b11, mi
   1586 // CHECK-ERROR: error: invalid operand for instruction
   1587 // CHECK-ERROR-NEXT:         fcsel q3, q20, q9, pl
   1588 // CHECK-ERROR-NEXT:               ^
   1589 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1590 // CHECK-ERROR-NEXT:         fcsel h9, h10, h11, mi
   1591 // CHECK-ERROR-NEXT:               ^
   1592 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1593 // CHECK-ERROR-NEXT:         fcsel b9, b10, b11, mi
   1594 // CHECK-ERROR-NEXT:               ^
   1595 
   1596 //------------------------------------------------------------------------------
   1597 // Floating-point data-processing (1 source)
   1598 //------------------------------------------------------------------------------
   1599 
   1600         fmov d0, s3
   1601         fcvt d0, d1
   1602 // CHECK-ERROR: error: expected compatible register or floating-point constant
   1603 // CHECK-ERROR-NEXT:           fmov d0, s3
   1604 // CHECK-ERROR-NEXT:                    ^
   1605 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1606 // CHECK-ERROR-NEXT:           fcvt d0, d1
   1607 // CHECK-ERROR-NEXT:                    ^
   1608 
   1609 
   1610 //------------------------------------------------------------------------------
   1611 // Floating-point data-processing (2 sources)
   1612 //------------------------------------------------------------------------------
   1613 
   1614         fadd s0, d3, d7
   1615         fmaxnm d3, s19, d12
   1616         fnmul d1, d9, s18
   1617 // CHECK-ERROR: error: invalid operand for instruction
   1618 // CHECK-ERROR-NEXT:           fadd s0, d3, d7
   1619 // CHECK-ERROR-NEXT: ^
   1620 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1621 // CHECK-ERROR-NEXT:           fmaxnm d3, s19, d12
   1622 // CHECK-ERROR-NEXT: ^
   1623 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1624 // CHECK-ERROR-NEXT:           fnmul d1, d9, s18
   1625 // CHECK-ERROR-NEXT: ^
   1626 
   1627 //------------------------------------------------------------------------------
   1628 // Floating-point data-processing (3 sources)
   1629 //------------------------------------------------------------------------------
   1630 
   1631         fmadd b3, b4, b5, b6
   1632         fmsub h1, h2, h3, h4
   1633         fnmadd q3, q5, q6, q7
   1634         fnmsub s2, s4, d5, h9
   1635 // CHECK-ERROR: error: invalid operand for instruction
   1636 // CHECK-ERROR-NEXT:         fmadd b3, b4, b5, b6
   1637 // CHECK-ERROR-NEXT:               ^
   1638 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1639 // CHECK-ERROR-NEXT:         fmsub h1, h2, h3, h4
   1640 // CHECK-ERROR-NEXT:               ^
   1641 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1642 // CHECK-ERROR-NEXT:         fnmadd q3, q5, q6, q7
   1643 // CHECK-ERROR-NEXT:                ^
   1644 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1645 // CHECK-ERROR-NEXT:         fnmsub s2, s4, d5, h9
   1646 // CHECK-ERROR-NEXT:                ^
   1647 
   1648 //------------------------------------------------------------------------------
   1649 // Floating-point conditional compare
   1650 //------------------------------------------------------------------------------
   1651 
   1652         fcvtzs w13, s31, #0
   1653         fcvtzs w19, s20, #33
   1654         fcvtzs wsp, s19, #14
   1655 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
   1656 // CHECK-ERROR-NEXT:        fcvtzs w13, s31, #0
   1657 // CHECK-ERROR-NEXT:                         ^
   1658 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
   1659 // CHECK-ERROR-NEXT:        fcvtzs w19, s20, #33
   1660 // CHECK-ERROR-NEXT:                         ^
   1661 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1662 // CHECK-ERROR-NEXT:        fcvtzs wsp, s19, #14
   1663 // CHECK-ERROR-NEXT:               ^
   1664 
   1665         fcvtzs x13, s31, #0
   1666         fcvtzs x19, s20, #65
   1667         fcvtzs sp, s19, #14
   1668 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
   1669 // CHECK-ERROR-NEXT:        fcvtzs x13, s31, #0
   1670 // CHECK-ERROR-NEXT:                         ^
   1671 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
   1672 // CHECK-ERROR-NEXT:        fcvtzs x19, s20, #65
   1673 // CHECK-ERROR-NEXT:                         ^
   1674 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1675 // CHECK-ERROR-NEXT:        fcvtzs sp, s19, #14
   1676 // CHECK-ERROR-NEXT:               ^
   1677 
   1678         fcvtzu w13, s31, #0
   1679         fcvtzu w19, s20, #33
   1680         fcvtzu wsp, s19, #14
   1681 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
   1682 // CHECK-ERROR-NEXT:        fcvtzu w13, s31, #0
   1683 // CHECK-ERROR-NEXT:                         ^
   1684 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
   1685 // CHECK-ERROR-NEXT:        fcvtzu w19, s20, #33
   1686 // CHECK-ERROR-NEXT:                         ^
   1687 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1688 // CHECK-ERROR-NEXT:        fcvtzu wsp, s19, #14
   1689 // CHECK-ERROR-NEXT:               ^
   1690 
   1691         fcvtzu x13, s31, #0
   1692         fcvtzu x19, s20, #65
   1693         fcvtzu sp, s19, #14
   1694 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
   1695 // CHECK-ERROR-NEXT:        fcvtzu x13, s31, #0
   1696 // CHECK-ERROR-NEXT:                         ^
   1697 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
   1698 // CHECK-ERROR-NEXT:        fcvtzu x19, s20, #65
   1699 // CHECK-ERROR-NEXT:                         ^
   1700 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1701 // CHECK-ERROR-NEXT:        fcvtzu sp, s19, #14
   1702 // CHECK-ERROR-NEXT:               ^
   1703 
   1704         scvtf w13, s31, #0
   1705         scvtf w19, s20, #33
   1706         scvtf wsp, s19, #14
   1707 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1708 // CHECK-ERROR-NEXT:        scvtf w13, s31, #0
   1709 // CHECK-ERROR-NEXT:              ^
   1710 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1711 // CHECK-ERROR-NEXT:        scvtf w19, s20, #33
   1712 // CHECK-ERROR-NEXT:              ^
   1713 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1714 // CHECK-ERROR-NEXT:        scvtf wsp, s19, #14
   1715 // CHECK-ERROR-NEXT:              ^
   1716 
   1717         scvtf x13, s31, #0
   1718         scvtf x19, s20, #65
   1719         scvtf sp, s19, #14
   1720 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1721 // CHECK-ERROR-NEXT:        scvtf x13, s31, #0
   1722 // CHECK-ERROR-NEXT:              ^
   1723 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1724 // CHECK-ERROR-NEXT:        scvtf x19, s20, #65
   1725 // CHECK-ERROR-NEXT:              ^
   1726 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1727 // CHECK-ERROR-NEXT:        scvtf sp, s19, #14
   1728 // CHECK-ERROR-NEXT:              ^
   1729 
   1730         ucvtf w13, s31, #0
   1731         ucvtf w19, s20, #33
   1732         ucvtf wsp, s19, #14
   1733 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1734 // CHECK-ERROR-NEXT:        ucvtf w13, s31, #0
   1735 // CHECK-ERROR-NEXT:              ^
   1736 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1737 // CHECK-ERROR-NEXT:        ucvtf w19, s20, #33
   1738 // CHECK-ERROR-NEXT:              ^
   1739 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1740 // CHECK-ERROR-NEXT:        ucvtf wsp, s19, #14
   1741 // CHECK-ERROR-NEXT:              ^
   1742 
   1743         ucvtf x13, s31, #0
   1744         ucvtf x19, s20, #65
   1745         ucvtf sp, s19, #14
   1746 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1747 // CHECK-ERROR-NEXT:        ucvtf x13, s31, #0
   1748 // CHECK-ERROR-NEXT:              ^
   1749 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1750 // CHECK-ERROR-NEXT:        ucvtf x19, s20, #65
   1751 // CHECK-ERROR-NEXT:              ^
   1752 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1753 // CHECK-ERROR-NEXT:        ucvtf sp, s19, #14
   1754 // CHECK-ERROR-NEXT:              ^
   1755 
   1756 //------------------------------------------------------------------------------
   1757 // Floating-point immediate
   1758 //------------------------------------------------------------------------------
   1759         ;; Exponent too large
   1760         fmov d3, #0.0625
   1761         fmov s2, #32.0
   1762 // CHECK-ERROR: error: expected compatible register or floating-point constant
   1763 // CHECK-ERROR-NEXT:           fmov d3, #0.0625
   1764 // CHECK-ERROR-NEXT:                    ^
   1765 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
   1766 // CHECK-ERROR-NEXT:           fmov s2, #32.0
   1767 // CHECK-ERROR-NEXT:                    ^
   1768 
   1769         ;; Fraction too precise
   1770         fmov s9, #1.03125
   1771         fmov s28, #1.96875
   1772 // CHECK-ERROR: error: expected compatible register or floating-point constant
   1773 // CHECK-ERROR-NEXT:           fmov s9, #1.03125
   1774 // CHECK-ERROR-NEXT:                    ^
   1775 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
   1776 // CHECK-ERROR-NEXT:           fmov s28, #1.96875
   1777 // CHECK-ERROR-NEXT:                     ^
   1778 
   1779         ;; No particular reason, but a striking omission
   1780         fmov d0, #0.0
   1781 // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant
   1782 // CHECK-ERROR-AARCH64-NEXT:           fmov d0, #0.0
   1783 // CHECK-ERROR-AARCH64-NEXT:                    ^
   1784 
   1785 //------------------------------------------------------------------------------
   1786 // Floating-point <-> integer conversion
   1787 //------------------------------------------------------------------------------
   1788 
   1789         fmov x3, v0.d[0]
   1790         fmov v29.1d[1], x2
   1791         fmov x7, v0.d[2]
   1792         fcvtns sp, s5
   1793         scvtf s6, wsp
   1794 // CHECK-ERROR: error: expected lane specifier '[1]'
   1795 // CHECK-ERROR-NEXT:         fmov x3, v0.d[0]
   1796 // CHECK-ERROR-NEXT:                       ^
   1797 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
   1798 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
   1799 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
   1800 // CHECK-ERROR-NEXT:             ^
   1801 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
   1802 // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
   1803 // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
   1804 // CHECK-ERROR-NEXT:               ^
   1805 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1806 // CHECK-ERROR-NEXT:         fcvtns sp, s5
   1807 // CHECK-ERROR-NEXT:                ^
   1808 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1809 // CHECK-ERROR-NEXT:         scvtf s6, wsp
   1810 // CHECK-ERROR-NEXT:                   ^
   1811 
   1812 //------------------------------------------------------------------------------
   1813 // Load-register (literal)
   1814 //------------------------------------------------------------------------------
   1815 
   1816         ldr sp, some_label
   1817         ldrsw w3, somewhere
   1818 // CHECK-ERROR: error: invalid operand for instruction
   1819 // CHECK-ERROR-NEXT:         ldr sp, some_label
   1820 // CHECK-ERROR-NEXT:             ^
   1821 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   1822 // CHECK-ERROR-NEXT:         ldrsw w3, somewhere
   1823 // CHECK-ERROR-NEXT:               ^
   1824 
   1825         ldrsw x2, #1048576
   1826         ldr q0, #-1048580
   1827         ldr x0, #2
   1828 // CHECK-ERROR: error: expected label or encodable integer pc offset
   1829 // CHECK-ERROR-NEXT:         ldrsw x2, #1048576
   1830 // CHECK-ERROR-NEXT:                   ^
   1831 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1832 // CHECK-ERROR-NEXT:         ldr q0, #-1048580
   1833 // CHECK-ERROR-NEXT:                   ^
   1834 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   1835 // CHECK-ERROR-NEXT:         ldr x0, #2
   1836 // CHECK-ERROR-NEXT:                 ^
   1837 
   1838 //------------------------------------------------------------------------------
   1839 // Load/store exclusive
   1840 //------------------------------------------------------------------------------
   1841 
   1842        stxrb w2, w3, [x4, #20]
   1843        stlxrh w10, w11, [w2]
   1844 // CHECK-ERROR-AARCH64: error: expected '#0'
   1845 // CHECK-ERROR-ARM64: error: index must be absent or #0
   1846 // CHECK-ERROR-NEXT:         stxrb w2, w3, [x4, #20]
   1847 // CHECK-ERROR-NEXT:                       ^
   1848 // CHECK-ERROR: error: invalid operand for instruction
   1849 // CHECK-ERROR-NEXT:         stlxrh w10, w11, [w2]
   1850 // CHECK-ERROR-NEXT:                           ^
   1851 
   1852        stlxr  x20, w21, [sp]
   1853 // CHECK-ERROR: error: invalid operand for instruction
   1854 // CHECK-ERROR-NEXT:         stlxr  x20, w21, [sp]
   1855 // CHECK-ERROR-NEXT:                ^
   1856 
   1857        ldxr   sp, [sp]
   1858 // CHECK-ERROR: error: invalid operand for instruction
   1859 // CHECK-ERROR-NEXT:         ldxr   sp, [sp]
   1860 // CHECK-ERROR-NEXT:                ^
   1861 
   1862        stxp x1, x2, x3, [x4]
   1863 // CHECK-ERROR: error: invalid operand for instruction
   1864 // CHECK-ERROR-NEXT:         stxp x1, x2,  x3, [x4]
   1865 // CHECK-ERROR-NEXT:              ^
   1866 
   1867        stlxp w5, x1, w4, [x5]
   1868 // CHECK-ERROR: error: invalid operand for instruction
   1869 // CHECK-ERROR-NEXT:         stlxp w5, x1, w4, [x5]
   1870 // CHECK-ERROR-NEXT:                       ^
   1871 
   1872        stlxp w17, w6, x7, [x22]
   1873 // CHECK-ERROR: error: invalid operand for instruction
   1874 // CHECK-ERROR-NEXT:         stlxp w17, w6, x7, [x22]
   1875 // CHECK-ERROR-NEXT:                        ^
   1876 
   1877 //------------------------------------------------------------------------------
   1878 // Load/store (unscaled immediate)
   1879 //------------------------------------------------------------------------------
   1880 
   1881         ldurb w2, [sp, #256]
   1882         sturh w17, [x1, #256]
   1883         ldursw x20, [x1, #256]
   1884         ldur x12, [sp, #256]
   1885 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   1886 // CHECK-ERROR-NEXT:        ldurb w2, [sp, #256]
   1887 // CHECK-ERROR-NEXT:                  ^
   1888 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1889 // CHECK-ERROR-NEXT:         sturh w17, [x1, #256]
   1890 // CHECK-ERROR-NEXT:                    ^
   1891 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1892 // CHECK-ERROR-NEXT:         ldursw x20, [x1, #256]
   1893 // CHECK-ERROR-NEXT:                     ^
   1894 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1895 // CHECK-ERROR-NEXT:         ldur x12, [sp, #256]
   1896 // CHECK-ERROR-NEXT:                   ^
   1897 
   1898         stur h2, [x2, #-257]
   1899         stur b2, [x2, #-257]
   1900         ldursb x9, [sp, #-257]
   1901         ldur w2, [x30, #-257]
   1902         stur q9, [x20, #-257]
   1903 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   1904 // CHECK-ERROR-NEXT:         stur h2, [x2, #-257]
   1905 // CHECK-ERROR-NEXT:                  ^
   1906 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1907 // CHECK-ERROR-NEXT:         stur b2, [x2, #-257]
   1908 // CHECK-ERROR-NEXT:                  ^
   1909 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1910 // CHECK-ERROR-NEXT:         ldursb x9, [sp, #-257]
   1911 // CHECK-ERROR-NEXT:                    ^
   1912 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1913 // CHECK-ERROR-NEXT:         ldur w2, [x30, #-257]
   1914 // CHECK-ERROR-NEXT:                  ^
   1915 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1916 // CHECK-ERROR-NEXT:         stur q9, [x20, #-257]
   1917 // CHECK-ERROR-NEXT:                  ^
   1918 
   1919         prfum pstl3strm, [xzr]
   1920 // CHECK-ERROR: error: invalid operand for instruction
   1921 // CHECK-ERROR-NEXT:         prfum pstl3strm, [xzr]
   1922 // CHECK-ERROR-NEXT:                           ^
   1923 
   1924 //------------------------------------------------------------------------------
   1925 // Load-store register (immediate post-indexed)
   1926 //------------------------------------------------------------------------------
   1927         ldr x3, [x4, #25], #0
   1928         ldr x4, [x9, #0], #4
   1929 // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760]
   1930 // CHECK-ERROR-ARM64: error: invalid operand for instruction
   1931 // CHECK-ERROR-NEXT:         ldr x3, [x4, #25], #0
   1932 // CHECK-ERROR-NEXT:                 ^
   1933 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
   1934 // CHECK-ERROR-AARCH64-NEXT:         ldr x4, [x9, #0], #4
   1935 // CHECK-ERROR-AARCH64-NEXT:                           ^
   1936 
   1937         strb w1, [x19], #256
   1938         strb w9, [sp], #-257
   1939         strh w1, [x19], #256
   1940         strh w9, [sp], #-257
   1941         str w1, [x19], #256
   1942         str w9, [sp], #-257
   1943 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   1944 // CHECK-ERROR-NEXT:         strb w1, [x19], #256
   1945 // CHECK-ERROR-NEXT:                         ^
   1946 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1947 // CHECK-ERROR-NEXT:         strb w9, [sp], #-257
   1948 // CHECK-ERROR-NEXT:                        ^
   1949 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1950 // CHECK-ERROR-NEXT:         strh w1, [x19], #256
   1951 // CHECK-ERROR-NEXT:                         ^
   1952 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1953 // CHECK-ERROR-NEXT:         strh w9, [sp], #-257
   1954 // CHECK-ERROR-NEXT:                        ^
   1955 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1956 // CHECK-ERROR-NEXT:         str w1, [x19], #256
   1957 // CHECK-ERROR-NEXT:                        ^
   1958 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1959 // CHECK-ERROR-NEXT:         str w9, [sp], #-257
   1960 // CHECK-ERROR-NEXT:                       ^
   1961 
   1962         ldrb w1, [x19], #256
   1963         ldrb w9, [sp], #-257
   1964         ldrh w1, [x19], #256
   1965         ldrh w9, [sp], #-257
   1966         ldr w1, [x19], #256
   1967         ldr w9, [sp], #-257
   1968 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   1969 // CHECK-ERROR-NEXT:         ldrb w1, [x19], #256
   1970 // CHECK-ERROR-NEXT:                         ^
   1971 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1972 // CHECK-ERROR-NEXT:         ldrb w9, [sp], #-257
   1973 // CHECK-ERROR-NEXT:                        ^
   1974 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1975 // CHECK-ERROR-NEXT:         ldrh w1, [x19], #256
   1976 // CHECK-ERROR-NEXT:                         ^
   1977 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1978 // CHECK-ERROR-NEXT:         ldrh w9, [sp], #-257
   1979 // CHECK-ERROR-NEXT:                        ^
   1980 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1981 // CHECK-ERROR-NEXT:         ldr w1, [x19], #256
   1982 // CHECK-ERROR-NEXT:                        ^
   1983 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1984 // CHECK-ERROR-NEXT:         ldr w9, [sp], #-257
   1985 // CHECK-ERROR-NEXT:                       ^
   1986 
   1987         ldrsb x2, [x3], #256
   1988         ldrsb x22, [x13], #-257
   1989         ldrsh x2, [x3], #256
   1990         ldrsh x22, [x13], #-257
   1991         ldrsw x2, [x3], #256
   1992         ldrsw x22, [x13], #-257
   1993 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   1994 // CHECK-ERROR-NEXT:         ldrsb x2, [x3], #256
   1995 // CHECK-ERROR-NEXT:                         ^
   1996 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   1997 // CHECK-ERROR-NEXT:         ldrsb x22, [x13], #-257
   1998 // CHECK-ERROR-NEXT:                           ^
   1999 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2000 // CHECK-ERROR-NEXT:         ldrsh x2, [x3], #256
   2001 // CHECK-ERROR-NEXT:                         ^
   2002 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2003 // CHECK-ERROR-NEXT:         ldrsh x22, [x13], #-257
   2004 // CHECK-ERROR-NEXT:                           ^
   2005 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2006 // CHECK-ERROR-NEXT:         ldrsw x2, [x3], #256
   2007 // CHECK-ERROR-NEXT:                         ^
   2008 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2009 // CHECK-ERROR-NEXT:         ldrsw x22, [x13], #-257
   2010 // CHECK-ERROR-NEXT:                           ^
   2011 
   2012         ldrsb w2, [x3], #256
   2013         ldrsb w22, [x13], #-257
   2014         ldrsh w2, [x3], #256
   2015         ldrsh w22, [x13], #-257
   2016 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   2017 // CHECK-ERROR-NEXT:         ldrsb w2, [x3], #256
   2018 // CHECK-ERROR-NEXT:                         ^
   2019 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2020 // CHECK-ERROR-NEXT:         ldrsb w22, [x13], #-257
   2021 // CHECK-ERROR-NEXT:                           ^
   2022 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2023 // CHECK-ERROR-NEXT:         ldrsh w2, [x3], #256
   2024 // CHECK-ERROR-NEXT:                         ^
   2025 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2026 // CHECK-ERROR-NEXT:         ldrsh w22, [x13], #-257
   2027 // CHECK-ERROR-NEXT:                           ^
   2028 
   2029         str b3, [x3], #256
   2030         str b3, [x13], #-257
   2031         str h3, [x3], #256
   2032         str h3, [x13], #-257
   2033         str s3, [x3], #256
   2034         str s3, [x13], #-257
   2035         str d3, [x3], #256
   2036         str d3, [x13], #-257
   2037         str q3, [x3], #256
   2038         str q3, [x13], #-257
   2039 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   2040 // CHECK-ERROR-NEXT:         str b3, [x3], #256
   2041 // CHECK-ERROR-NEXT:                       ^
   2042 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2043 // CHECK-ERROR-NEXT:         str b3, [x13], #-257
   2044 // CHECK-ERROR-NEXT:                        ^
   2045 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2046 // CHECK-ERROR-NEXT:         str h3, [x3], #256
   2047 // CHECK-ERROR-NEXT:                       ^
   2048 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2049 // CHECK-ERROR-NEXT:         str h3, [x13], #-257
   2050 // CHECK-ERROR-NEXT:                        ^
   2051 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2052 // CHECK-ERROR-NEXT:         str s3, [x3], #256
   2053 // CHECK-ERROR-NEXT:                       ^
   2054 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2055 // CHECK-ERROR-NEXT:         str s3, [x13], #-257
   2056 // CHECK-ERROR-NEXT:                        ^
   2057 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2058 // CHECK-ERROR-NEXT:         str d3, [x3], #256
   2059 // CHECK-ERROR-NEXT:                       ^
   2060 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2061 // CHECK-ERROR-NEXT:         str d3, [x13], #-257
   2062 // CHECK-ERROR-NEXT:                        ^
   2063 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2064 // CHECK-ERROR-NEXT:         str q3, [x3], #256
   2065 // CHECK-ERROR-NEXT:                       ^
   2066 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2067 // CHECK-ERROR-NEXT:         str q3, [x13], #-257
   2068 // CHECK-ERROR-NEXT:                        ^
   2069 
   2070         ldr b3, [x3], #256
   2071         ldr b3, [x13], #-257
   2072         ldr h3, [x3], #256
   2073         ldr h3, [x13], #-257
   2074         ldr s3, [x3], #256
   2075         ldr s3, [x13], #-257
   2076         ldr d3, [x3], #256
   2077         ldr d3, [x13], #-257
   2078         ldr q3, [x3], #256
   2079         ldr q3, [x13], #-257
   2080 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   2081 // CHECK-ERROR-NEXT:         ldr b3, [x3], #256
   2082 // CHECK-ERROR-NEXT:                       ^
   2083 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2084 // CHECK-ERROR-NEXT:         ldr b3, [x13], #-257
   2085 // CHECK-ERROR-NEXT:                        ^
   2086 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2087 // CHECK-ERROR-NEXT:         ldr h3, [x3], #256
   2088 // CHECK-ERROR-NEXT:                       ^
   2089 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2090 // CHECK-ERROR-NEXT:         ldr h3, [x13], #-257
   2091 // CHECK-ERROR-NEXT:                        ^
   2092 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2093 // CHECK-ERROR-NEXT:         ldr s3, [x3], #256
   2094 // CHECK-ERROR-NEXT:                       ^
   2095 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2096 // CHECK-ERROR-NEXT:         ldr s3, [x13], #-257
   2097 // CHECK-ERROR-NEXT:                        ^
   2098 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2099 // CHECK-ERROR-NEXT:         ldr d3, [x3], #256
   2100 // CHECK-ERROR-NEXT:                       ^
   2101 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2102 // CHECK-ERROR-NEXT:         ldr d3, [x13], #-257
   2103 // CHECK-ERROR-NEXT:                        ^
   2104 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2105 // CHECK-ERROR-NEXT:         ldr q3, [x3], #256
   2106 // CHECK-ERROR-NEXT:                       ^
   2107 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2108 // CHECK-ERROR-NEXT:         ldr q3, [x13], #-257
   2109 // CHECK-ERROR-NEXT:                        ^
   2110 
   2111 //------------------------------------------------------------------------------
   2112 // Load-store register (immediate pre-indexed)
   2113 //------------------------------------------------------------------------------
   2114 
   2115         ldr x3, [x4]!
   2116 // CHECK-ERROR: error:
   2117 // CHECK-ERROR-NEXT:         ldr x3, [x4]!
   2118 // CHECK-ERROR-NEXT:                     ^
   2119 
   2120         strb w1, [x19, #256]!
   2121         strb w9, [sp, #-257]!
   2122         strh w1, [x19, #256]!
   2123         strh w9, [sp, #-257]!
   2124         str w1, [x19, #256]!
   2125         str w9, [sp, #-257]!
   2126 // CHECK-ERROR: error: invalid operand for instruction
   2127 // CHECK-ERROR-NEXT:         strb w1, [x19, #256]!
   2128 // CHECK-ERROR-NEXT:                             ^
   2129 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2130 // CHECK-ERROR-NEXT:         strb w9, [sp, #-257]!
   2131 // CHECK-ERROR-NEXT:                  ^
   2132 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2133 // CHECK-ERROR-NEXT:         strh w1, [x19, #256]!
   2134 // CHECK-ERROR-NEXT:                             ^
   2135 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2136 // CHECK-ERROR-NEXT:         strh w9, [sp, #-257]!
   2137 // CHECK-ERROR-NEXT:                  ^
   2138 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2139 // CHECK-ERROR-NEXT:         str w1, [x19, #256]!
   2140 // CHECK-ERROR-NEXT:                            ^
   2141 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2142 // CHECK-ERROR-NEXT:         str w9, [sp, #-257]!
   2143 // CHECK-ERROR-NEXT:                 ^
   2144 
   2145         ldrb w1, [x19, #256]!
   2146         ldrb w9, [sp, #-257]!
   2147         ldrh w1, [x19, #256]!
   2148         ldrh w9, [sp, #-257]!
   2149         ldr w1, [x19, #256]!
   2150         ldr w9, [sp, #-257]!
   2151 // CHECK-ERROR: error: invalid operand for instruction
   2152 // CHECK-ERROR-NEXT:         ldrb w1, [x19, #256]!
   2153 // CHECK-ERROR-NEXT:                             ^
   2154 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2155 // CHECK-ERROR-NEXT:         ldrb w9, [sp, #-257]!
   2156 // CHECK-ERROR-NEXT:                  ^
   2157 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2158 // CHECK-ERROR-NEXT:         ldrh w1, [x19, #256]!
   2159 // CHECK-ERROR-NEXT:                             ^
   2160 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2161 // CHECK-ERROR-NEXT:         ldrh w9, [sp, #-257]!
   2162 // CHECK-ERROR-NEXT:                  ^
   2163 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2164 // CHECK-ERROR-NEXT:         ldr w1, [x19, #256]!
   2165 // CHECK-ERROR-NEXT:                            ^
   2166 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2167 // CHECK-ERROR-NEXT:         ldr w9, [sp, #-257]!
   2168 // CHECK-ERROR-NEXT:                 ^
   2169 
   2170         ldrsb x2, [x3, #256]!
   2171         ldrsb x22, [x13, #-257]!
   2172         ldrsh x2, [x3, #256]!
   2173         ldrsh x22, [x13, #-257]!
   2174         ldrsw x2, [x3, #256]!
   2175         ldrsw x22, [x13, #-257]!
   2176 // CHECK-ERROR: error: invalid operand for instruction
   2177 // CHECK-ERROR-NEXT:         ldrsb x2, [x3, #256]!
   2178 // CHECK-ERROR-NEXT:                             ^
   2179 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2180 // CHECK-ERROR-NEXT:         ldrsb x22, [x13, #-257]!
   2181 // CHECK-ERROR-NEXT:                    ^
   2182 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2183 // CHECK-ERROR-NEXT:         ldrsh x2, [x3, #256]!
   2184 // CHECK-ERROR-NEXT:                             ^
   2185 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2186 // CHECK-ERROR-NEXT:         ldrsh x22, [x13, #-257]!
   2187 // CHECK-ERROR-NEXT:                    ^
   2188 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2189 // CHECK-ERROR-NEXT:         ldrsw x2, [x3, #256]!
   2190 // CHECK-ERROR-NEXT:                             ^
   2191 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2192 // CHECK-ERROR-NEXT:         ldrsw x22, [x13, #-257]!
   2193 // CHECK-ERROR-NEXT:                    ^
   2194 
   2195         ldrsb w2, [x3, #256]!
   2196         ldrsb w22, [x13, #-257]!
   2197         ldrsh w2, [x3, #256]!
   2198         ldrsh w22, [x13, #-257]!
   2199 // CHECK-ERROR: error: invalid operand for instruction
   2200 // CHECK-ERROR-NEXT:         ldrsb w2, [x3, #256]!
   2201 // CHECK-ERROR-NEXT:                             ^
   2202 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2203 // CHECK-ERROR-NEXT:         ldrsb w22, [x13, #-257]!
   2204 // CHECK-ERROR-NEXT:                    ^
   2205 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2206 // CHECK-ERROR-NEXT:         ldrsh w2, [x3, #256]!
   2207 // CHECK-ERROR-NEXT:                             ^
   2208 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2209 // CHECK-ERROR-NEXT:         ldrsh w22, [x13, #-257]!
   2210 // CHECK-ERROR-NEXT:                    ^
   2211 
   2212         str b3, [x3, #256]!
   2213         str b3, [x13, #-257]!
   2214         str h3, [x3, #256]!
   2215         str h3, [x13, #-257]!
   2216         str s3, [x3, #256]!
   2217         str s3, [x13, #-257]!
   2218         str d3, [x3, #256]!
   2219         str d3, [x13, #-257]!
   2220 // CHECK-ERROR: error: invalid operand for instruction
   2221 // CHECK-ERROR-NEXT:         str b3, [x3, #256]!
   2222 // CHECK-ERROR-NEXT:                           ^
   2223 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2224 // CHECK-ERROR-NEXT:         str b3, [x13, #-257]!
   2225 // CHECK-ERROR-NEXT:                 ^
   2226 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2227 // CHECK-ERROR-NEXT:         str h3, [x3, #256]!
   2228 // CHECK-ERROR-NEXT:                           ^
   2229 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2230 // CHECK-ERROR-NEXT:         str h3, [x13, #-257]!
   2231 // CHECK-ERROR-NEXT:                 ^
   2232 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2233 // CHECK-ERROR-NEXT:         str s3, [x3, #256]!
   2234 // CHECK-ERROR-NEXT:                           ^
   2235 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2236 // CHECK-ERROR-NEXT:         str s3, [x13, #-257]!
   2237 // CHECK-ERROR-NEXT:                 ^
   2238 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2239 // CHECK-ERROR-NEXT:         str d3, [x3, #256]!
   2240 // CHECK-ERROR-NEXT:                           ^
   2241 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2242 // CHECK-ERROR-NEXT:         str d3, [x13, #-257]!
   2243 // CHECK-ERROR-NEXT:                 ^
   2244 
   2245         ldr b3, [x3, #256]!
   2246         ldr b3, [x13, #-257]!
   2247         ldr h3, [x3, #256]!
   2248         ldr h3, [x13, #-257]!
   2249         ldr s3, [x3, #256]!
   2250         ldr s3, [x13, #-257]!
   2251         ldr d3, [x3, #256]!
   2252         ldr d3, [x13, #-257]!
   2253 // CHECK-ERROR: error: invalid operand for instruction
   2254 // CHECK-ERROR-NEXT:         ldr b3, [x3, #256]!
   2255 // CHECK-ERROR-NEXT:                           ^
   2256 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2257 // CHECK-ERROR-NEXT:         ldr b3, [x13, #-257]!
   2258 // CHECK-ERROR-NEXT:                 ^
   2259 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2260 // CHECK-ERROR-NEXT:         ldr h3, [x3, #256]!
   2261 // CHECK-ERROR-NEXT:                           ^
   2262 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2263 // CHECK-ERROR-NEXT:         ldr h3, [x13, #-257]!
   2264 // CHECK-ERROR-NEXT:                 ^
   2265 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2266 // CHECK-ERROR-NEXT:         ldr s3, [x3, #256]!
   2267 // CHECK-ERROR-NEXT:                           ^
   2268 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2269 // CHECK-ERROR-NEXT:         ldr s3, [x13, #-257]!
   2270 // CHECK-ERROR-NEXT:                 ^
   2271 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2272 // CHECK-ERROR-NEXT:         ldr d3, [x3, #256]!
   2273 // CHECK-ERROR-NEXT:                           ^
   2274 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2275 // CHECK-ERROR-NEXT:         ldr d3, [x13, #-257]!
   2276 // CHECK-ERROR-NEXT:                 ^
   2277 
   2278 //------------------------------------------------------------------------------
   2279 // Load/store (unprivileged)
   2280 //------------------------------------------------------------------------------
   2281 
   2282         ldtrb w2, [sp, #256]
   2283         sttrh w17, [x1, #256]
   2284         ldtrsw x20, [x1, #256]
   2285         ldtr x12, [sp, #256]
   2286 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   2287 // CHECK-ERROR-NEXT:        ldtrb w2, [sp, #256]
   2288 // CHECK-ERROR-NEXT:                  ^
   2289 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2290 // CHECK-ERROR-NEXT:         sttrh w17, [x1, #256]
   2291 // CHECK-ERROR-NEXT:                    ^
   2292 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2293 // CHECK-ERROR-NEXT:         ldtrsw x20, [x1, #256]
   2294 // CHECK-ERROR-NEXT:                     ^
   2295 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2296 // CHECK-ERROR-NEXT:         ldtr x12, [sp, #256]
   2297 // CHECK-ERROR-NEXT:                   ^
   2298 
   2299         sttr h2, [x2, #-257]
   2300         sttr b2, [x2, #-257]
   2301         ldtrsb x9, [sp, #-257]
   2302         ldtr w2, [x30, #-257]
   2303         sttr q9, [x20, #-257]
   2304 // CHECK-ERROR: error: invalid operand for instruction
   2305 // CHECK-ERROR-NEXT:         sttr h2, [x2, #-257]
   2306 // CHECK-ERROR-NEXT:              ^
   2307 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2308 // CHECK-ERROR-NEXT:         sttr b2, [x2, #-257]
   2309 // CHECK-ERROR-NEXT:              ^
   2310 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2311 // CHECK-ERROR-NEXT:         ldtrsb x9, [sp, #-257]
   2312 // CHECK-ERROR-NEXT:                    ^
   2313 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2314 // CHECK-ERROR-NEXT:         ldtr w2, [x30, #-257]
   2315 // CHECK-ERROR-NEXT:                  ^
   2316 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2317 // CHECK-ERROR-NEXT:         sttr q9, [x20, #-257]
   2318 // CHECK-ERROR-NEXT:                  ^
   2319 
   2320 
   2321 //------------------------------------------------------------------------------
   2322 // Load/store (unsigned immediate)
   2323 //------------------------------------------------------------------------------
   2324 
   2325 //// Out of range immediates
   2326         ldr q0, [x11, #65536]
   2327         ldr x0, [sp, #32768]
   2328         ldr w0, [x4, #16384]
   2329         ldrh w2, [x21, #8192]
   2330         ldrb w3, [x12, #4096]
   2331 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
   2332 // CHECK-ERROR-NEXT:         ldr q0, [x11, #65536]
   2333 // CHECK-ERROR-NEXT:                 ^
   2334 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2335 // CHECK-ERROR-NEXT:         ldr x0, [sp, #32768]
   2336 // CHECK-ERROR-NEXT:                 ^
   2337 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2338 // CHECK-ERROR-NEXT:         ldr w0, [x4, #16384]
   2339 // CHECK-ERROR-NEXT:                 ^
   2340 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2341 // CHECK-ERROR-NEXT:         ldrh w2, [x21, #8192]
   2342 // CHECK-ERROR-NEXT:                  ^
   2343 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2344 // CHECK-ERROR-NEXT:         ldrb w3, [x12, #4096]
   2345 // CHECK-ERROR-NEXT:                  ^
   2346 
   2347 //// Misaligned addresses
   2348         ldr w0, [x0, #2]
   2349         ldrsh w2, [x0, #123]
   2350         str q0, [x0, #8]
   2351 // CHECK-ERROR-AARCH64: error: too few operands for instruction
   2352 // CHECK-ERROR-AARCH64-NEXT:         ldr w0, [x0, #2]
   2353 // CHECK-ERROR-AARCH64-NEXT:                 ^
   2354 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
   2355 // CHECK-ERROR-AARCH64-NEXT:         ldrsh w2, [x0, #123]
   2356 // CHECK-ERROR-AARCH64-NEXT:                   ^
   2357 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
   2358 // CHECK-ERROR-AARCH64-NEXT:         str q0, [x0, #8]
   2359 // CHECK-ERROR-AARCH64-NEXT:                 ^
   2360 
   2361 //// 32-bit addresses
   2362         ldr w0, [w20]
   2363         ldrsh x3, [wsp]
   2364 // CHECK-ERROR: error: invalid operand for instruction
   2365 // CHECK-ERROR-NEXT:         ldr w0, [w20]
   2366 // CHECK-ERROR-NEXT:                  ^
   2367 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2368 // CHECK-ERROR-NEXT:         ldrsh x3, [wsp]
   2369 // CHECK-ERROR-NEXT:                    ^
   2370 
   2371 //// Store things
   2372         strb w0, [wsp]
   2373         strh w31, [x23, #1]
   2374         str x5, [x22, #12]
   2375         str w7, [x12, #16384]
   2376 // CHECK-ERROR: error: invalid operand for instruction
   2377 // CHECK-ERROR-NEXT: strb w0, [wsp]
   2378 // CHECK-ERROR-NEXT:           ^
   2379 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
   2380 // CHECK-ERROR-AARCH64-NEXT:         strh w31, [x23, #1]
   2381 // CHECK-ERROR-AARCH64-NEXT:              ^
   2382 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
   2383 // CHECK-ERROR-AARCH64-NEXT:         str x5, [x22, #12]
   2384 // CHECK-ERROR-AARCH64-NEXT:                 ^
   2385 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
   2386 // CHECK-ERROR-NEXT:         str w7, [x12, #16384]
   2387 // CHECK-ERROR-NEXT:                 ^
   2388 
   2389 //// Bad PRFMs
   2390         prfm #-1, [sp]
   2391         prfm #32, [sp, #8]
   2392         prfm pldl1strm, [w3, #8]
   2393         prfm wibble, [sp]
   2394 // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
   2395 // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
   2396 // CHECK-ERROR-NEXT:        prfm #-1, [sp]
   2397 // CHECK-ERROR-NEXT:             ^
   2398 // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
   2399 // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
   2400 // CHECK-ERROR-NEXT:        prfm #32, [sp, #8]
   2401 // CHECK-ERROR-NEXT:             ^
   2402 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2403 // CHECK-ERROR-NEXT:        prfm pldl1strm, [w3, #8]
   2404 // CHECK-ERROR-NEXT:                         ^
   2405 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
   2406 // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected
   2407 // CHECK-ERROR-NEXT:        prfm wibble, [sp]
   2408 // CHECK-ERROR-NEXT:             ^
   2409 
   2410 //------------------------------------------------------------------------------
   2411 // Load/store register (register offset)
   2412 //------------------------------------------------------------------------------
   2413 
   2414         ldr w3, [xzr, x3]
   2415         ldr w4, [x0, x4, lsl]
   2416         ldr w9, [x5, x5, uxtw]
   2417         ldr w10, [x6, x9, sxtw #2]
   2418         ldr w11, [x7, w2, lsl #2]
   2419         ldr w12, [x8, w1, sxtx]
   2420 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2421 // CHECK-ERROR-NEXT:        ldr w3, [xzr, x3]
   2422 // CHECK-ERROR-NEXT:                 ^
   2423 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
   2424 // CHECK-ERROR-NEXT:         ldr w4, [x0, x4, lsl]
   2425 // CHECK-ERROR-NEXT:                             ^
   2426 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
   2427 // CHECK-ERROR-NEXT:         ldr w9, [x5, x5, uxtw]
   2428 // CHECK-ERROR-NEXT:                          ^
   2429 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
   2430 // CHECK-ERROR-NEXT:         ldr w10, [x6, x9, sxtw #2]
   2431 // CHECK-ERROR-NEXT:                           ^
   2432 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
   2433 // CHECK-ERROR-NEXT:         ldr w11, [x7, w2, lsl #2]
   2434 // CHECK-ERROR-NEXT:                           ^
   2435 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
   2436 // CHECK-ERROR-NEXT:         ldr w12, [x8, w1, sxtx]
   2437 // CHECK-ERROR-NEXT:                           ^
   2438 
   2439         ldrsb w9, [x4, x2, lsl #-1]
   2440         strb w9, [x4, x2, lsl #1]
   2441 // CHECK-ERROR-NEXT: error: expected integer shift amount
   2442 // CHECK-ERROR-NEXT:         ldrsb w9, [x4, x2, lsl #-1]
   2443 // CHECK-ERROR-NEXT:                                 ^
   2444 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
   2445 // CHECK-ERROR-NEXT:         strb w9, [x4, x2, lsl #1]
   2446 // CHECK-ERROR-NEXT:                  ^
   2447 
   2448         ldrsh w9, [x4, x2, lsl #-1]
   2449         ldr h13, [x4, w2, uxtw #2]
   2450 // CHECK-ERROR-NEXT: error: expected integer shift amount
   2451 // CHECK-ERROR-NEXT:         ldrsh w9, [x4, x2, lsl #-1]
   2452 // CHECK-ERROR-NEXT:                                 ^
   2453 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
   2454 // CHECK-ERROR-NEXT:         ldr h13, [x4, w2, uxtw #2]
   2455 // CHECK-ERROR-NEXT:                           ^
   2456 
   2457         str w9, [x5, w9, sxtw #-1]
   2458         str s3, [sp, w9, uxtw #1]
   2459         ldrsw x9, [x15, x4, sxtx #3]
   2460 // CHECK-ERROR-NEXT: error: expected integer shift amount
   2461 // CHECK-ERROR-NEXT:         str w9, [x5, w9, sxtw #-1]
   2462 // CHECK-ERROR-NEXT:                                ^
   2463 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
   2464 // CHECK-ERROR-NEXT:         str s3, [sp, w9, uxtw #1]
   2465 // CHECK-ERROR-NEXT:                          ^
   2466 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
   2467 // CHECK-ERROR-NEXT:         ldrsw x9, [x15, x4, sxtx #3]
   2468 // CHECK-ERROR-NEXT:                             ^
   2469 
   2470         str xzr, [x5, x9, sxtx #-1]
   2471         prfm pldl3keep, [sp, x20, lsl #2]
   2472         ldr d3, [x20, wzr, uxtw #4]
   2473 // CHECK-ERROR-NEXT: error: expected integer shift amount
   2474 // CHECK-ERROR-NEXT:         str xzr, [x5, x9, sxtx #-1]
   2475 // CHECK-ERROR-NEXT:                                 ^
   2476 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
   2477 // CHECK-ERROR-NEXT:         prfm pldl3keep, [sp, x20, lsl #2]
   2478 // CHECK-ERROR-NEXT:                         ^
   2479 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
   2480 // CHECK-ERROR-NEXT:         ldr d3, [x20, wzr, uxtw #4]
   2481 // CHECK-ERROR-NEXT:                 ^
   2482 
   2483         ldr q5, [sp, x2, lsl #-1]
   2484         ldr q10, [x20, w4, uxtw #2]
   2485         str q21, [x20, w4, uxtw #5]
   2486 // CHECK-ERROR-NEXT: error: expected integer shift amount
   2487 // CHECK-ERROR-NEXT:         ldr q5, [sp, x2, lsl #-1]
   2488 // CHECK-ERROR-NEXT:                               ^
   2489 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
   2490 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
   2491 // CHECK-ERROR-NEXT:         ldr q10, [x20, w4, uxtw #2]
   2492 // CHECK-ERROR-NEXT:                  ^
   2493 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
   2494 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
   2495 // CHECK-ERROR-NEXT:         str q21, [x20, w4, uxtw #5]
   2496 // CHECK-ERROR-NEXT:                  ^
   2497 
   2498 //------------------------------------------------------------------------------
   2499 // Load/store register pair (offset)
   2500 //------------------------------------------------------------------------------
   2501         ldp w3, w2, [x4, #1]
   2502         stp w1, w2, [x3, #253]
   2503         stp w9, w10, [x5, #256]
   2504         ldp w11, w12, [x9, #-260]
   2505         stp wsp, w9, [sp]
   2506 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2507 // CHECK-ERROR-NEXT:         ldp w3, w2, [x4, #1]
   2508 // CHECK-ERROR-NEXT:                          ^
   2509 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2510 // CHECK-ERROR-NEXT:         stp w1, w2, [x3, #253]
   2511 // CHECK-ERROR-NEXT:                     ^
   2512 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2513 // CHECK-ERROR-NEXT:         stp w9, w10, [x5, #256]
   2514 // CHECK-ERROR-NEXT:                      ^
   2515 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2516 // CHECK-ERROR-NEXT:         ldp w11, w12, [x9, #-260]
   2517 // CHECK-ERROR-NEXT:                       ^
   2518 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2519 // CHECK-ERROR-NEXT:         stp wsp, w9, [sp]
   2520 // CHECK-ERROR-NEXT:             ^
   2521 
   2522         ldpsw x9, x2, [sp, #2]
   2523         ldpsw x1, x2, [x10, #256]
   2524         ldpsw x3, x4, [x11, #-260]
   2525 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2526 // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp, #2]
   2527 // CHECK-ERROR-NEXT:                       ^
   2528 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2529 // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10, #256]
   2530 // CHECK-ERROR-NEXT:                       ^
   2531 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2532 // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11, #-260]
   2533 // CHECK-ERROR-NEXT:                       ^
   2534 
   2535         ldp x2, x5, [sp, #4]
   2536         ldp x5, x6, [x9, #512]
   2537         stp x7, x8, [x10, #-520]
   2538 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2539 // CHECK-ERROR-NEXT:         ldp x2, x5, [sp, #4]
   2540 // CHECK-ERROR-NEXT:                     ^
   2541 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2542 // CHECK-ERROR-NEXT:         ldp x5, x6, [x9, #512]
   2543 // CHECK-ERROR-NEXT:                     ^
   2544 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2545 // CHECK-ERROR-NEXT:         stp x7, x8, [x10, #-520]
   2546 // CHECK-ERROR-NEXT:                     ^
   2547 
   2548         ldp sp, x3, [x10]
   2549         stp x3, sp, [x9]
   2550 // CHECK-ERROR: error: invalid operand for instruction
   2551 // CHECK-ERROR-NEXT:         ldp sp, x3, [x10]
   2552 // CHECK-ERROR-NEXT:             ^
   2553 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2554 // CHECK-ERROR-NEXT:         stp x3, sp, [x9]
   2555 // CHECK-ERROR-NEXT:                 ^
   2556 
   2557         stp s3, s5, [sp, #-2]
   2558         ldp s6, s26, [x4, #-260]
   2559         stp s13, s19, [x5, #256]
   2560 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2561 // CHECK-ERROR-NEXT:         stp s3, s5, [sp, #-2]
   2562 // CHECK-ERROR-NEXT:                     ^
   2563 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2564 // CHECK-ERROR-NEXT:         ldp s6, s26, [x4, #-260]
   2565 // CHECK-ERROR-NEXT:                      ^
   2566 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2567 // CHECK-ERROR-NEXT:         stp s13, s19, [x5, #256]
   2568 // CHECK-ERROR-NEXT:                       ^
   2569 
   2570         ldp d3, d4, [xzr]
   2571         ldp d5, d6, [x0, #512]
   2572         stp d7, d8, [x0, #-520]
   2573 // CHECK-ERROR: error: invalid operand for instruction
   2574 // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr]
   2575 // CHECK-ERROR-NEXT:                      ^
   2576 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2577 // CHECK-ERROR-NEXT:         ldp d5, d6, [x0, #512]
   2578 // CHECK-ERROR-NEXT:                     ^
   2579 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2580 // CHECK-ERROR-NEXT:         stp d7, d8, [x0, #-520]
   2581 // CHECK-ERROR-NEXT:                     ^
   2582 
   2583         ldp d3, q2, [sp]
   2584         ldp q3, q5, [sp, #8]
   2585         stp q20, q25, [x5, #1024]
   2586         ldp q30, q15, [x23, #-1040]
   2587 // CHECK-ERROR: error: invalid operand for instruction
   2588 // CHECK-ERROR-NEXT:         ldp d3, q2, [sp]
   2589 // CHECK-ERROR-NEXT:                 ^
   2590 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2591 // CHECK-ERROR-NEXT:         ldp q3, q5, [sp, #8]
   2592 // CHECK-ERROR-NEXT:                     ^
   2593 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2594 // CHECK-ERROR-NEXT:         stp q20, q25, [x5, #1024]
   2595 // CHECK-ERROR-NEXT:                       ^
   2596 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2597 // CHECK-ERROR-NEXT:         ldp q30, q15, [x23, #-1040]
   2598 // CHECK-ERROR-NEXT:                       ^
   2599 
   2600 //------------------------------------------------------------------------------
   2601 // Load/store register pair (post-indexed)
   2602 //------------------------------------------------------------------------------
   2603 
   2604         ldp w3, w2, [x4], #1
   2605         stp w1, w2, [x3], #253
   2606         stp w9, w10, [x5], #256
   2607         ldp w11, w12, [x9], #-260
   2608         stp wsp, w9, [sp], #0
   2609 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2610 // CHECK-ERROR-NEXT:         ldp w3, w2, [x4], #1
   2611 // CHECK-ERROR-NEXT:                           ^
   2612 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2613 // CHECK-ERROR-NEXT:         stp w1, w2, [x3], #253
   2614 // CHECK-ERROR-NEXT:                     ^
   2615 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2616 // CHECK-ERROR-NEXT:         stp w9, w10, [x5], #256
   2617 // CHECK-ERROR-NEXT:                      ^
   2618 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2619 // CHECK-ERROR-NEXT:         ldp w11, w12, [x9], #-260
   2620 // CHECK-ERROR-NEXT:                       ^
   2621 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2622 // CHECK-ERROR-NEXT:         stp wsp, w9, [sp], #0
   2623 // CHECK-ERROR-NEXT:             ^
   2624 
   2625         ldpsw x9, x2, [sp], #2
   2626         ldpsw x1, x2, [x10], #256
   2627         ldpsw x3, x4, [x11], #-260
   2628 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2629 // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp], #2
   2630 // CHECK-ERROR-NEXT:                       ^
   2631 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2632 // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10], #256
   2633 // CHECK-ERROR-NEXT:                       ^
   2634 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2635 // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11], #-260
   2636 // CHECK-ERROR-NEXT:                       ^
   2637 
   2638         ldp x2, x5, [sp], #4
   2639         ldp x5, x6, [x9], #512
   2640         stp x7, x8, [x10], #-520
   2641 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2642 // CHECK-ERROR-NEXT:         ldp x2, x5, [sp], #4
   2643 // CHECK-ERROR-NEXT:                           ^
   2644 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2645 // CHECK-ERROR-NEXT:         ldp x5, x6, [x9], #512
   2646 // CHECK-ERROR-NEXT:                           ^
   2647 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2648 // CHECK-ERROR-NEXT:         stp x7, x8, [x10], #-520
   2649 // CHECK-ERROR-NEXT:                            ^
   2650 
   2651         ldp sp, x3, [x10], #0
   2652         stp x3, sp, [x9], #0
   2653 // CHECK-ERROR: error: invalid operand for instruction
   2654 // CHECK-ERROR-NEXT:         ldp sp, x3, [x10], #0
   2655 // CHECK-ERROR-NEXT:             ^
   2656 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2657 // CHECK-ERROR-NEXT:         stp x3, sp, [x9], #0
   2658 // CHECK-ERROR-NEXT:                 ^
   2659 
   2660         stp s3, s5, [sp], #-2
   2661         ldp s6, s26, [x4], #-260
   2662         stp s13, s19, [x5], #256
   2663 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2664 // CHECK-ERROR-NEXT:         stp s3, s5, [sp], #-2
   2665 // CHECK-ERROR-NEXT:                     ^
   2666 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2667 // CHECK-ERROR-NEXT:         ldp s6, s26, [x4], #-260
   2668 // CHECK-ERROR-NEXT:                      ^
   2669 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2670 // CHECK-ERROR-NEXT:         stp s13, s19, [x5], #256
   2671 // CHECK-ERROR-NEXT:                       ^
   2672 
   2673         ldp d3, d4, [xzr], #0
   2674         ldp d5, d6, [x0], #512
   2675         stp d7, d8, [x0], #-520
   2676 // CHECK-ERROR: error: invalid operand for instruction
   2677 // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr], #0
   2678 // CHECK-ERROR-NEXT:                      ^
   2679 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2680 // CHECK-ERROR-NEXT:         ldp d5, d6, [x0], #512
   2681 // CHECK-ERROR-NEXT:                     ^
   2682 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2683 // CHECK-ERROR-NEXT:         stp d7, d8, [x0], #-520
   2684 // CHECK-ERROR-NEXT:                     ^
   2685 
   2686         ldp d3, q2, [sp], #0
   2687         ldp q3, q5, [sp], #8
   2688         stp q20, q25, [x5], #1024
   2689         ldp q30, q15, [x23], #-1040
   2690 // CHECK-ERROR: error: invalid operand for instruction
   2691 // CHECK-ERROR-NEXT:         ldp d3, q2, [sp], #0
   2692 // CHECK-ERROR-NEXT:                 ^
   2693 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2694 // CHECK-ERROR-NEXT:         ldp q3, q5, [sp], #8
   2695 // CHECK-ERROR-NEXT:                     ^
   2696 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2697 // CHECK-ERROR-NEXT:         stp q20, q25, [x5], #1024
   2698 // CHECK-ERROR-NEXT:                       ^
   2699 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2700 // CHECK-ERROR-NEXT:         ldp q30, q15, [x23], #-1040
   2701 // CHECK-ERROR-NEXT:                       ^
   2702 
   2703 //------------------------------------------------------------------------------
   2704 // Load/store register pair (pre-indexed)
   2705 //------------------------------------------------------------------------------
   2706 
   2707         ldp w3, w2, [x4, #1]!
   2708         stp w1, w2, [x3, #253]!
   2709         stp w9, w10, [x5, #256]!
   2710         ldp w11, w12, [x9, #-260]!
   2711         stp wsp, w9, [sp, #0]!
   2712 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2713 // CHECK-ERROR-NEXT:         ldp w3, w2, [x4, #1]!
   2714 // CHECK-ERROR-NEXT:                           ^
   2715 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2716 // CHECK-ERROR-NEXT:         stp w1, w2, [x3, #253]!
   2717 // CHECK-ERROR-NEXT:                     ^
   2718 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2719 // CHECK-ERROR-NEXT:         stp w9, w10, [x5, #256]!
   2720 // CHECK-ERROR-NEXT:                      ^
   2721 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2722 // CHECK-ERROR-NEXT:         ldp w11, w12, [x9, #-260]!
   2723 // CHECK-ERROR-NEXT:                       ^
   2724 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2725 // CHECK-ERROR-NEXT:         stp wsp, w9, [sp, #0]!
   2726 // CHECK-ERROR-NEXT:             ^
   2727 
   2728         ldpsw x9, x2, [sp, #2]!
   2729         ldpsw x1, x2, [x10, #256]!
   2730         ldpsw x3, x4, [x11, #-260]!
   2731 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2732 // CHECK-ERROR-NEXT:         ldpsw x9, x2, [sp, #2]!
   2733 // CHECK-ERROR-NEXT:                       ^
   2734 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2735 // CHECK-ERROR-NEXT:         ldpsw x1, x2, [x10, #256]!
   2736 // CHECK-ERROR-NEXT:                       ^
   2737 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2738 // CHECK-ERROR-NEXT:         ldpsw x3, x4, [x11, #-260]!
   2739 // CHECK-ERROR-NEXT:                       ^
   2740 
   2741         ldp x2, x5, [sp, #4]!
   2742         ldp x5, x6, [x9, #512]!
   2743         stp x7, x8, [x10, #-520]!
   2744 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2745 // CHECK-ERROR-NEXT:         ldp x2, x5, [sp, #4]!
   2746 // CHECK-ERROR-NEXT:                     ^
   2747 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2748 // CHECK-ERROR-NEXT:         ldp x5, x6, [x9, #512]!
   2749 // CHECK-ERROR-NEXT:                     ^
   2750 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2751 // CHECK-ERROR-NEXT:         stp x7, x8, [x10, #-520]!
   2752 // CHECK-ERROR-NEXT:                     ^
   2753 
   2754         ldp sp, x3, [x10, #0]!
   2755         stp x3, sp, [x9, #0]!
   2756 // CHECK-ERROR: error: invalid operand for instruction
   2757 // CHECK-ERROR-NEXT:         ldp sp, x3, [x10, #0]!
   2758 // CHECK-ERROR-NEXT:             ^
   2759 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2760 // CHECK-ERROR-NEXT:         stp x3, sp, [x9, #0]!
   2761 // CHECK-ERROR-NEXT:                 ^
   2762 
   2763         stp s3, s5, [sp, #-2]!
   2764         ldp s6, s26, [x4, #-260]!
   2765         stp s13, s19, [x5, #256]!
   2766 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2767 // CHECK-ERROR-NEXT:         stp s3, s5, [sp, #-2]!
   2768 // CHECK-ERROR-NEXT:                     ^
   2769 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2770 // CHECK-ERROR-NEXT:         ldp s6, s26, [x4, #-260]!
   2771 // CHECK-ERROR-NEXT:                      ^
   2772 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2773 // CHECK-ERROR-NEXT:         stp s13, s19, [x5, #256]!
   2774 // CHECK-ERROR-NEXT:                       ^
   2775 
   2776         ldp d3, d4, [xzr, #0]!
   2777         ldp d5, d6, [x0, #512]!
   2778         stp d7, d8, [x0, #-520]!
   2779 // CHECK-ERROR: error: invalid operand for instruction
   2780 // CHECK-ERROR-NEXT:         ldp d3, d4, [xzr, #0]!
   2781 // CHECK-ERROR-NEXT:                      ^
   2782 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2783 // CHECK-ERROR-NEXT:         ldp d5, d6, [x0, #512]!
   2784 // CHECK-ERROR-NEXT:                     ^
   2785 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2786 // CHECK-ERROR-NEXT:         stp d7, d8, [x0, #-520]!
   2787 // CHECK-ERROR-NEXT:                     ^
   2788 
   2789         ldp d3, q2, [sp, #0]!
   2790         ldp q3, q5, [sp, #8]!
   2791         stp q20, q25, [x5, #1024]!
   2792         ldp q30, q15, [x23, #-1040]!
   2793 // CHECK-ERROR: error: invalid operand for instruction
   2794 // CHECK-ERROR-NEXT:         ldp d3, q2, [sp, #0]!
   2795 // CHECK-ERROR-NEXT:                 ^
   2796 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2797 // CHECK-ERROR-NEXT:         ldp q3, q5, [sp, #8]!
   2798 // CHECK-ERROR-NEXT:                     ^
   2799 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2800 // CHECK-ERROR-NEXT:         stp q20, q25, [x5, #1024]!
   2801 // CHECK-ERROR-NEXT:                       ^
   2802 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2803 // CHECK-ERROR-NEXT:         ldp q30, q15, [x23, #-1040]!
   2804 // CHECK-ERROR-NEXT:                       ^
   2805 
   2806 //------------------------------------------------------------------------------
   2807 // Load/store register pair (offset)
   2808 //------------------------------------------------------------------------------
   2809         ldnp w3, w2, [x4, #1]
   2810         stnp w1, w2, [x3, #253]
   2811         stnp w9, w10, [x5, #256]
   2812         ldnp w11, w12, [x9, #-260]
   2813         stnp wsp, w9, [sp]
   2814 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2815 // CHECK-ERROR-NEXT:         ldnp w3, w2, [x4, #1]
   2816 // CHECK-ERROR-NEXT:                           ^
   2817 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2818 // CHECK-ERROR-NEXT:         stnp w1, w2, [x3, #253]
   2819 // CHECK-ERROR-NEXT:                           ^
   2820 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2821 // CHECK-ERROR-NEXT:         stnp w9, w10, [x5, #256]
   2822 // CHECK-ERROR-NEXT:                            ^
   2823 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2824 // CHECK-ERROR-NEXT:         ldnp w11, w12, [x9, #-260]
   2825 // CHECK-ERROR-NEXT:                             ^
   2826 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2827 // CHECK-ERROR-NEXT:         stnp wsp, w9, [sp]
   2828 // CHECK-ERROR-NEXT:              ^
   2829 
   2830         ldnp x2, x5, [sp, #4]
   2831         ldnp x5, x6, [x9, #512]
   2832         stnp x7, x8, [x10, #-520]
   2833 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2834 // CHECK-ERROR-NEXT:         ldnp x2, x5, [sp, #4]
   2835 // CHECK-ERROR-NEXT:                           ^
   2836 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2837 // CHECK-ERROR-NEXT:         ldnp x5, x6, [x9, #512]
   2838 // CHECK-ERROR-NEXT:                           ^
   2839 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2840 // CHECK-ERROR-NEXT:         stnp x7, x8, [x10, #-520]
   2841 // CHECK-ERROR-NEXT:                            ^
   2842 
   2843         ldnp sp, x3, [x10]
   2844         stnp x3, sp, [x9]
   2845 // CHECK-ERROR: error: invalid operand for instruction
   2846 // CHECK-ERROR-NEXT:         ldnp sp, x3, [x10]
   2847 // CHECK-ERROR-NEXT:             ^
   2848 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2849 // CHECK-ERROR-NEXT:         stnp x3, sp, [x9]
   2850 // CHECK-ERROR-NEXT:                 ^
   2851 
   2852         stnp s3, s5, [sp, #-2]
   2853         ldnp s6, s26, [x4, #-260]
   2854         stnp s13, s19, [x5, #256]
   2855 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2856 // CHECK-ERROR-NEXT:         stnp s3, s5, [sp, #-2]
   2857 // CHECK-ERROR-NEXT:                     ^
   2858 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2859 // CHECK-ERROR-NEXT:         ldnp s6, s26, [x4, #-260]
   2860 // CHECK-ERROR-NEXT:                      ^
   2861 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
   2862 // CHECK-ERROR-NEXT:         stnp s13, s19, [x5, #256]
   2863 // CHECK-ERROR-NEXT:                       ^
   2864 
   2865         ldnp d3, d4, [xzr]
   2866         ldnp d5, d6, [x0, #512]
   2867         stnp d7, d8, [x0, #-520]
   2868 // CHECK-ERROR: error: invalid operand for instruction
   2869 // CHECK-ERROR-NEXT:         ldnp d3, d4, [xzr]
   2870 // CHECK-ERROR-NEXT:                      ^
   2871 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2872 // CHECK-ERROR-NEXT:         ldnp d5, d6, [x0, #512]
   2873 // CHECK-ERROR-NEXT:                     ^
   2874 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
   2875 // CHECK-ERROR-NEXT:         stnp d7, d8, [x0, #-520]
   2876 // CHECK-ERROR-NEXT:                     ^
   2877 
   2878         ldnp d3, q2, [sp]
   2879         ldnp q3, q5, [sp, #8]
   2880         stnp q20, q25, [x5, #1024]
   2881         ldnp q30, q15, [x23, #-1040]
   2882 // CHECK-ERROR: error: invalid operand for instruction
   2883 // CHECK-ERROR-NEXT:         ldnp d3, q2, [sp]
   2884 // CHECK-ERROR-NEXT:                 ^
   2885 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2886 // CHECK-ERROR-NEXT:         ldnp q3, q5, [sp, #8]
   2887 // CHECK-ERROR-NEXT:                     ^
   2888 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2889 // CHECK-ERROR-NEXT:         stnp q20, q25, [x5, #1024]
   2890 // CHECK-ERROR-NEXT:                       ^
   2891 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
   2892 // CHECK-ERROR-NEXT:         ldnp q30, q15, [x23, #-1040]
   2893 // CHECK-ERROR-NEXT:                       ^
   2894 
   2895 //------------------------------------------------------------------------------
   2896 // Logical (shifted register)
   2897 //------------------------------------------------------------------------------
   2898         orr w0, w1, #0xffffffff
   2899         and x3, x5, #0xffffffffffffffff
   2900 // CHECK-ERROR: error: expected compatible register or logical immediate
   2901 // CHECK-ERROR-NEXT:         orr w0, w1, #0xffffffff
   2902 // CHECK-ERROR-NEXT:                     ^
   2903 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   2904 // CHECK-ERROR-NEXT:         and x3, x5, #0xffffffffffffffff
   2905 // CHECK-ERROR-NEXT:                     ^
   2906 
   2907         ands w3, w9, #0x0
   2908         eor x2, x0, #0x0
   2909 // CHECK-ERROR: error: expected compatible register or logical immediate
   2910 // CHECK-ERROR-NEXT:         ands w3, w9, #0x0
   2911 // CHECK-ERROR-NEXT:                      ^
   2912 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   2913 // CHECK-ERROR-NEXT:         eor x2, x0, #0x0
   2914 // CHECK-ERROR-NEXT:                     ^
   2915 
   2916         eor w3, w5, #0x83
   2917         eor x9, x20, #0x1234
   2918 // CHECK-ERROR: error: expected compatible register or logical immediate
   2919 // CHECK-ERROR-NEXT:         eor w3, w5, #0x83
   2920 // CHECK-ERROR-NEXT:                     ^
   2921 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   2922 // CHECK-ERROR-NEXT:         eor x9, x20, #0x1234
   2923 // CHECK-ERROR-NEXT:                      ^
   2924 
   2925         and wzr, w4, 0xffff0000
   2926         eor xzr, x9, #0xffff0000ffff0000
   2927 // CHECK-ERROR: error: invalid operand for instruction
   2928 // CHECK-ERROR-NEXT:         and wzr, w4, 0xffff0000
   2929 // CHECK-ERROR-NEXT:                      ^
   2930 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2931 // CHECK-ERROR-NEXT:         eor xzr, x9, #0xffff0000ffff0000
   2932 // CHECK-ERROR-NEXT:                      ^
   2933 
   2934         orr w3, wsp, #0xf0f0f0f0
   2935         ands x3, sp, #0xaaaaaaaaaaaaaaaa
   2936 // CHECK-ERROR: error: invalid operand for instruction
   2937 // CHECK-ERROR-NEXT:         orr w3, wsp, #0xf0f0f0f0
   2938 // CHECK-ERROR-NEXT:                 ^
   2939 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2940 // CHECK-ERROR-NEXT:         ands x3, sp, #0xaaaaaaaaaaaaaaaa
   2941 // CHECK-ERROR-NEXT:                  ^
   2942 
   2943         tst sp, #0xe0e0e0e0e0e0e0e0
   2944 // CHECK-ERROR: error: invalid operand for instruction
   2945 // CHECK-ERROR-NEXT:         tst sp, #0xe0e0e0e0e0e0e0e0
   2946 // CHECK-ERROR-NEXT:             ^
   2947 
   2948         // movi has been removed from the specification. Make sure it's really gone.
   2949         movi wzr, #0x44444444
   2950         movi w3, #0xffff
   2951         movi x9, #0x0000ffff00000000
   2952 // CHECK-ERROR: error: invalid operand for instruction
   2953 // CHECK-ERROR-NEXT:         movi wzr, #0x44444444
   2954 // CHECK-ERROR-NEXT:         ^
   2955 // CHECK-ERROR: error: invalid operand for instruction
   2956 // CHECK-ERROR-NEXT:         movi w3, #0xffff
   2957 // CHECK-ERROR-NEXT:         ^
   2958 // CHECK-ERROR: error: invalid operand for instruction
   2959 // CHECK-ERROR-NEXT:         movi x9, #0x0000ffff00000000
   2960 // CHECK-ERROR-NEXT:         ^
   2961 
   2962 //------------------------------------------------------------------------------
   2963 // Logical (shifted register)
   2964 //------------------------------------------------------------------------------
   2965 
   2966         //// Out of range shifts
   2967         and w2, w24, w6, lsl #-1
   2968         and w4, w6, w12, lsl #32
   2969         and x4, x6, x12, lsl #64
   2970         and x2, x5, x11, asr
   2971 // CHECK-ERROR: error: expected integer shift amount
   2972 // CHECK-ERROR-NEXT:         and w2, w24, w6, lsl #-1
   2973 // CHECK-ERROR-NEXT:                               ^
   2974 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
   2975 // CHECK-ERROR-NEXT:         and w4, w6, w12, lsl #32
   2976 // CHECK-ERROR-NEXT:                          ^
   2977 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
   2978 // CHECK-ERROR-NEXT:         and x4, x6, x12, lsl #64
   2979 // CHECK-ERROR-NEXT:                          ^
   2980 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
   2981 // CHECK-ERROR-NEXT:         and x2, x5, x11, asr
   2982 // CHECK-ERROR-NEXT:                             ^
   2983 
   2984         //// sp not allowed
   2985         orn wsp, w3, w5
   2986         bics x20, sp, x9, lsr #0
   2987         orn x2, x6, sp, lsl #3
   2988 // FIXME: the diagnostic we get for 'orn wsp, w3, w5' is from the orn alias,
   2989 // which is a better match than the genuine ORNWri, whereas it would be better
   2990 // to get the ORNWri diagnostic when the alias did not match, i.e. the
   2991 // alias' diagnostics should have a lower priority.
   2992 // CHECK-ERROR: error: expected compatible register or logical immediate
   2993 // CHECK-ERROR-NEXT:         orn wsp, w3, w5
   2994 // CHECK-ERROR-NEXT:                      ^
   2995 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   2996 // CHECK-ERROR-NEXT:         bics x20, sp, x9, lsr #0
   2997 // CHECK-ERROR-NEXT:                   ^
   2998 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   2999 // CHECK-ERROR-NEXT:         orn x2, x6, sp, lsl #3
   3000 // CHECK-ERROR-NEXT:                     ^
   3001 
   3002         //// Mismatched registers
   3003         and x3, w2, w1
   3004         ands w1, x12, w2
   3005         and x4, x5, w6, lsl #12
   3006         orr w2, w5, x7, asr #0
   3007 // CHECK-ERROR: error: invalid operand for instruction
   3008 // CHECK-ERROR-NEXT:         and x3, w2, w1
   3009 // CHECK-ERROR-NEXT:                 ^
   3010 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   3011 // CHECK-ERROR-NEXT:         ands w1, x12, w2
   3012 // CHECK-ERROR-NEXT:                  ^
   3013 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   3014 // CHECK-ERROR-NEXT:         and x4, x5, w6, lsl #12
   3015 // CHECK-ERROR-NEXT:                     ^
   3016 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
   3017 // CHECK-ERROR-NEXT:         orr w2, w5, x7, asr #0
   3018 // CHECK-ERROR-NEXT:                     ^
   3019 
   3020         //// Shifts should not be allowed on mov
   3021         mov w3, w7, lsl #13
   3022 // CHECK-ERROR: error: invalid operand for instruction
   3023 // CHECK-ERROR-NEXT:         mov w3, w7, lsl #13
   3024 // CHECK-ERROR-NEXT:                     ^
   3025 
   3026 //------------------------------------------------------------------------------
   3027 // Move wide (immediate)
   3028 //------------------------------------------------------------------------------
   3029 
   3030         movz w3, #65536, lsl #0
   3031         movz w4, #65536
   3032         movn w1, #2, lsl #1
   3033         movk w3, #0, lsl #-1
   3034         movn w2, #-1, lsl #0
   3035         movz x3, #-1
   3036         movk w3, #1, lsl #32
   3037         movn x2, #12, lsl #64
   3038 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3039 // CHECK-ERROR-NEXT:         movz w3, #65536, lsl #0
   3040 // CHECK-ERROR-NEXT:                  ^
   3041 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3042 // CHECK-ERROR-NEXT:         movz w4, #65536
   3043 // CHECK-ERROR-NEXT:                  ^
   3044 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
   3045 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
   3046 // CHECK-ERROR-NEXT:         movn w1, #2, lsl #1
   3047 // CHECK-ERROR-NEXT:                  ^
   3048 // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
   3049 // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
   3050 // CHECK-ERROR-NEXT:         movk w3, #0, lsl #-1
   3051 // CHECK-ERROR-NEXT:                           ^
   3052 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3053 // CHECK-ERROR-NEXT:         movn w2, #-1, lsl #0
   3054 // CHECK-ERROR-NEXT:                  ^
   3055 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3056 // CHECK-ERROR-NEXT:         movz x3, #-1
   3057 // CHECK-ERROR-NEXT:                  ^
   3058 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
   3059 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
   3060 // CHECK-ERROR-NEXT:         movk w3, #1, lsl #32
   3061 // CHECK-ERROR-NEXT:                  ^
   3062 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
   3063 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
   3064 // CHECK-ERROR-NEXT:         movn x2, #12, lsl #64
   3065 // CHECK-ERROR-NEXT:                  ^
   3066 
   3067         movz x12, #:abs_g0:sym, lsl #16
   3068         movz x12, #:abs_g0:sym, lsl #0
   3069         movn x2, #:abs_g0:sym
   3070         movk w3, #:abs_g0:sym
   3071         movz x3, #:abs_g0_nc:sym
   3072         movn x4, #:abs_g0_nc:sym
   3073 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3074 // CHECK-ERROR-NEXT:         movz x12, #:abs_g0:sym, lsl #16
   3075 // CHECK-ERROR-NEXT:                                 ^
   3076 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3077 // CHECK-ERROR-NEXT:         movz x12, #:abs_g0:sym, lsl #0
   3078 // CHECK-ERROR-NEXT:                                 ^
   3079 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3080 // CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g0:sym
   3081 // CHECK-ERROR-AARCH64-NEXT:                  ^
   3082 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3083 // CHECK-ERROR-NEXT:         movk w3, #:abs_g0:sym
   3084 // CHECK-ERROR-NEXT:                  ^
   3085 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3086 // CHECK-ERROR-NEXT:         movz x3, #:abs_g0_nc:sym
   3087 // CHECK-ERROR-NEXT:                  ^
   3088 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3089 // CHECK-ERROR-NEXT:         movn x4, #:abs_g0_nc:sym
   3090 // CHECK-ERROR-NEXT:                  ^
   3091 
   3092         movn x2, #:abs_g1:sym
   3093         movk w3, #:abs_g1:sym
   3094         movz x3, #:abs_g1_nc:sym
   3095         movn x4, #:abs_g1_nc:sym
   3096 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3097 // CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g1:sym
   3098 // CHECK-ERROR-AARCH64-NEXT:                  ^
   3099 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3100 // CHECK-ERROR-NEXT:         movk w3, #:abs_g1:sym
   3101 // CHECK-ERROR-NEXT:                  ^
   3102 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3103 // CHECK-ERROR-NEXT:         movz x3, #:abs_g1_nc:sym
   3104 // CHECK-ERROR-NEXT:                  ^
   3105 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3106 // CHECK-ERROR-NEXT:         movn x4, #:abs_g1_nc:sym
   3107 // CHECK-ERROR-NEXT:                  ^
   3108 
   3109         movz w12, #:abs_g2:sym
   3110         movn x12, #:abs_g2:sym
   3111         movk x13, #:abs_g2:sym
   3112         movk w3, #:abs_g2_nc:sym
   3113         movz x13, #:abs_g2_nc:sym
   3114         movn x24, #:abs_g2_nc:sym
   3115 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3116 // CHECK-ERROR-NEXT:         movz w12, #:abs_g2:sym
   3117 // CHECK-ERROR-NEXT:                   ^
   3118 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3119 // CHECK-ERROR-AARCH64-NEXT:         movn x12, #:abs_g2:sym
   3120 // CHECK-ERROR-AARCH64-NEXT:                   ^
   3121 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3122 // CHECK-ERROR-NEXT:         movk x13, #:abs_g2:sym
   3123 // CHECK-ERROR-NEXT:                   ^
   3124 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3125 // CHECK-ERROR-NEXT:         movk w3, #:abs_g2_nc:sym
   3126 // CHECK-ERROR-NEXT:                  ^
   3127 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3128 // CHECK-ERROR-NEXT:         movz x13, #:abs_g2_nc:sym
   3129 // CHECK-ERROR-NEXT:                   ^
   3130 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3131 // CHECK-ERROR-NEXT:         movn x24, #:abs_g2_nc:sym
   3132 // CHECK-ERROR-NEXT:                   ^
   3133 
   3134         movn x19, #:abs_g3:sym
   3135         movz w20, #:abs_g3:sym
   3136         movk w21, #:abs_g3:sym
   3137 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3138 // CHECK-ERROR-AARCH64-NEXT:         movn x19, #:abs_g3:sym
   3139 // CHECK-ERROR-AARCH64-NEXT:                   ^
   3140 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3141 // CHECK-ERROR-NEXT:         movz w20, #:abs_g3:sym
   3142 // CHECK-ERROR-NEXT:                   ^
   3143 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3144 // CHECK-ERROR-NEXT:         movk w21, #:abs_g3:sym
   3145 // CHECK-ERROR-NEXT:                   ^
   3146 
   3147         movk x19, #:abs_g0_s:sym
   3148         movk w23, #:abs_g0_s:sym
   3149 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3150 // CHECK-ERROR-NEXT:         movk x19, #:abs_g0_s:sym
   3151 // CHECK-ERROR-NEXT:                   ^
   3152 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3153 // CHECK-ERROR-NEXT:         movk w23, #:abs_g0_s:sym
   3154 // CHECK-ERROR-NEXT:                   ^
   3155 
   3156         movk x19, #:abs_g1_s:sym
   3157         movk w23, #:abs_g1_s:sym
   3158 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3159 // CHECK-ERROR-NEXT:         movk x19, #:abs_g1_s:sym
   3160 // CHECK-ERROR-NEXT:                   ^
   3161 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3162 // CHECK-ERROR-NEXT:         movk w23, #:abs_g1_s:sym
   3163 // CHECK-ERROR-NEXT:                   ^
   3164 
   3165         movz w2, #:abs_g2_s:sym
   3166         movn w29, #:abs_g2_s:sym
   3167         movk x19, #:abs_g2_s:sym
   3168         movk w23, #:abs_g2_s:sym
   3169 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3170 // CHECK-ERROR-NEXT:         movz w2, #:abs_g2_s:sym
   3171 // CHECK-ERROR-NEXT:                    ^
   3172 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3173 // CHECK-ERROR-NEXT:         movn w29, #:abs_g2_s:sym
   3174 // CHECK-ERROR-NEXT:                   ^
   3175 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3176 // CHECK-ERROR-NEXT:         movk x19, #:abs_g2_s:sym
   3177 // CHECK-ERROR-NEXT:                   ^
   3178 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
   3179 // CHECK-ERROR-NEXT:         movk w23, #:abs_g2_s:sym
   3180 // CHECK-ERROR-NEXT:                   ^
   3181 
   3182 //------------------------------------------------------------------------------
   3183 // PC-relative addressing
   3184 //------------------------------------------------------------------------------
   3185 
   3186         adr sp, loc             // expects xzr
   3187         adrp x3, #20            // Immediate unaligned
   3188         adrp w2, loc            // 64-bit register needed
   3189 // CHECK-ERROR: error: invalid operand for instruction
   3190 // CHECK-ERROR-NEXT:         adr sp, loc
   3191 // CHECK-ERROR-NEXT:             ^
   3192 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3193 // CHECK-ERROR-NEXT:         adrp x3, #20
   3194 // CHECK-ERROR-NEXT:                  ^
   3195 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   3196 // CHECK-ERROR-NEXT:         adrp w2, loc
   3197 // CHECK-ERROR-NEXT:              ^
   3198 
   3199         adr x9, #1048576
   3200         adr x2, #-1048577
   3201         adrp x9, #4294967296
   3202         adrp x20, #-4294971392
   3203 // CHECK-ERROR: error: expected label or encodable integer pc offset
   3204 // CHECK-ERROR-NEXT:         adr x9, #1048576
   3205 // CHECK-ERROR-NEXT:                 ^
   3206 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3207 // CHECK-ERROR-NEXT:         adr x2, #-1048577
   3208 // CHECK-ERROR-NEXT:                  ^
   3209 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3210 // CHECK-ERROR-NEXT:         adrp x9, #4294967296
   3211 // CHECK-ERROR-NEXT:                  ^
   3212 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3213 // CHECK-ERROR-NEXT:         adrp x20, #-4294971392
   3214 // CHECK-ERROR-NEXT:                   ^
   3215 
   3216 //------------------------------------------------------------------------------
   3217 // System
   3218 //------------------------------------------------------------------------------
   3219 
   3220         hint #-1
   3221         hint #128
   3222 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
   3223 // CHECK-ERROR-NEXT:         hint #-1
   3224 // CHECK-ERROR-NEXT:              ^
   3225 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
   3226 // CHECK-ERROR-NEXT:         hint #128
   3227 // CHECK-ERROR-NEXT:              ^
   3228 
   3229         clrex #-1
   3230         clrex #16
   3231 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   3232 // CHECK-ERROR-NEXT:         clrex #-1
   3233 // CHECK-ERROR-NEXT:               ^
   3234 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   3235 // CHECK-ERROR-NEXT:         clrex #16
   3236 // CHECK-ERROR-NEXT:               ^
   3237 
   3238         dsb #-1
   3239         dsb #16
   3240         dmb #-1
   3241         dmb #16
   3242 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3243 // CHECK-ERROR-NEXT:         dsb #-1
   3244 // CHECK-ERROR-NEXT:             ^
   3245 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3246 // CHECK-ERROR-NEXT:         dsb #16
   3247 // CHECK-ERROR-NEXT:             ^
   3248 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3249 // CHECK-ERROR-NEXT:         dmb #-1
   3250 // CHECK-ERROR-NEXT:             ^
   3251 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3252 // CHECK-ERROR-NEXT:         dmb #16
   3253 // CHECK-ERROR-NEXT:             ^
   3254 
   3255         isb #-1
   3256         isb #16
   3257 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3258 // CHECK-ERROR-NEXT:         isb #-1
   3259 // CHECK-ERROR-NEXT:             ^
   3260 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
   3261 // CHECK-ERROR-NEXT:         isb #16
   3262 // CHECK-ERROR-NEXT:             ^
   3263 
   3264         msr daifset, x4
   3265         msr spsel, #-1
   3266         msr spsel #-1
   3267         msr daifclr, #16
   3268 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   3269 // CHECK-ERROR-NEXT:         msr daifset, x4
   3270 // CHECK-ERROR-NEXT:                      ^
   3271 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   3272 // CHECK-ERROR-NEXT:         msr spsel, #-1
   3273 // CHECK-ERROR-NEXT:                    ^
   3274 // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}}
   3275 // CHECK-ERROR-NEXT:         msr spsel #-1
   3276 // CHECK-ERROR-NEXT:                   ^
   3277 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
   3278 // CHECK-ERROR-NEXT:         msr daifclr, #16
   3279 // CHECK-ERROR-NEXT:                      ^
   3280 
   3281         sys #8, c1, c2, #7, x9
   3282         sys #3, c16, c2, #3, x10
   3283         sys #2, c11, c16, #5
   3284         sys #4, c9, c8, #8, xzr
   3285         sysl x11, #8, c1, c2, #7
   3286         sysl x13, #3, c16, c2, #3
   3287         sysl x9, #2, c11, c16, #5
   3288         sysl x4, #4, c9, c8, #8
   3289 // CHECK-ERROR-NEXT: error:  {{expected|immediate must be an}} integer in range [0, 7]
   3290 // CHECK-ERROR-NEXT:         sys #8, c1, c2, #7, x9
   3291 // CHECK-ERROR-NEXT:             ^
   3292 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
   3293 // CHECK-ERROR-NEXT:         sys #3, c16, c2, #3, x10
   3294 // CHECK-ERROR-NEXT:                 ^
   3295 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
   3296 // CHECK-ERROR-NEXT:         sys #2, c11, c16, #5
   3297 // CHECK-ERROR-NEXT:                      ^
   3298 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
   3299 // CHECK-ERROR-NEXT:         sys #4, c9, c8, #8, xzr
   3300 // CHECK-ERROR-NEXT:                         ^
   3301 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
   3302 // CHECK-ERROR-NEXT:         sysl x11, #8, c1, c2, #7
   3303 // CHECK-ERROR-NEXT:                   ^
   3304 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
   3305 // CHECK-ERROR-NEXT:         sysl x13, #3, c16, c2, #3
   3306 // CHECK-ERROR-NEXT:                       ^
   3307 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
   3308 // CHECK-ERROR-NEXT:         sysl x9, #2, c11, c16, #5
   3309 // CHECK-ERROR-NEXT:                           ^
   3310 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
   3311 // CHECK-ERROR-NEXT:         sysl x4, #4, c9, c8, #8
   3312 // CHECK-ERROR-NEXT:                              ^
   3313 
   3314         ic ialluis, x2
   3315         ic allu, x7
   3316         ic ivau
   3317 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
   3318 // CHECK-ERROR-NEXT:         ic ialluis, x2
   3319 // CHECK-ERROR-NEXT:                     ^
   3320 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
   3321 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
   3322 // CHECK-ERROR-NEXT:         ic allu, x7
   3323 // CHECK-ERROR-NEXT:            ^
   3324 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
   3325 // CHECK-ERROR-NEXT:         ic ivau
   3326 // CHECK-ERROR-NEXT:            ^
   3327 
   3328         tlbi IPAS2E1IS
   3329         tlbi IPAS2LE1IS
   3330         tlbi VMALLE1IS, x12
   3331         tlbi ALLE2IS, x11
   3332         tlbi ALLE3IS, x20
   3333         tlbi VAE1IS
   3334         tlbi VAE2IS
   3335         tlbi VAE3IS
   3336         tlbi ASIDE1IS
   3337         tlbi VAAE1IS
   3338         tlbi ALLE1IS, x0
   3339         tlbi VALE1IS
   3340         tlbi VALE2IS
   3341         tlbi VALE3IS
   3342         tlbi VMALLS12E1IS, xzr
   3343         tlbi VAALE1IS
   3344         tlbi IPAS2E1
   3345         tlbi IPAS2LE1
   3346         tlbi VMALLE1, x9
   3347         tlbi ALLE2, x10
   3348         tlbi ALLE3, x11
   3349         tlbi VAE1
   3350         tlbi VAE2
   3351         tlbi VAE3
   3352         tlbi ASIDE1
   3353         tlbi VAAE1
   3354         tlbi ALLE1, x25
   3355         tlbi VALE1
   3356         tlbi VALE2
   3357         tlbi VALE3
   3358         tlbi VMALLS12E1, x15
   3359         tlbi VAALE1
   3360 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3361 // CHECK-ERROR-NEXT:         tlbi IPAS2E1IS
   3362 // CHECK-ERROR-NEXT:              ^
   3363 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3364 // CHECK-ERROR-NEXT:         tlbi IPAS2LE1IS
   3365 // CHECK-ERROR-NEXT:              ^
   3366 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3367 // CHECK-ERROR-NEXT:         tlbi VMALLE1IS, x12
   3368 // CHECK-ERROR-NEXT:                         ^
   3369 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3370 // CHECK-ERROR-NEXT:         tlbi ALLE2IS, x11
   3371 // CHECK-ERROR-NEXT:                       ^
   3372 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3373 // CHECK-ERROR-NEXT:         tlbi ALLE3IS, x20
   3374 // CHECK-ERROR-NEXT:                       ^
   3375 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3376 // CHECK-ERROR-NEXT:         tlbi VAE1IS
   3377 // CHECK-ERROR-NEXT:              ^
   3378 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3379 // CHECK-ERROR-NEXT:         tlbi VAE2IS
   3380 // CHECK-ERROR-NEXT:              ^
   3381 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3382 // CHECK-ERROR-NEXT:         tlbi VAE3IS
   3383 // CHECK-ERROR-NEXT:              ^
   3384 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3385 // CHECK-ERROR-NEXT:         tlbi ASIDE1IS
   3386 // CHECK-ERROR-NEXT:              ^
   3387 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3388 // CHECK-ERROR-NEXT:         tlbi VAAE1IS
   3389 // CHECK-ERROR-NEXT:              ^
   3390 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3391 // CHECK-ERROR-NEXT:         tlbi ALLE1IS, x0
   3392 // CHECK-ERROR-NEXT:                       ^
   3393 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3394 // CHECK-ERROR-NEXT:         tlbi VALE1IS
   3395 // CHECK-ERROR-NEXT:              ^
   3396 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3397 // CHECK-ERROR-NEXT:         tlbi VALE2IS
   3398 // CHECK-ERROR-NEXT:              ^
   3399 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3400 // CHECK-ERROR-NEXT:         tlbi VALE3IS
   3401 // CHECK-ERROR-NEXT:              ^
   3402 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3403 // CHECK-ERROR-NEXT:         tlbi VMALLS12E1IS, xzr
   3404 // CHECK-ERROR-NEXT:                            ^
   3405 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3406 // CHECK-ERROR-NEXT:         tlbi VAALE1IS
   3407 // CHECK-ERROR-NEXT:              ^
   3408 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3409 // CHECK-ERROR-NEXT:         tlbi IPAS2E1
   3410 // CHECK-ERROR-NEXT:              ^
   3411 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3412 // CHECK-ERROR-NEXT:         tlbi IPAS2LE1
   3413 // CHECK-ERROR-NEXT:              ^
   3414 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3415 // CHECK-ERROR-NEXT:         tlbi VMALLE1, x9
   3416 // CHECK-ERROR-NEXT:                       ^
   3417 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3418 // CHECK-ERROR-NEXT:         tlbi ALLE2, x10
   3419 // CHECK-ERROR-NEXT:                     ^
   3420 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3421 // CHECK-ERROR-NEXT:         tlbi ALLE3, x11
   3422 // CHECK-ERROR-NEXT:                     ^
   3423 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3424 // CHECK-ERROR-NEXT:         tlbi VAE1
   3425 // CHECK-ERROR-NEXT:              ^
   3426 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3427 // CHECK-ERROR-NEXT:         tlbi VAE2
   3428 // CHECK-ERROR-NEXT:              ^
   3429 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3430 // CHECK-ERROR-NEXT:         tlbi VAE3
   3431 // CHECK-ERROR-NEXT:              ^
   3432 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3433 // CHECK-ERROR-NEXT:         tlbi ASIDE1
   3434 // CHECK-ERROR-NEXT:              ^
   3435 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3436 // CHECK-ERROR-NEXT:         tlbi VAAE1
   3437 // CHECK-ERROR-NEXT:              ^
   3438 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3439 // CHECK-ERROR-NEXT:         tlbi ALLE1, x25
   3440 // CHECK-ERROR-NEXT:                     ^
   3441 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3442 // CHECK-ERROR-NEXT:         tlbi VALE1
   3443 // CHECK-ERROR-NEXT:              ^
   3444 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3445 // CHECK-ERROR-NEXT:         tlbi VALE2
   3446 // CHECK-ERROR-NEXT:              ^
   3447 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3448 // CHECK-ERROR-NEXT:         tlbi VALE3
   3449 // CHECK-ERROR-NEXT:              ^
   3450 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
   3451 // CHECK-ERROR-NEXT:         tlbi VMALLS12E1, x15
   3452 // CHECK-ERROR-NEXT:                          ^
   3453 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
   3454 // CHECK-ERROR-NEXT:         tlbi VAALE1
   3455 // CHECK-ERROR-NEXT:              ^
   3456 
   3457 // For the MSR/MRS instructions, first make sure read-only and
   3458 // write-only registers actually are.
   3459         msr MDCCSR_EL0, x12
   3460         msr DBGDTRRX_EL0, x12
   3461         msr MDRAR_EL1, x12
   3462         msr OSLSR_EL1, x12
   3463         msr DBGAUTHSTATUS_EL1, x12
   3464         msr MIDR_EL1, x12
   3465         msr CCSIDR_EL1, x12
   3466         msr CLIDR_EL1, x12
   3467         msr CTR_EL0, x12
   3468         msr MPIDR_EL1, x12
   3469         msr REVIDR_EL1, x12
   3470         msr AIDR_EL1, x12
   3471         msr DCZID_EL0, x12
   3472         msr ID_PFR0_EL1, x12
   3473         msr ID_PFR1_EL1, x12
   3474         msr ID_DFR0_EL1, x12
   3475         msr ID_AFR0_EL1, x12
   3476         msr ID_MMFR0_EL1, x12
   3477         msr ID_MMFR1_EL1, x12
   3478         msr ID_MMFR2_EL1, x12
   3479         msr ID_MMFR3_EL1, x12
   3480         msr ID_ISAR0_EL1, x12
   3481         msr ID_ISAR1_EL1, x12
   3482         msr ID_ISAR2_EL1, x12
   3483         msr ID_ISAR3_EL1, x12
   3484         msr ID_ISAR4_EL1, x12
   3485         msr ID_ISAR5_EL1, x12
   3486         msr MVFR0_EL1, x12
   3487         msr MVFR1_EL1, x12
   3488         msr MVFR2_EL1, x12
   3489         msr ID_AA64PFR0_EL1, x12
   3490         msr ID_AA64PFR1_EL1, x12
   3491         msr ID_AA64DFR0_EL1, x12
   3492         msr ID_AA64DFR1_EL1, x12
   3493         msr ID_AA64AFR0_EL1, x12
   3494         msr ID_AA64AFR1_EL1, x12
   3495         msr ID_AA64ISAR0_EL1, x12
   3496         msr ID_AA64ISAR1_EL1, x12
   3497         msr ID_AA64MMFR0_EL1, x12
   3498         msr ID_AA64MMFR1_EL1, x12
   3499         msr PMCEID0_EL0, x12
   3500         msr PMCEID1_EL0, x12
   3501         msr RVBAR_EL1, x12
   3502         msr RVBAR_EL2, x12
   3503         msr RVBAR_EL3, x12
   3504         msr ISR_EL1, x12
   3505         msr CNTPCT_EL0, x12
   3506         msr CNTVCT_EL0, x12
   3507         msr PMEVCNTR31_EL0, x12
   3508         msr PMEVTYPER31_EL0, x12
   3509 // CHECK-ERROR: error: expected writable system register or pstate
   3510 // CHECK-ERROR-NEXT:         msr MDCCSR_EL0, x12
   3511 // CHECK-ERROR-NEXT:             ^
   3512 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3513 // CHECK-ERROR-NEXT:         msr DBGDTRRX_EL0, x12
   3514 // CHECK-ERROR-NEXT:             ^
   3515 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3516 // CHECK-ERROR-NEXT:         msr MDRAR_EL1, x12
   3517 // CHECK-ERROR-NEXT:             ^
   3518 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3519 // CHECK-ERROR-NEXT:         msr OSLSR_EL1, x12
   3520 // CHECK-ERROR-NEXT:             ^
   3521 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3522 // CHECK-ERROR-NEXT:         msr DBGAUTHSTATUS_EL1, x12
   3523 // CHECK-ERROR-NEXT:             ^
   3524 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3525 // CHECK-ERROR-NEXT:         msr MIDR_EL1, x12
   3526 // CHECK-ERROR-NEXT:             ^
   3527 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3528 // CHECK-ERROR-NEXT:         msr CCSIDR_EL1, x12
   3529 // CHECK-ERROR-NEXT:             ^
   3530 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3531 // CHECK-ERROR-NEXT:         msr CLIDR_EL1, x12
   3532 // CHECK-ERROR-NEXT:             ^
   3533 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3534 // CHECK-ERROR-NEXT:         msr CTR_EL0, x12
   3535 // CHECK-ERROR-NEXT:             ^
   3536 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3537 // CHECK-ERROR-NEXT:         msr MPIDR_EL1, x12
   3538 // CHECK-ERROR-NEXT:             ^
   3539 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3540 // CHECK-ERROR-NEXT:         msr REVIDR_EL1, x12
   3541 // CHECK-ERROR-NEXT:             ^
   3542 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3543 // CHECK-ERROR-NEXT:         msr AIDR_EL1, x12
   3544 // CHECK-ERROR-NEXT:             ^
   3545 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3546 // CHECK-ERROR-NEXT:         msr DCZID_EL0, x12
   3547 // CHECK-ERROR-NEXT:             ^
   3548 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3549 // CHECK-ERROR-NEXT:         msr ID_PFR0_EL1, x12
   3550 // CHECK-ERROR-NEXT:             ^
   3551 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3552 // CHECK-ERROR-NEXT:         msr ID_PFR1_EL1, x12
   3553 // CHECK-ERROR-NEXT:             ^
   3554 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3555 // CHECK-ERROR-NEXT:         msr ID_DFR0_EL1, x12
   3556 // CHECK-ERROR-NEXT:             ^
   3557 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3558 // CHECK-ERROR-NEXT:         msr ID_AFR0_EL1, x12
   3559 // CHECK-ERROR-NEXT:             ^
   3560 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3561 // CHECK-ERROR-NEXT:         msr ID_MMFR0_EL1, x12
   3562 // CHECK-ERROR-NEXT:             ^
   3563 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3564 // CHECK-ERROR-NEXT:         msr ID_MMFR1_EL1, x12
   3565 // CHECK-ERROR-NEXT:             ^
   3566 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3567 // CHECK-ERROR-NEXT:         msr ID_MMFR2_EL1, x12
   3568 // CHECK-ERROR-NEXT:             ^
   3569 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3570 // CHECK-ERROR-NEXT:         msr ID_MMFR3_EL1, x12
   3571 // CHECK-ERROR-NEXT:             ^
   3572 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3573 // CHECK-ERROR-NEXT:         msr ID_ISAR0_EL1, x12
   3574 // CHECK-ERROR-NEXT:             ^
   3575 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3576 // CHECK-ERROR-NEXT:         msr ID_ISAR1_EL1, x12
   3577 // CHECK-ERROR-NEXT:             ^
   3578 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3579 // CHECK-ERROR-NEXT:         msr ID_ISAR2_EL1, x12
   3580 // CHECK-ERROR-NEXT:             ^
   3581 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3582 // CHECK-ERROR-NEXT:         msr ID_ISAR3_EL1, x12
   3583 // CHECK-ERROR-NEXT:             ^
   3584 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3585 // CHECK-ERROR-NEXT:         msr ID_ISAR4_EL1, x12
   3586 // CHECK-ERROR-NEXT:             ^
   3587 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3588 // CHECK-ERROR-NEXT:         msr ID_ISAR5_EL1, x12
   3589 // CHECK-ERROR-NEXT:             ^
   3590 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3591 // CHECK-ERROR-NEXT:         msr MVFR0_EL1, x12
   3592 // CHECK-ERROR-NEXT:             ^
   3593 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3594 // CHECK-ERROR-NEXT:         msr MVFR1_EL1, x12
   3595 // CHECK-ERROR-NEXT:             ^
   3596 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3597 // CHECK-ERROR-NEXT:         msr MVFR2_EL1, x12
   3598 // CHECK-ERROR-NEXT:             ^
   3599 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3600 // CHECK-ERROR-NEXT:         msr ID_AA64PFR0_EL1, x12
   3601 // CHECK-ERROR-NEXT:             ^
   3602 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3603 // CHECK-ERROR-NEXT:         msr ID_AA64PFR1_EL1, x12
   3604 // CHECK-ERROR-NEXT:             ^
   3605 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3606 // CHECK-ERROR-NEXT:         msr ID_AA64DFR0_EL1, x12
   3607 // CHECK-ERROR-NEXT:             ^
   3608 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3609 // CHECK-ERROR-NEXT:         msr ID_AA64DFR1_EL1, x12
   3610 // CHECK-ERROR-NEXT:             ^
   3611 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3612 // CHECK-ERROR-NEXT:         msr ID_AA64AFR0_EL1, x12
   3613 // CHECK-ERROR-NEXT:             ^
   3614 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3615 // CHECK-ERROR-NEXT:         msr ID_AA64AFR1_EL1, x12
   3616 // CHECK-ERROR-NEXT:             ^
   3617 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3618 // CHECK-ERROR-NEXT:         msr ID_AA64ISAR0_EL1, x12
   3619 // CHECK-ERROR-NEXT:             ^
   3620 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3621 // CHECK-ERROR-NEXT:         msr ID_AA64ISAR1_EL1, x12
   3622 // CHECK-ERROR-NEXT:             ^
   3623 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3624 // CHECK-ERROR-NEXT:         msr ID_AA64MMFR0_EL1, x12
   3625 // CHECK-ERROR-NEXT:             ^
   3626 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3627 // CHECK-ERROR-NEXT:         msr ID_AA64MMFR1_EL1, x12
   3628 // CHECK-ERROR-NEXT:             ^
   3629 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3630 // CHECK-ERROR-NEXT:         msr PMCEID0_EL0, x12
   3631 // CHECK-ERROR-NEXT:             ^
   3632 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3633 // CHECK-ERROR-NEXT:         msr PMCEID1_EL0, x12
   3634 // CHECK-ERROR-NEXT:             ^
   3635 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3636 // CHECK-ERROR-NEXT:         msr RVBAR_EL1, x12
   3637 // CHECK-ERROR-NEXT:             ^
   3638 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3639 // CHECK-ERROR-NEXT:         msr RVBAR_EL2, x12
   3640 // CHECK-ERROR-NEXT:             ^
   3641 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3642 // CHECK-ERROR-NEXT:         msr RVBAR_EL3, x12
   3643 // CHECK-ERROR-NEXT:             ^
   3644 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3645 // CHECK-ERROR-NEXT:         msr ISR_EL1, x12
   3646 // CHECK-ERROR-NEXT:             ^
   3647 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3648 // CHECK-ERROR-NEXT:         msr CNTPCT_EL0, x12
   3649 // CHECK-ERROR-NEXT:             ^
   3650 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3651 // CHECK-ERROR-NEXT:         msr CNTVCT_EL0, x12
   3652 // CHECK-ERROR-NEXT:             ^
   3653 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3654 // CHECK-ERROR-NEXT:         msr PMEVCNTR31_EL0, x12
   3655 // CHECK-ERROR-NEXT:             ^
   3656 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
   3657 // CHECK-ERROR-NEXT:         msr PMEVTYPER31_EL0, x12
   3658 // CHECK-ERROR-NEXT:             ^
   3659 
   3660         mrs x9, DBGDTRTX_EL0
   3661         mrs x9, OSLAR_EL1
   3662         mrs x9, PMSWINC_EL0
   3663         mrs x9, PMEVCNTR31_EL0
   3664         mrs x9, PMEVTYPER31_EL0
   3665 // CHECK-ERROR: error: expected readable system register
   3666 // CHECK-ERROR-NEXT:         mrs x9, DBGDTRTX_EL0
   3667 // CHECK-ERROR-NEXT:                 ^
   3668 // CHECK-ERROR-NEXT: error: expected readable system register
   3669 // CHECK-ERROR-NEXT:         mrs x9, OSLAR_EL1
   3670 // CHECK-ERROR-NEXT:                 ^
   3671 // CHECK-ERROR-NEXT: error: expected readable system register
   3672 // CHECK-ERROR-NEXT:         mrs x9, PMSWINC_EL0
   3673 // CHECK-ERROR-NEXT:                 ^
   3674 // CHECK-ERROR-NEXT: error: expected readable system register
   3675 // CHECK-ERROR-NEXT:         mrs x9, PMEVCNTR31_EL0
   3676 // CHECK-ERROR-NEXT:                 ^
   3677 // CHECK-ERROR-NEXT: error: expected readable system register
   3678 // CHECK-ERROR-NEXT:         mrs x9, PMEVTYPER31_EL0
   3679 // CHECK-ERROR-NEXT:                 ^
   3680 
   3681 // Now check some invalid generic names
   3682         mrs x12, s3_8_c11_c13_2
   3683         mrs x19, s3_2_c15_c16_2
   3684         mrs x30, s3_2_c15_c1_8
   3685         mrs x4, s4_7_c15_c15_7
   3686         mrs x14, s3_7_c16_c15_7
   3687 // CHECK-ERROR-NEXT: error: expected readable system register
   3688 // CHECK-ERROR-NEXT:         mrs x12, s3_8_c11_c13_2
   3689 // CHECK-ERROR-NEXT:                  ^
   3690 // CHECK-ERROR-NEXT: error: expected readable system register
   3691 // CHECK-ERROR-NEXT:         mrs x19, s3_2_c15_c16_2
   3692 // CHECK-ERROR-NEXT:                  ^
   3693 // CHECK-ERROR-NEXT: error: expected readable system register
   3694 // CHECK-ERROR-NEXT:         mrs x30, s3_2_c15_c1_8
   3695 // CHECK-ERROR-NEXT:                  ^
   3696 // CHECK-ERROR-NEXT: error: expected readable system register
   3697 // CHECK-ERROR-NEXT:         mrs x4, s4_7_c15_c15_7
   3698 // CHECK-ERROR-NEXT:                 ^
   3699 // CHECK-ERROR-NEXT: error: expected readable system register
   3700 // CHECK-ERROR-NEXT:         mrs x14, s3_7_c16_c15_7
   3701 // CHECK-ERROR-NEXT:                  ^
   3702 
   3703 //------------------------------------------------------------------------------
   3704 // Test and branch (immediate)
   3705 //------------------------------------------------------------------------------
   3706 
   3707         tbz w3, #-1, addr
   3708         tbz w3, #32, nowhere
   3709         tbz x9, #-1, there
   3710         tbz x20, #64, dont
   3711 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
   3712 // CHECK-ERROR-NEXT:     tbz w3, #-1, addr
   3713 // CHECK-ERROR-NEXT:             ^
   3714 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   3715 // CHECK-ERROR-NEXT:        tbz w3, #32, nowhere
   3716 // CHECK-ERROR-NEXT:                ^
   3717 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   3718 // CHECK-ERROR-NEXT:        tbz x9, #-1, there
   3719 // CHECK-ERROR-NEXT:                ^
   3720 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   3721 // CHECK-ERROR-NEXT:        tbz x20, #64, dont
   3722 // CHECK-ERROR-NEXT:                 ^
   3723 
   3724         tbnz w3, #-1, addr
   3725         tbnz w3, #32, nowhere
   3726         tbnz x9, #-1, there
   3727         tbnz x20, #64, dont
   3728 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   3729 // CHECK-ERROR-NEXT:        tbnz w3, #-1, addr
   3730 // CHECK-ERROR-NEXT:                 ^
   3731 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
   3732 // CHECK-ERROR-NEXT:        tbnz w3, #32, nowhere
   3733 // CHECK-ERROR-NEXT:                 ^
   3734 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   3735 // CHECK-ERROR-NEXT:        tbnz x9, #-1, there
   3736 // CHECK-ERROR-NEXT:                 ^
   3737 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
   3738 // CHECK-ERROR-NEXT:        tbnz x20, #64, dont
   3739 
   3740 //------------------------------------------------------------------------------
   3741 // Unconditional branch (immediate)
   3742 //------------------------------------------------------------------------------
   3743 
   3744         b #134217728
   3745         b #-134217732
   3746         b #1
   3747 // CHECK-ERROR: error: expected label or encodable integer pc offset
   3748 // CHECK-ERROR-NEXT:         b #134217728
   3749 // CHECK-ERROR-NEXT:           ^
   3750 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3751 // CHECK-ERROR-NEXT:         b #-134217732
   3752 // CHECK-ERROR-NEXT:           ^
   3753 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
   3754 // CHECK-ERROR-NEXT:         b #1
   3755 // CHECK-ERROR-NEXT:           ^
   3756 
   3757 //------------------------------------------------------------------------------
   3758 // Unconditional branch (register)
   3759 //------------------------------------------------------------------------------
   3760 
   3761         br w2
   3762         br sp
   3763 // CHECK-ERROR: error: invalid operand for instruction
   3764 // CHECK-ERROR-NEXT:         br w2
   3765 // CHECK-ERROR-NEXT:            ^
   3766 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   3767 // CHECK-ERROR-NEXT:         br sp
   3768 // CHECK-ERROR-NEXT:            ^
   3769 
   3770         //// These ones shouldn't allow any registers
   3771         eret x2
   3772         drps x2
   3773 // CHECK-ERROR: error: invalid operand for instruction
   3774 // CHECK-ERROR-NEXT:         eret x2
   3775 // CHECK-ERROR-NEXT:              ^
   3776 // CHECK-ERROR-NEXT: error: invalid operand for instruction
   3777 // CHECK-ERROR-NEXT:         drps x2
   3778 // CHECK-ERROR-NEXT:              ^
   3779 
   3780