xref: /aosp_15_r20/external/llvm/test/MC/AArch64/arm64-diags.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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