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