Home | History | Annotate | Download | only in AArch64
      1 ; RUN: not llvm-mc -triple arm64-apple-darwin -show-encoding < %s 2> %t | FileCheck %s
      2 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
      3 
      4 foo:
      5 
      6 ; The first should encode as an expression. The second should error expecting
      7 ; a register.
      8   ldr x3, (foo + 4)
      9   ldr x3, [foo + 4]
     10 ; CHECK:  ldr x3, foo+4               ; encoding: [0bAAA00011,A,A,0x58]
     11 ; CHECK:                              ;   fixup A - offset: 0, value: foo+4, kind: fixup_aarch64_ldr_pcrel_imm19
     12 ; CHECK-ERRORS: error: invalid operand for instruction
     13 
     14 ; The last argument should be flagged as an error.  rdar://9576009
     15   ld4.8b	{v0, v1, v2, v3}, [x0], #33
     16 ; CHECK-ERRORS: error: invalid operand for instruction
     17 ; CHECK-ERRORS: ld4.8b	{v0, v1, v2, v3}, [x0], #33
     18 
     19 
     20         ldr x0, [x0, #804]
     21         ldr w0, [x0, #802]
     22         ldr x0, [x0, #804]!
     23         ldr w0, [w0, #301]!
     24         ldr x0, [x0], #804
     25         ldr w0, [w0], #301
     26 
     27         ldp w3, w4, [x5, #11]!
     28         ldp x3, x4, [x5, #12]!
     29         ldp q3, q4, [x5, #12]!
     30         ldp w3, w4, [x5], #11
     31         ldp x3, x4, [x5], #12
     32         ldp q3, q4, [x5], #12
     33 
     34         ldur x0, [x1, #-257]
     35 
     36 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
     37 ; CHECK-ERRORS:         ldr x0, [x0, #804]
     38 ; CHECK-ERRORS:                 ^
     39 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
     40 ; CHECK-ERRORS:         ldr w0, [x0, #802]
     41 ; CHECK-ERRORS:                 ^
     42 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
     43 ; CHECK-ERRORS:         ldr x0, [x0, #804]!
     44 ; CHECK-ERRORS:                 ^
     45 ; CHECK-ERRORS: error: invalid operand for instruction
     46 ; CHECK-ERRORS:         ldr w0, [w0, #301]!
     47 ; CHECK-ERRORS:                  ^
     48 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
     49 ; CHECK-ERRORS:         ldr x0, [x0], #804
     50 ; CHECK-ERRORS:                       ^
     51 ; CHECK-ERRORS: error: invalid operand for instruction
     52 ; CHECK-ERRORS:         ldr w0, [w0], #301
     53 ; CHECK-ERRORS:                  ^
     54 ; CHECK-ERRORS: error: index must be a multiple of 4 in range [-256, 252].
     55 ; CHECK-ERRORS:         ldp w3, w4, [x5, #11]!
     56 ; CHECK-ERRORS:                     ^
     57 ; CHECK-ERRORS: error: index must be a multiple of 8 in range [-512, 504].
     58 ; CHECK-ERRORS:         ldp x3, x4, [x5, #12]!
     59 ; CHECK-ERRORS:                     ^
     60 ; CHECK-ERRORS: error: index must be a multiple of 16 in range [-1024, 1008].
     61 ; CHECK-ERRORS:         ldp q3, q4, [x5, #12]!
     62 ; CHECK-ERRORS:                     ^
     63 ; CHECK-ERRORS: error: index must be a multiple of 4 in range [-256, 252].
     64 ; CHECK-ERRORS:         ldp w3, w4, [x5], #11
     65 ; CHECK-ERRORS:                           ^
     66 ; CHECK-ERRORS: error: index must be a multiple of 8 in range [-512, 504].
     67 ; CHECK-ERRORS:         ldp x3, x4, [x5], #12
     68 ; CHECK-ERRORS:                           ^
     69 ; CHECK-ERRORS: error: index must be a multiple of 16 in range [-1024, 1008].
     70 ; CHECK-ERRORS:         ldp q3, q4, [x5], #12
     71 ; CHECK-ERRORS:                           ^
     72 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
     73 ; CHECK-ERRORS:         ldur x0, [x1, #-257]
     74 ; CHECK-ERRORS:                   ^
     75 
     76 
     77 ldrb   w1, [x3, w3, sxtw #4]
     78 ldrh   w1, [x3, w3, sxtw #4]
     79 ldr    w1, [x3, w3, sxtw #4]
     80 ldr    x1, [x3, w3, sxtw #4]
     81 ldr    b1, [x3, w3, sxtw #4]
     82 ldr    h1, [x3, w3, sxtw #4]
     83 ldr    s1, [x3, w3, sxtw #4]
     84 ldr    d1, [x3, w3, sxtw #4]
     85 ldr    q1, [x3, w3, sxtw #1]
     86 
     87 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0
     88 ; CHECK-ERRORS:ldrb   w1, [x3, w3, sxtw #4]
     89 ; CHECK-ERRORS:           ^
     90 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
     91 ; CHECK-ERRORS:ldrh   w1, [x3, w3, sxtw #4]
     92 ; CHECK-ERRORS:           ^
     93 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
     94 ; CHECK-ERRORS:ldr    w1, [x3, w3, sxtw #4]
     95 ; CHECK-ERRORS:           ^
     96 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
     97 ; CHECK-ERRORS:ldr    x1, [x3, w3, sxtw #4]
     98 ; CHECK-ERRORS:           ^
     99 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0
    100 ; CHECK-ERRORS:ldr    b1, [x3, w3, sxtw #4]
    101 ; CHECK-ERRORS:           ^
    102 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
    103 ; CHECK-ERRORS:ldr    h1, [x3, w3, sxtw #4]
    104 ; CHECK-ERRORS:           ^
    105 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
    106 ; CHECK-ERRORS:ldr    s1, [x3, w3, sxtw #4]
    107 ; CHECK-ERRORS:           ^
    108 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
    109 ; CHECK-ERRORS:ldr    d1, [x3, w3, sxtw #4]
    110 ; CHECK-ERRORS:           ^
    111 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
    112 ; CHECK-ERRORS:ldr    q1, [x3, w3, sxtw #1]
    113 ; CHECK-ERRORS:           ^
    114 
    115 ; Check that register offset addressing modes only accept 32-bit offset
    116 ; registers when using uxtw/sxtw extends. Everything else requires a 64-bit
    117 ; register.
    118   str    d1, [x3, w3, sxtx #3]
    119   ldr    s1, [x3, d3, sxtx #2]
    120 
    121 ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
    122 ; CHECK-ERRORS:   str    d1, [x3, w3, sxtx #3]
    123 ; CHECK-ERRORS:                       ^
    124 ; CHECK-ERRORS: error: index must be an integer in range [-256, 255].
    125 ; CHECK-ERRORS:   ldr    s1, [x3, d3, sxtx #2]
    126 ; CHECK-ERRORS:                   ^
    127 
    128 ; Shift immediates range checking.
    129   sqrshrn b4, h9, #10
    130   rshrn v9.8b, v11.8h, #17
    131   sqrshrn v7.4h, v8.4s, #39
    132   uqshrn2 v4.4s, v5.2d, #67
    133 
    134 ; CHECK-ERRORS: error: immediate must be an integer in range [1, 8].
    135 ; CHECK-ERRORS:   sqrshrn b4, h9, #10
    136 ; CHECK-ERRORS:                   ^
    137 ; CHECK-ERRORS: error: immediate must be an integer in range [1, 8].
    138 ; CHECK-ERRORS:   rshrn v9.8b, v11.8h, #17
    139 ; CHECK-ERRORS:                        ^
    140 ; CHECK-ERRORS: error: immediate must be an integer in range [1, 16].
    141 ; CHECK-ERRORS:   sqrshrn v7.4h, v8.4s, #39
    142 ; CHECK-ERRORS:                         ^
    143 ; CHECK-ERRORS: error: immediate must be an integer in range [1, 32].
    144 ; CHECK-ERRORS:   uqshrn2 v4.4s, v5.2d, #67
    145 ; CHECK-ERRORS:                         ^
    146 
    147 
    148   st1.s4 {v14, v15}, [x2], #32
    149 ; CHECK-ERRORS: error: invalid type suffix for instruction
    150 ; CHECK-ERRORS: st1.s4 {v14, v15}, [x2], #32
    151 ; CHECK-ERRORS:     ^
    152 
    153 
    154 
    155 ; Load pair instructions where Rt==Rt2 and writeback load/store instructions
    156 ; where Rt==Rn or Rt2==Rn are unpredicatable.
    157   ldp x1, x2, [x2], #16
    158   ldp x2, x2, [x2], #16
    159   ldp w1, w2, [x2], #16
    160   ldp w2, w2, [x2], #16
    161   ldp x1, x1, [x2]
    162   ldp s1, s1, [x1], #8
    163   ldp s1, s1, [x1, #8]!
    164   ldp s1, s1, [x1, #8]
    165   ldp d1, d1, [x1], #16
    166   ldp d1, d1, [x1, #16]!
    167   ldp d1, d1, [x1, #16]
    168   ldp q1, q1, [x1], #32
    169   ldp q1, q1, [x1, #32]!
    170   ldp q1, q1, [x1, #32]
    171 
    172   ldr x2, [x2], #8
    173   ldr x2, [x2, #8]!
    174   ldr w2, [x2], #8
    175   ldr w2, [x2, #8]!
    176 
    177   str x2, [x2], #8
    178   str x2, [x2, #8]!
    179   str w2, [x2], #8
    180   str w2, [x2, #8]!
    181 
    182 ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination
    183 ; CHECK-ERRORS:   ldp x1, x2, [x2], #16
    184 ; CHECK-ERRORS:           ^
    185 ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination
    186 ; CHECK-ERRORS:   ldp x2, x2, [x2], #16
    187 ; CHECK-ERRORS:       ^
    188 ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination
    189 ; CHECK-ERRORS:   ldp w1, w2, [x2], #16
    190 ; CHECK-ERRORS:           ^
    191 ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination
    192 ; CHECK-ERRORS:   ldp w2, w2, [x2], #16
    193 ; CHECK-ERRORS:       ^
    194 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    195 ; CHECK-ERRORS:   ldp x1, x1, [x2]
    196 ; CHECK-ERRORS:           ^
    197 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    198 ; CHECK-ERRORS:   ldp s1, s1, [x1], #8
    199 ; CHECK-ERRORS:           ^
    200 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    201 ; CHECK-ERRORS:   ldp s1, s1, [x1, #8]!
    202 ; CHECK-ERRORS:           ^
    203 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    204 ; CHECK-ERRORS:   ldp s1, s1, [x1, #8]
    205 ; CHECK-ERRORS:           ^
    206 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    207 ; CHECK-ERRORS:   ldp d1, d1, [x1], #16
    208 ; CHECK-ERRORS:           ^
    209 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    210 ; CHECK-ERRORS:   ldp d1, d1, [x1, #16]!
    211 ; CHECK-ERRORS:           ^
    212 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    213 ; CHECK-ERRORS:   ldp d1, d1, [x1, #16]
    214 ; CHECK-ERRORS:           ^
    215 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    216 ; CHECK-ERRORS:   ldp q1, q1, [x1], #32
    217 ; CHECK-ERRORS:           ^
    218 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    219 ; CHECK-ERRORS:   ldp q1, q1, [x1, #32]!
    220 ; CHECK-ERRORS:           ^
    221 ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt
    222 ; CHECK-ERRORS:   ldp q1, q1, [x1, #32]
    223 ; CHECK-ERRORS:           ^
    224 ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source
    225 ; CHECK-ERRORS:   ldr x2, [x2], #8
    226 ; CHECK-ERRORS:       ^
    227 ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source
    228 ; CHECK-ERRORS:   ldr x2, [x2, #8]!
    229 ; CHECK-ERRORS:       ^
    230 ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source
    231 ; CHECK-ERRORS:   ldr w2, [x2], #8
    232 ; CHECK-ERRORS:       ^
    233 ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source
    234 ; CHECK-ERRORS:   ldr w2, [x2, #8]!
    235 ; CHECK-ERRORS:       ^
    236 ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source
    237 ; CHECK-ERRORS:   str x2, [x2], #8
    238 ; CHECK-ERRORS:       ^
    239 ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source
    240 ; CHECK-ERRORS:   str x2, [x2, #8]!
    241 ; CHECK-ERRORS:       ^
    242 ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source
    243 ; CHECK-ERRORS:   str w2, [x2], #8
    244 ; CHECK-ERRORS:       ^
    245 ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source
    246 ; CHECK-ERRORS:   str w2, [x2, #8]!
    247 ; CHECK-ERRORS:       ^
    248 
    249 ; The validity checking for shifted-immediate operands.  rdar://13174476
    250 ; Where the immediate is out of range.
    251   add w1, w2, w3, lsr #75
    252 
    253 ; CHECK-ERRORS: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
    254 ; CHECK-ERRORS: add w1, w2, w3, lsr #75
    255 ; CHECK-ERRORS:                      ^
    256 
    257 ; logical instructions on 32-bit regs with shift > 31 is not legal
    258 orr w0, w0, w0, lsl #32
    259 ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    260 ; CHECK-ERRORS:        orr w0, w0, w0, lsl #32
    261 ; CHECK-ERRORS:                        ^
    262 eor w0, w0, w0, lsl #32
    263 ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    264 ; CHECK-ERRORS:        eor w0, w0, w0, lsl #32
    265 ; CHECK-ERRORS:                        ^
    266 and w0, w0, w0, lsl #32
    267 ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    268 ; CHECK-ERRORS:        and w0, w0, w0, lsl #32
    269 ; CHECK-ERRORS:                        ^
    270 ands w0, w0, w0, lsl #32
    271 ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
    272 ; CHECK-ERRORS:        ands w0, w0, w0, lsl #32
    273 ; CHECK-ERRORS:                        ^
    274 
    275 ; Relocated expressions should not be accepted for 32-bit adds or sub (imm)
    276 add w3, w5, sym@PAGEOFF
    277 ; CHECK-ERRORS: error: invalid immediate expression
    278 ; CHECK-ERRORS: add w3, w5, sym@PAGEOFF
    279 ; CHECK-ERRORS:             ^
    280 
    281 adds w3, w5, sym@PAGEOFF
    282 adds x9, x12, sym@PAGEOFF
    283 ; CHECK-ERRORS: error: invalid immediate expression
    284 ; CHECK-ERRORS: adds w3, w5, sym@PAGEOFF
    285 ; CHECK-ERRORS:              ^
    286 ; CHECK-ERRORS: error: invalid immediate expression
    287 ; CHECK-ERRORS: adds x9, x12, sym@PAGEOFF
    288 ; CHECK-ERRORS:               ^
    289 
    290 sub x3, x5, sym@PAGEOFF
    291 sub w20, w30, sym@PAGEOFF
    292 ; CHECK-ERRORS: error: invalid immediate expression
    293 ; CHECK-ERRORS: sub x3, x5, sym@PAGEOFF
    294 ; CHECK-ERRORS:             ^
    295 ; CHECK-ERRORS: error: invalid immediate expression
    296 ; CHECK-ERRORS: sub w20, w30, sym@PAGEOFF
    297 ; CHECK-ERRORS:               ^
    298 
    299 subs w9, w10, sym@PAGEOFF
    300 subs x20, x30, sym@PAGEOFF
    301 ; CHECK-ERRORS: error: invalid immediate expression
    302 ; CHECK-ERRORS: subs w9, w10, sym@PAGEOFF
    303 ; CHECK-ERRORS:               ^
    304 ; CHECK-ERRORS: error: invalid immediate expression
    305 ; CHECK-ERRORS: subs x20, x30, sym@PAGEOFF
    306 ; CHECK-ERRORS:                ^
    307 
    308 tbl v0.8b, { v1 }, v0.8b
    309 tbl v0.16b, { v1.8b, v2.8b, v3.8b }, v0.16b
    310 tbx v3.16b, { v12.8b, v13.8b, v14.8b }, v6.8b
    311 tbx v2.8b, { v0 }, v6.8b
    312 ; CHECK-ERRORS: error: invalid operand for instruction
    313 ; CHECK-ERRORS: tbl v0.8b, { v1 }, v0.8b
    314 ; CHECK-ERRORS:            ^
    315 ; CHECK-ERRORS: error: invalid operand for instruction
    316 ; CHECK-ERRORS: tbl v0.16b, { v1.8b, v2.8b, v3.8b }, v0.16b
    317 ; CHECK-ERRORS:             ^
    318 ; CHECK-ERRORS: error: invalid operand for instruction
    319 ; CHECK-ERRORS: tbx v3.16b, { v12.8b, v13.8b, v14.8b }, v6.8b
    320 ; CHECK-ERRORS:             ^
    321 ; CHECK-ERRORS: error: invalid operand for instruction
    322 ; CHECK-ERRORS: tbx v2.8b, { v0 }, v6.8b
    323 ; CHECK-ERRORS:            ^
    324 
    325 b.c #0x4
    326 ; CHECK-ERRORS: error: invalid condition code
    327 ; CHECK-ERRORS: b.c #0x4
    328 ; CHECK-ERRORS:   ^
    329 
    330 ic ialluis, x0
    331 ; CHECK-ERRORS: error: specified ic op does not use a register
    332 ic iallu, x0
    333 ; CHECK-ERRORS: error: specified ic op does not use a register
    334 ic ivau
    335 ; CHECK-ERRORS: error: specified ic op requires a register
    336 
    337 dc zva
    338 ; CHECK-ERRORS: error: specified dc op requires a register
    339 dc ivac
    340 ; CHECK-ERRORS: error: specified dc op requires a register
    341 dc isw
    342 ; CHECK-ERRORS: error: specified dc op requires a register
    343 dc cvac
    344 ; CHECK-ERRORS: error: specified dc op requires a register
    345 dc csw
    346 ; CHECK-ERRORS: error: specified dc op requires a register
    347 dc cvau
    348 ; CHECK-ERRORS: error: specified dc op requires a register
    349 dc civac
    350 ; CHECK-ERRORS: error: specified dc op requires a register
    351 dc cisw
    352 ; CHECK-ERRORS: error: specified dc op requires a register
    353 
    354 at s1e1r
    355 ; CHECK-ERRORS: error: specified at op requires a register
    356 at s1e2r
    357 ; CHECK-ERRORS: error: specified at op requires a register
    358 at s1e3r
    359 ; CHECK-ERRORS: error: specified at op requires a register
    360 at s1e1w
    361 ; CHECK-ERRORS: error: specified at op requires a register
    362 at s1e2w
    363 ; CHECK-ERRORS: error: specified at op requires a register
    364 at s1e3w
    365 ; CHECK-ERRORS: error: specified at op requires a register
    366 at s1e0r
    367 ; CHECK-ERRORS: error: specified at op requires a register
    368 at s1e0w
    369 ; CHECK-ERRORS: error: specified at op requires a register
    370 at s12e1r
    371 ; CHECK-ERRORS: error: specified at op requires a register
    372 at s12e1w
    373 ; CHECK-ERRORS: error: specified at op requires a register
    374 at s12e0r
    375 ; CHECK-ERRORS: error: specified at op requires a register
    376 at s12e0w
    377 ; CHECK-ERRORS: error: specified at op requires a register
    378 
    379 tlbi vmalle1is, x0
    380 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    381 tlbi vmalle1, x0
    382 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    383 tlbi alle1is, x0
    384 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    385 tlbi alle2is, x0
    386 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    387 tlbi alle3is, x0
    388 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    389 tlbi alle1, x0
    390 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    391 tlbi alle2, x0
    392 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    393 tlbi alle3, x0
    394 ; CHECK-ERRORS: error: specified tlbi op does not use a register
    395 tlbi vae1is
    396 ; CHECK-ERRORS: error: specified tlbi op requires a register
    397 tlbi vae2is
    398 ; CHECK-ERRORS: error: specified tlbi op requires a register
    399 tlbi vae3is
    400 ; CHECK-ERRORS: error: specified tlbi op requires a register
    401 tlbi aside1is
    402 ; CHECK-ERRORS: error: specified tlbi op requires a register
    403 tlbi vaae1is
    404 ; CHECK-ERRORS: error: specified tlbi op requires a register
    405 tlbi vale1is
    406 ; CHECK-ERRORS: error: specified tlbi op requires a register
    407 tlbi vaale1is
    408 ; CHECK-ERRORS: error: specified tlbi op requires a register
    409 tlbi vale2is
    410 ; CHECK-ERRORS: error: specified tlbi op requires a register
    411 tlbi vale3is
    412 ; CHECK-ERRORS: error: specified tlbi op requires a register
    413 tlbi vae1
    414 ; CHECK-ERRORS: error: specified tlbi op requires a register
    415 tlbi vae2
    416 ; CHECK-ERRORS: error: specified tlbi op requires a register
    417 tlbi vae3
    418 ; CHECK-ERRORS: error: specified tlbi op requires a register
    419 tlbi aside1
    420 ; CHECK-ERRORS: error: specified tlbi op requires a register
    421 tlbi vaae1
    422 ; CHECK-ERRORS: error: specified tlbi op requires a register
    423 tlbi vale1
    424 ; CHECK-ERRORS: error: specified tlbi op requires a register
    425 tlbi vale2
    426 ; CHECK-ERRORS: error: specified tlbi op requires a register
    427 tlbi vale3
    428 ; CHECK-ERRORS: error: specified tlbi op requires a register
    429 
    430 
    431 ; Check that we give the proper "too few operands" diagnostic even when
    432 ; using short-form NEON.
    433 
    434   add.16b v0, v1, v2, v3
    435   add.8b v0, v1
    436   sub.8h v0, v1
    437   fadd.4s v0
    438   fmul.2s
    439 
    440 ; CHECK-ERRORS: error: invalid operand for instruction
    441 ; CHECK-ERRORS:   add.16b v0, v1, v2, v3
    442 ; CHECK-ERRORS:                       ^
    443 ; CHECK-ERRORS: error: too few operands for instruction
    444 ; CHECK-ERRORS:   add.8b v0, v1
    445 ; CHECK-ERRORS:   ^
    446 ; CHECK-ERRORS: error: too few operands for instruction
    447 ; CHECK-ERRORS:   sub.8h v0, v1
    448 ; CHECK-ERRORS:   ^
    449 ; CHECK-ERRORS: error: too few operands for instruction
    450 ; CHECK-ERRORS:   fadd.4s v0
    451 ; CHECK-ERRORS:   ^
    452 ; CHECK-ERRORS: error: too few operands for instruction
    453 ; CHECK-ERRORS:   fmul.2s
    454 ; CHECK-ERRORS:   ^
    455 
    456 ; Also for 2-operand instructions.
    457 
    458   frsqrte.4s v0, v1, v2
    459   frsqrte.2s v0
    460   frecpe.2d
    461 
    462 ; CHECK-ERRORS: error: invalid operand for instruction
    463 ; CHECK-ERRORS:   frsqrte.4s v0, v1, v2
    464 ; CHECK-ERRORS:                      ^
    465 ; CHECK-ERRORS: error: too few operands for instruction
    466 ; CHECK-ERRORS:   frsqrte.2s v0
    467 ; CHECK-ERRORS:   ^
    468 ; CHECK-ERRORS: error: too few operands for instruction
    469 ; CHECK-ERRORS:   frecpe.2d
    470 ; CHECK-ERRORS:   ^
    471 
    472 ; And check that we do the same for non-NEON instructions.
    473 
    474   b.ne
    475   b.eq 0, 0
    476 
    477 ; CHECK-ERRORS: error: too few operands for instruction
    478 ; CHECK-ERRORS:   b.ne
    479 ; CHECK-ERRORS:   ^
    480 ; CHECK-ERRORS: error: invalid operand for instruction
    481 ; CHECK-ERRORS:   b.eq 0, 0
    482 ; CHECK-ERRORS:           ^
    483 
    484 ; Check that we give the proper "too few operands" diagnostic instead of
    485 ; asserting.
    486 
    487   ldr
    488 
    489 ; CHECK-ERRORS: error: too few operands for instruction
    490 ; CHECK-ERRORS:   ldr
    491 ; CHECK-ERRORS:   ^
    492