| ; RUN: not llvm-mc -triple arm64-apple-darwin -show-encoding < %s 2> %t | FileCheck %s |
| ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s |
| |
| foo: |
| |
| ; The first should encode as an expression. The second should error expecting |
| ; a register. |
| ldr x3, (foo + 4) |
| ldr x3, [foo + 4] |
| ; CHECK: ldr x3, foo+4 ; encoding: [0bAAA00011,A,A,0x58] |
| ; CHECK: ; fixup A - offset: 0, value: foo+4, kind: fixup_aarch64_ldr_pcrel_imm19 |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| |
| ; The last argument should be flagged as an error. rdar://9576009 |
| ld4.8b {v0, v1, v2, v3}, [x0], #33 |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: ld4.8b {v0, v1, v2, v3}, [x0], #33 |
| |
| |
| ldr x0, [x0, #804] |
| ldr w0, [x0, #802] |
| ldr x0, [x0, #804]! |
| ldr w0, [w0, #301]! |
| ldr x0, [x0], #804 |
| ldr w0, [w0], #301 |
| |
| ldp w3, w4, [x5, #11]! |
| ldp x3, x4, [x5, #12]! |
| ldp q3, q4, [x5, #12]! |
| ldp w3, w4, [x5], #11 |
| ldp x3, x4, [x5], #12 |
| ldp q3, q4, [x5], #12 |
| |
| ldur x0, [x1, #-257] |
| |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldr x0, [x0, #804] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldr w0, [x0, #802] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldr x0, [x0, #804]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: ldr w0, [w0, #301]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldr x0, [x0], #804 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: ldr w0, [w0], #301 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 4 in range [-256, 252]. |
| ; CHECK-ERRORS: ldp w3, w4, [x5, #11]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 8 in range [-512, 504]. |
| ; CHECK-ERRORS: ldp x3, x4, [x5, #12]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 16 in range [-1024, 1008]. |
| ; CHECK-ERRORS: ldp q3, q4, [x5, #12]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 4 in range [-256, 252]. |
| ; CHECK-ERRORS: ldp w3, w4, [x5], #11 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 8 in range [-512, 504]. |
| ; CHECK-ERRORS: ldp x3, x4, [x5], #12 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be a multiple of 16 in range [-1024, 1008]. |
| ; CHECK-ERRORS: ldp q3, q4, [x5], #12 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldur x0, [x1, #-257] |
| ; CHECK-ERRORS: ^ |
| |
| |
| ldrb w1, [x3, w3, sxtw #4] |
| ldrh w1, [x3, w3, sxtw #4] |
| ldr w1, [x3, w3, sxtw #4] |
| ldr x1, [x3, w3, sxtw #4] |
| ldr b1, [x3, w3, sxtw #4] |
| ldr h1, [x3, w3, sxtw #4] |
| ldr s1, [x3, w3, sxtw #4] |
| ldr d1, [x3, w3, sxtw #4] |
| ldr q1, [x3, w3, sxtw #1] |
| |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 |
| ; CHECK-ERRORS:ldrb w1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1 |
| ; CHECK-ERRORS:ldrh w1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2 |
| ; CHECK-ERRORS:ldr w1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3 |
| ; CHECK-ERRORS:ldr x1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 |
| ; CHECK-ERRORS:ldr b1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1 |
| ; CHECK-ERRORS:ldr h1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2 |
| ; CHECK-ERRORS:ldr s1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3 |
| ; CHECK-ERRORS:ldr d1, [x3, w3, sxtw #4] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4 |
| ; CHECK-ERRORS:ldr q1, [x3, w3, sxtw #1] |
| ; CHECK-ERRORS: ^ |
| |
| ; Check that register offset addressing modes only accept 32-bit offset |
| ; registers when using uxtw/sxtw extends. Everything else requires a 64-bit |
| ; register. |
| str d1, [x3, w3, sxtx #3] |
| ldr s1, [x3, d3, sxtx #2] |
| |
| ; CHECK-ERRORS: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3 |
| ; CHECK-ERRORS: str d1, [x3, w3, sxtx #3] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: index must be an integer in range [-256, 255]. |
| ; CHECK-ERRORS: ldr s1, [x3, d3, sxtx #2] |
| ; CHECK-ERRORS: ^ |
| |
| ; Shift immediates range checking. |
| sqrshrn b4, h9, #10 |
| rshrn v9.8b, v11.8h, #17 |
| sqrshrn v7.4h, v8.4s, #39 |
| uqshrn2 v4.4s, v5.2d, #67 |
| |
| ; CHECK-ERRORS: error: immediate must be an integer in range [1, 8]. |
| ; CHECK-ERRORS: sqrshrn b4, h9, #10 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: immediate must be an integer in range [1, 8]. |
| ; CHECK-ERRORS: rshrn v9.8b, v11.8h, #17 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: immediate must be an integer in range [1, 16]. |
| ; CHECK-ERRORS: sqrshrn v7.4h, v8.4s, #39 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: immediate must be an integer in range [1, 32]. |
| ; CHECK-ERRORS: uqshrn2 v4.4s, v5.2d, #67 |
| ; CHECK-ERRORS: ^ |
| |
| |
| st1.s4 {v14, v15}, [x2], #32 |
| ; CHECK-ERRORS: error: invalid type suffix for instruction |
| ; CHECK-ERRORS: st1.s4 {v14, v15}, [x2], #32 |
| ; CHECK-ERRORS: ^ |
| |
| |
| |
| ; Load pair instructions where Rt==Rt2 and writeback load/store instructions |
| ; where Rt==Rn or Rt2==Rn are unpredicatable. |
| ldp x1, x2, [x2], #16 |
| ldp x2, x2, [x2], #16 |
| ldp w1, w2, [x2], #16 |
| ldp w2, w2, [x2], #16 |
| ldp x1, x1, [x2] |
| ldp s1, s1, [x1], #8 |
| ldp s1, s1, [x1, #8]! |
| ldp s1, s1, [x1, #8] |
| ldp d1, d1, [x1], #16 |
| ldp d1, d1, [x1, #16]! |
| ldp d1, d1, [x1, #16] |
| ldp q1, q1, [x1], #32 |
| ldp q1, q1, [x1, #32]! |
| ldp q1, q1, [x1, #32] |
| |
| ldr x2, [x2], #8 |
| ldr x2, [x2, #8]! |
| ldr w2, [x2], #8 |
| ldr w2, [x2, #8]! |
| |
| str x2, [x2], #8 |
| str x2, [x2, #8]! |
| str w2, [x2], #8 |
| str w2, [x2, #8]! |
| |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination |
| ; CHECK-ERRORS: ldp x1, x2, [x2], #16 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination |
| ; CHECK-ERRORS: ldp x2, x2, [x2], #16 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination |
| ; CHECK-ERRORS: ldp w1, w2, [x2], #16 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, writeback base is also a destination |
| ; CHECK-ERRORS: ldp w2, w2, [x2], #16 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp x1, x1, [x2] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp s1, s1, [x1], #8 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp s1, s1, [x1, #8]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp s1, s1, [x1, #8] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp d1, d1, [x1], #16 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp d1, d1, [x1, #16]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp d1, d1, [x1, #16] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp q1, q1, [x1], #32 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp q1, q1, [x1, #32]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDP instruction, Rt2==Rt |
| ; CHECK-ERRORS: ldp q1, q1, [x1, #32] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source |
| ; CHECK-ERRORS: ldr x2, [x2], #8 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source |
| ; CHECK-ERRORS: ldr x2, [x2, #8]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source |
| ; CHECK-ERRORS: ldr w2, [x2], #8 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable LDR instruction, writeback base is also a source |
| ; CHECK-ERRORS: ldr w2, [x2, #8]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source |
| ; CHECK-ERRORS: str x2, [x2], #8 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source |
| ; CHECK-ERRORS: str x2, [x2, #8]! |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source |
| ; CHECK-ERRORS: str w2, [x2], #8 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STR instruction, writeback base is also a source |
| ; CHECK-ERRORS: str w2, [x2, #8]! |
| ; CHECK-ERRORS: ^ |
| |
| ; Store exclusive instructions are unpredictable if the status register clashes |
| ; with anything. |
| stlxrb w1, w1, [x5] |
| stxrb w3, w5, [x3] |
| stxrh w7, w9, [x7] |
| stlxrh wzr, wzr, [x13] |
| stxr w9, w9, [x12] |
| stlxr w22, x1, [x22] |
| stxr w4, x4, [x9] |
| stlxr w5, x0, [x5] |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stlxrb w1, w1, [x5] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stxrb w3, w5, [x3] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stxrh w7, w9, [x7] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stlxrh wzr, wzr, [x13] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stxr w9, w9, [x12] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stlxr w22, x1, [x22] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stxr w4, x4, [x9] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXR instruction, status is also a source |
| ; CHECK-ERRORS: stlxr w5, x0, [x5] |
| ; CHECK-ERRORS: ^ |
| |
| stxp w0, w0, w1, [x3] |
| stxp w0, w1, w0, [x5] |
| stxp w10, w4, w5, [x10] |
| stxp wzr, xzr, x4, [x5] |
| stxp w3, x5, x3, [sp] |
| stxp w25, x4, x2, [x25] |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp w0, w0, w1, [x3] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp w0, w1, w0, [x5] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp w10, w4, w5, [x10] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp wzr, xzr, x4, [x5] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp w3, x5, x3, [sp] |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: unpredictable STXP instruction, status is also a source |
| ; CHECK-ERRORS: stxp w25, x4, x2, [x25] |
| ; CHECK-ERRORS: ^ |
| |
| |
| ; The validity checking for shifted-immediate operands. rdar://13174476 |
| ; Where the immediate is out of range. |
| add w1, w2, w3, lsr #75 |
| |
| ; CHECK-ERRORS: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4] |
| ; CHECK-ERRORS: add w1, w2, w3, lsr #75 |
| ; CHECK-ERRORS: ^ |
| |
| ; logical instructions on 32-bit regs with shift > 31 is not legal |
| orr w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] |
| ; CHECK-ERRORS: orr w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: ^ |
| eor w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] |
| ; CHECK-ERRORS: eor w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: ^ |
| and w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] |
| ; CHECK-ERRORS: and w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: ^ |
| ands w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31] |
| ; CHECK-ERRORS: ands w0, w0, w0, lsl #32 |
| ; CHECK-ERRORS: ^ |
| |
| ; Relocated expressions should not be accepted for 32-bit adds or sub (imm) |
| add w3, w5, sym@PAGEOFF |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: add w3, w5, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| |
| adds w3, w5, sym@PAGEOFF |
| adds x9, x12, sym@PAGEOFF |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: adds w3, w5, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: adds x9, x12, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| |
| sub x3, x5, sym@PAGEOFF |
| sub w20, w30, sym@PAGEOFF |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: sub x3, x5, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: sub w20, w30, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| |
| subs w9, w10, sym@PAGEOFF |
| subs x20, x30, sym@PAGEOFF |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: subs w9, w10, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid immediate expression |
| ; CHECK-ERRORS: subs x20, x30, sym@PAGEOFF |
| ; CHECK-ERRORS: ^ |
| |
| tbl v0.8b, { v1 }, v0.8b |
| tbl v0.16b, { v1.8b, v2.8b, v3.8b }, v0.16b |
| tbx v3.16b, { v12.8b, v13.8b, v14.8b }, v6.8b |
| tbx v2.8b, { v0 }, v6.8b |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: tbl v0.8b, { v1 }, v0.8b |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: tbl v0.16b, { v1.8b, v2.8b, v3.8b }, v0.16b |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: tbx v3.16b, { v12.8b, v13.8b, v14.8b }, v6.8b |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: tbx v2.8b, { v0 }, v6.8b |
| ; CHECK-ERRORS: ^ |
| |
| b.c #0x4 |
| ; CHECK-ERRORS: error: invalid condition code |
| ; CHECK-ERRORS: b.c #0x4 |
| ; CHECK-ERRORS: ^ |
| |
| ic ialluis, x0 |
| ; CHECK-ERRORS: error: specified ic op does not use a register |
| ic iallu, x0 |
| ; CHECK-ERRORS: error: specified ic op does not use a register |
| ic ivau |
| ; CHECK-ERRORS: error: specified ic op requires a register |
| |
| dc zva |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc ivac |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc isw |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc cvac |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc csw |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc cvau |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc civac |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| dc cisw |
| ; CHECK-ERRORS: error: specified dc op requires a register |
| |
| at s1e1r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e2r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e3r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e1w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e2w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e3w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e0r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s1e0w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s12e1r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s12e1w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s12e0r |
| ; CHECK-ERRORS: error: specified at op requires a register |
| at s12e0w |
| ; CHECK-ERRORS: error: specified at op requires a register |
| |
| tlbi vmalle1is, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi vmalle1, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle1is, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle2is, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle3is, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle1, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle2, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi alle3, x0 |
| ; CHECK-ERRORS: error: specified tlbi op does not use a register |
| tlbi vae1is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vae2is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vae3is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi aside1is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vaae1is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale1is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vaale1is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale2is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale3is |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vae1 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vae2 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vae3 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi aside1 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vaae1 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale1 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale2 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| tlbi vale3 |
| ; CHECK-ERRORS: error: specified tlbi op requires a register |
| |
| |
| ; Check that we give the proper "too few operands" diagnostic even when |
| ; using short-form NEON. |
| |
| add.16b v0, v1, v2, v3 |
| add.8b v0, v1 |
| sub.8h v0, v1 |
| fadd.4s v0 |
| fmul.2s |
| |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: add.16b v0, v1, v2, v3 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: add.8b v0, v1 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: sub.8h v0, v1 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: fadd.4s v0 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: fmul.2s |
| ; CHECK-ERRORS: ^ |
| |
| ; Also for 2-operand instructions. |
| |
| frsqrte.4s v0, v1, v2 |
| frsqrte.2s v0 |
| frecpe.2d |
| |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: frsqrte.4s v0, v1, v2 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: frsqrte.2s v0 |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: frecpe.2d |
| ; CHECK-ERRORS: ^ |
| |
| ; And check that we do the same for non-NEON instructions. |
| |
| b.ne |
| b.eq 0, 0 |
| |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: b.ne |
| ; CHECK-ERRORS: ^ |
| ; CHECK-ERRORS: error: invalid operand for instruction |
| ; CHECK-ERRORS: b.eq 0, 0 |
| ; CHECK-ERRORS: ^ |
| |
| ; Check that we give the proper "too few operands" diagnostic instead of |
| ; asserting. |
| |
| ldr |
| |
| ; CHECK-ERRORS: error: too few operands for instruction |
| ; CHECK-ERRORS: ldr |
| ; CHECK-ERRORS: ^ |