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