1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
2 // RUN: FileCheck --check-prefix=CHECK-ERROR < %t %s
4 //------------------------------------------------------------------------------
5 // Add/sub (extended register)
6 //------------------------------------------------------------------------------
8 // Mismatched final register and extend
12 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
13 // CHECK-ERROR: add x2, x3, x5, sxtb
15 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
16 // CHECK-ERROR: add x2, x4, w2, uxtx
18 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
19 // CHECK-ERROR: add w5, w7, x9, sxtx
22 // Out of range extends
23 add x9, x10, w11, uxtb #-1
24 add x3, x5, w7, uxtb #5
25 sub x9, x15, x2, uxth #5
26 // CHECK-ERROR: error: expected integer shift amount
27 // CHECK-ERROR: add x9, x10, w11, uxtb #-1
29 // CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
30 // CHECK-ERROR: add x3, x5, w7, uxtb #5
32 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
33 // CHECK-ERROR: sub x9, x15, x2, uxth #5
36 // Wrong registers on normal variants
38 sub x3, xzr, w9, sxth #1
40 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
41 // CHECK-ERROR: add xzr, x3, x5, uxtx
43 // CHECK-ERROR: error: invalid operand for instruction
44 // CHECK-ERROR: sub x3, xzr, w9, sxth #1
46 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
47 // CHECK-ERROR: add x1, x2, sp, uxtx
50 // Wrong registers on flag-setting variants
52 adds x3, xzr, x9, uxtx
54 adds x2, x1, sp, uxtb #2
55 // CHECK-ERROR: error: invalid operand for instruction
56 // CHECK-ERROR: adds sp, x3, w2, uxtb
58 // CHECK-ERROR: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
59 // CHECK-ERROR: adds x3, xzr, x9, uxtx
61 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
62 // CHECK-ERROR: subs x2, x1, sp, uxtx
64 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
65 // CHECK-ERROR: adds x2, x1, sp, uxtb #2
68 // Amount not optional if lsl valid and used
70 // CHECK-ERROR: error: expected #imm after shift specifier
71 // CHECK-ERROR: add sp, x5, x7, lsl
74 //------------------------------------------------------------------------------
75 // Add/sub (immediate)
76 //------------------------------------------------------------------------------
78 // Out of range immediates: < 0 or more than 12 bits
81 add w4, w5, #-1, lsl #12
82 add w5, w6, #0x1000, lsl #12
83 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
84 // CHECK-ERROR-NEXT: add w4, w5, #-1
85 // CHECK-ERROR-NEXT: ^
86 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
87 // CHECK-ERROR-NEXT: add w5, w6, #0x1000
88 // CHECK-ERROR-NEXT: ^
89 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
90 // CHECK-ERROR-NEXT: add w4, w5, #-1, lsl #12
91 // CHECK-ERROR-NEXT: ^
92 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
93 // CHECK-ERROR-NEXT: add w5, w6, #0x1000, lsl #12
94 // CHECK-ERROR-NEXT: ^
96 // Only lsl #0 and lsl #12 are allowed
97 add w2, w3, #0x1, lsl #1
98 add w5, w17, #0xfff, lsl #13
99 add w17, w20, #0x1000, lsl #12
100 sub xsp, x34, #0x100, lsl #-1
101 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
102 // CHECK-ERROR-NEXT: add w2, w3, #0x1, lsl #1
103 // CHECK-ERROR-NEXT: ^
104 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
105 // CHECK-ERROR-NEXT: add w5, w17, #0xfff, lsl #13
106 // CHECK-ERROR-NEXT: ^
107 // CHECK-ERROR-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
108 // CHECK-ERROR-NEXT: add w17, w20, #0x1000, lsl #12
109 // CHECK-ERROR-NEXT: ^
110 // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate
111 // CHECK-ERROR-NEXT: sub xsp, x34, #0x100, lsl #-1
112 // CHECK-ERROR-NEXT: ^
114 // Incorrect registers (w31 doesn't exist at all, and 31 decodes to sp for these).
119 // CHECK-ERROR: error: invalid operand for instruction
120 // CHECK-ERROR-NEXT: add w31, w20, #1234
121 // CHECK-ERROR-NEXT: ^
122 // CHECK-ERROR-NEXT: error: invalid operand for instruction
123 // CHECK-ERROR-NEXT: add wzr, w20, #0x123
124 // CHECK-ERROR-NEXT: ^
125 // CHECK-ERROR-NEXT: error: invalid operand for instruction
126 // CHECK-ERROR-NEXT: add w20, wzr, #0x321
127 // CHECK-ERROR-NEXT: ^
128 // CHECK-ERROR-NEXT: error: invalid operand for instruction
129 // CHECK-ERROR-NEXT: add wzr, wzr, #0xfff
130 // CHECK-ERROR-NEXT: ^
132 // Mixed register classes
135 // CHECK-ERROR: error: invalid operand for instruction
136 // CHECK-ERROR-NEXT: add xsp, w2, #123
137 // CHECK-ERROR-NEXT: ^
138 // CHECK-ERROR-NEXT: error: invalid operand for instruction
139 // CHECK-ERROR-NEXT: sub w2, x30, #32
140 // CHECK-ERROR-NEXT: ^
142 // Out of range immediate
143 adds w0, w5, #0x10000
144 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
145 // CHECK-ERROR-NEXT: adds w0, w5, #0x10000
146 // CHECK-ERROR-NEXT: ^
148 // Wn|WSP should be in second place
150 // ...but wzr is the 31 destination
152 subs x5, xzr, #0x456, lsl #12
153 // CHECK-ERROR: error: invalid operand for instruction
154 // CHECK-ERROR-NEXT: adds w4, wzr, #0x123
155 // CHECK-ERROR-NEXT: ^
156 // CHECK-ERROR-NEXT: error: invalid operand for instruction
157 // CHECK-ERROR-NEXT: subs wsp, w5, #123
158 // CHECK-ERROR-NEXT: ^
159 // CHECK-ERROR-NEXT: error: invalid operand for instruction
160 // CHECK-ERROR-NEXT: subs x5, xzr, #0x456, lsl #12
161 // CHECK-ERROR-NEXT: ^
163 // MOV alias should not accept any fiddling
165 mov wsp, w27, #0xfff, lsl #12
166 // CHECK-ERROR: error: expected compatible register or logical immediate
167 // CHECK-ERROR-NEXT: mov x2, xsp, #123
168 // CHECK-ERROR-NEXT: ^
169 // CHECK-ERROR-NEXT: error: invalid operand for instruction
170 // CHECK-ERROR-NEXT: mov wsp, w27, #0xfff, lsl #12
171 // CHECK-ERROR-NEXT: ^
173 // A relocation should be provided for symbols
174 add x3, x9, #variable
175 // CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
176 // CHECK-ERROR-NEXT: add x3, x9, #variable
177 // CHECK-ERROR-NEXT: ^
180 //------------------------------------------------------------------------------
181 // Add-subtract (shifted register)
182 //------------------------------------------------------------------------------
184 add wsp, w1, w2, lsr #3
185 add x4, sp, x9, asr #5
186 add x9, x10, x5, ror #3
187 // CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
188 // CHECK-ERROR-NEXT: add wsp, w1, w2, lsr #3
189 // CHECK-ERROR-NEXT: ^
190 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
191 // CHECK-ERROR-NEXT: add x4, sp, x9, asr #5
192 // CHECK-ERROR-NEXT: ^
193 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
194 // CHECK-ERROR-NEXT: add x9, x10, x5, ror #3
195 // CHECK-ERROR-NEXT: ^
197 add w1, w2, w3, lsl #-1
198 add w1, w2, w3, lsl #32
199 add w1, w2, w3, lsr #-1
200 add w1, w2, w3, lsr #32
201 add w1, w2, w3, asr #-1
202 add w1, w2, w3, asr #32
203 add x1, x2, x3, lsl #-1
204 add x1, x2, x3, lsl #64
205 add x1, x2, x3, lsr #-1
206 add x1, x2, x3, lsr #64
207 add x1, x2, x3, asr #-1
208 add x1, x2, x3, asr #64
209 // CHECK-ERROR: error: expected integer shift amount
210 // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #-1
211 // CHECK-ERROR-NEXT: ^
212 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
213 // CHECK-ERROR-NEXT: add w1, w2, w3, lsl #32
214 // CHECK-ERROR-NEXT: ^
215 // CHECK-ERROR-NEXT: error: expected integer shift amount
216 // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #-1
217 // CHECK-ERROR-NEXT: ^
218 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
219 // CHECK-ERROR-NEXT: add w1, w2, w3, lsr #32
220 // CHECK-ERROR-NEXT: ^
221 // CHECK-ERROR-NEXT: error: expected integer shift amount
222 // CHECK-ERROR-NEXT: add w1, w2, w3, asr #-1
223 // CHECK-ERROR-NEXT: ^
224 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
225 // CHECK-ERROR-NEXT: add w1, w2, w3, asr #32
226 // CHECK-ERROR-NEXT: ^
227 // CHECK-ERROR-NEXT: error: expected integer shift amount
228 // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #-1
229 // CHECK-ERROR-NEXT: ^
230 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
231 // CHECK-ERROR-NEXT: add x1, x2, x3, lsl #64
232 // CHECK-ERROR-NEXT: ^
233 // CHECK-ERROR-NEXT: error: expected integer shift amount
234 // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #-1
235 // CHECK-ERROR-NEXT: ^
236 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
237 // CHECK-ERROR-NEXT: add x1, x2, x3, lsr #64
238 // CHECK-ERROR-NEXT: ^
239 // CHECK-ERROR-NEXT: error: expected integer shift amount
240 // CHECK-ERROR-NEXT: add x1, x2, x3, asr #-1
241 // CHECK-ERROR-NEXT: ^
242 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
243 // CHECK-ERROR-NEXT: add x1, x2, x3, asr #64
244 // CHECK-ERROR-NEXT: ^
246 adds w1, w2, w3, lsl #-1
247 adds w1, w2, w3, lsl #32
248 adds w1, w2, w3, lsr #-1
249 adds w1, w2, w3, lsr #32
250 adds w1, w2, w3, asr #-1
251 adds w1, w2, w3, asr #32
252 adds x1, x2, x3, lsl #-1
253 adds x1, x2, x3, lsl #64
254 adds x1, x2, x3, lsr #-1
255 adds x1, x2, x3, lsr #64
256 adds x1, x2, x3, asr #-1
257 adds x1, x2, x3, asr #64
258 // CHECK-ERROR: error: expected integer shift amount
259 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #-1
260 // CHECK-ERROR-NEXT: ^
261 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
262 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsl #32
263 // CHECK-ERROR-NEXT: ^
264 // CHECK-ERROR-NEXT: error: expected integer shift amount
265 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #-1
266 // CHECK-ERROR-NEXT: ^
267 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
268 // CHECK-ERROR-NEXT: adds w1, w2, w3, lsr #32
269 // CHECK-ERROR-NEXT: ^
270 // CHECK-ERROR-NEXT: error: expected integer shift amount
271 // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #-1
272 // CHECK-ERROR-NEXT: ^
273 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
274 // CHECK-ERROR-NEXT: adds w1, w2, w3, asr #32
275 // CHECK-ERROR-NEXT: ^
276 // CHECK-ERROR-NEXT: error: expected integer shift amount
277 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #-1
278 // CHECK-ERROR-NEXT: ^
279 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
280 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsl #64
281 // CHECK-ERROR-NEXT: ^
282 // CHECK-ERROR-NEXT: error: expected integer shift amount
283 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #-1
284 // CHECK-ERROR-NEXT: ^
285 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
286 // CHECK-ERROR-NEXT: adds x1, x2, x3, lsr #64
287 // CHECK-ERROR-NEXT: ^
288 // CHECK-ERROR-NEXT: error: expected integer shift amount
289 // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #-1
290 // CHECK-ERROR-NEXT: ^
291 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
292 // CHECK-ERROR-NEXT: adds x1, x2, x3, asr #64
293 // CHECK-ERROR-NEXT: ^
295 sub w1, w2, w3, lsl #-1
296 sub w1, w2, w3, lsl #32
297 sub w1, w2, w3, lsr #-1
298 sub w1, w2, w3, lsr #32
299 sub w1, w2, w3, asr #-1
300 sub w1, w2, w3, asr #32
301 sub x1, x2, x3, lsl #-1
302 sub x1, x2, x3, lsl #64
303 sub x1, x2, x3, lsr #-1
304 sub x1, x2, x3, lsr #64
305 sub x1, x2, x3, asr #-1
306 sub x1, x2, x3, asr #64
307 // CHECK-ERROR: error: expected integer shift amount
308 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #-1
309 // CHECK-ERROR-NEXT: ^
310 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
311 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsl #32
312 // CHECK-ERROR-NEXT: ^
313 // CHECK-ERROR-NEXT: error: expected integer shift amount
314 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #-1
315 // CHECK-ERROR-NEXT: ^
316 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
317 // CHECK-ERROR-NEXT: sub w1, w2, w3, lsr #32
318 // CHECK-ERROR-NEXT: ^
319 // CHECK-ERROR-NEXT: error: expected integer shift amount
320 // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #-1
321 // CHECK-ERROR-NEXT: ^
322 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
323 // CHECK-ERROR-NEXT: sub w1, w2, w3, asr #32
324 // CHECK-ERROR-NEXT: ^
325 // CHECK-ERROR-NEXT: error: expected integer shift amount
326 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #-1
327 // CHECK-ERROR-NEXT: ^
328 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
329 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsl #64
330 // CHECK-ERROR-NEXT: ^
331 // CHECK-ERROR-NEXT: error: expected integer shift amount
332 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #-1
333 // CHECK-ERROR-NEXT: ^
334 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
335 // CHECK-ERROR-NEXT: sub x1, x2, x3, lsr #64
336 // CHECK-ERROR-NEXT: ^
337 // CHECK-ERROR-NEXT: error: expected integer shift amount
338 // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #-1
339 // CHECK-ERROR-NEXT: ^
340 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
341 // CHECK-ERROR-NEXT: sub x1, x2, x3, asr #64
342 // CHECK-ERROR-NEXT: ^
344 subs w1, w2, w3, lsl #-1
345 subs w1, w2, w3, lsl #32
346 subs w1, w2, w3, lsr #-1
347 subs w1, w2, w3, lsr #32
348 subs w1, w2, w3, asr #-1
349 subs w1, w2, w3, asr #32
350 subs x1, x2, x3, lsl #-1
351 subs x1, x2, x3, lsl #64
352 subs x1, x2, x3, lsr #-1
353 subs x1, x2, x3, lsr #64
354 subs x1, x2, x3, asr #-1
355 subs x1, x2, x3, asr #64
356 // CHECK-ERROR: error: expected integer shift amount
357 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #-1
358 // CHECK-ERROR-NEXT: ^
359 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
360 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsl #32
361 // CHECK-ERROR-NEXT: ^
362 // CHECK-ERROR-NEXT: error: expected integer shift amount
363 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #-1
364 // CHECK-ERROR-NEXT: ^
365 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
366 // CHECK-ERROR-NEXT: subs w1, w2, w3, lsr #32
367 // CHECK-ERROR-NEXT: ^
368 // CHECK-ERROR-NEXT: error: expected integer shift amount
369 // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #-1
370 // CHECK-ERROR-NEXT: ^
371 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
372 // CHECK-ERROR-NEXT: subs w1, w2, w3, asr #32
373 // CHECK-ERROR-NEXT: ^
374 // CHECK-ERROR-NEXT: error: expected integer shift amount
375 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #-1
376 // CHECK-ERROR-NEXT: ^
377 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
378 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsl #64
379 // CHECK-ERROR-NEXT: ^
380 // CHECK-ERROR-NEXT: error: expected integer shift amount
381 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #-1
382 // CHECK-ERROR-NEXT: ^
383 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
384 // CHECK-ERROR-NEXT: subs x1, x2, x3, lsr #64
385 // CHECK-ERROR-NEXT: ^
386 // CHECK-ERROR-NEXT: error: expected integer shift amount
387 // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #-1
388 // CHECK-ERROR-NEXT: ^
389 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
390 // CHECK-ERROR-NEXT: subs x1, x2, x3, asr #64
391 // CHECK-ERROR-NEXT: ^
395 cmn w11, w12, lsr #-1
396 cmn w11, w12, lsr #32
397 cmn w19, wzr, asr #-1
398 cmn wzr, wzr, asr #32
401 cmn x11, x12, lsr #-1
402 cmn x11, x12, lsr #64
403 cmn x19, xzr, asr #-1
404 cmn xzr, xzr, asr #64
405 // CHECK-ERROR: error: expected integer shift amount
406 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #-1
407 // CHECK-ERROR-NEXT: ^
408 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
409 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #32
410 // CHECK-ERROR-NEXT: ^
411 // CHECK-ERROR-NEXT: error: expected integer shift amount
412 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #-1
413 // CHECK-ERROR-NEXT: ^
414 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
415 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #32
416 // CHECK-ERROR-NEXT: ^
417 // CHECK-ERROR-NEXT: error: expected integer shift amount
418 // CHECK-ERROR-NEXT: cmn w19, wzr, asr #-1
419 // CHECK-ERROR-NEXT: ^
420 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
421 // CHECK-ERROR-NEXT: cmn wzr, wzr, asr #32
422 // CHECK-ERROR-NEXT: ^
423 // CHECK-ERROR-NEXT: error: expected integer shift amount
424 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #-1
425 // CHECK-ERROR-NEXT: ^
426 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
427 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #64
428 // CHECK-ERROR-NEXT: ^
429 // CHECK-ERROR-NEXT: error: expected integer shift amount
430 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #-1
431 // CHECK-ERROR-NEXT: ^
432 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
433 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #64
434 // CHECK-ERROR-NEXT: ^
435 // CHECK-ERROR-NEXT: error: expected integer shift amount
436 // CHECK-ERROR-NEXT: cmn x19, xzr, asr #-1
437 // CHECK-ERROR-NEXT: ^
438 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
439 // CHECK-ERROR-NEXT: cmn xzr, xzr, asr #64
440 // CHECK-ERROR-NEXT: ^
444 cmp w11, w12, lsr #-1
445 cmp w11, w12, lsr #32
446 cmp w19, wzr, asr #-1
447 cmp wzr, wzr, asr #32
450 cmp x11, x12, lsr #-1
451 cmp x11, x12, lsr #64
452 cmp x19, xzr, asr #-1
453 cmp xzr, xzr, asr #64
454 // CHECK-ERROR: error: expected integer shift amount
455 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #-1
456 // CHECK-ERROR-NEXT: ^
457 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
458 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #32
459 // CHECK-ERROR-NEXT: ^
460 // CHECK-ERROR-NEXT: error: expected integer shift amount
461 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #-1
462 // CHECK-ERROR-NEXT: ^
463 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
464 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #32
465 // CHECK-ERROR-NEXT: ^
466 // CHECK-ERROR-NEXT: error: expected integer shift amount
467 // CHECK-ERROR-NEXT: cmp w19, wzr, asr #-1
468 // CHECK-ERROR-NEXT: ^
469 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
470 // CHECK-ERROR-NEXT: cmp wzr, wzr, asr #32
471 // CHECK-ERROR-NEXT: ^
472 // CHECK-ERROR-NEXT: error: expected integer shift amount
473 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #-1
474 // CHECK-ERROR-NEXT: ^
475 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
476 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #64
477 // CHECK-ERROR-NEXT: ^
478 // CHECK-ERROR-NEXT: error: expected integer shift amount
479 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #-1
480 // CHECK-ERROR-NEXT: ^
481 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
482 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #64
483 // CHECK-ERROR-NEXT: ^
484 // CHECK-ERROR-NEXT: error: expected integer shift amount
485 // CHECK-ERROR-NEXT: cmp x19, xzr, asr #-1
486 // CHECK-ERROR-NEXT: ^
487 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
488 // CHECK-ERROR-NEXT: cmp xzr, xzr, asr #64
489 // CHECK-ERROR-NEXT: ^
493 neg w11, w12, lsr #-1
494 neg w11, w12, lsr #32
495 neg w19, wzr, asr #-1
496 neg wzr, wzr, asr #32
499 neg x11, x12, lsr #-1
500 neg x11, x12, lsr #64
501 neg x19, xzr, asr #-1
502 neg xzr, xzr, asr #64
503 // CHECK-ERROR: error: expected integer shift amount
504 // CHECK-ERROR-NEXT: neg w9, w10, lsl #-1
505 // CHECK-ERROR-NEXT: ^
506 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
507 // CHECK-ERROR-NEXT: neg w9, w10, lsl #32
508 // CHECK-ERROR-NEXT: ^
509 // CHECK-ERROR-NEXT: error: expected integer shift amount
510 // CHECK-ERROR-NEXT: neg w11, w12, lsr #-1
511 // CHECK-ERROR-NEXT: ^
512 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
513 // CHECK-ERROR-NEXT: neg w11, w12, lsr #32
514 // CHECK-ERROR-NEXT: ^
515 // CHECK-ERROR-NEXT: error: expected integer shift amount
516 // CHECK-ERROR-NEXT: neg w19, wzr, asr #-1
517 // CHECK-ERROR-NEXT: ^
518 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
519 // CHECK-ERROR-NEXT: neg wzr, wzr, asr #32
520 // CHECK-ERROR-NEXT: ^
521 // CHECK-ERROR-NEXT: error: expected integer shift amount
522 // CHECK-ERROR-NEXT: neg x9, x10, lsl #-1
523 // CHECK-ERROR-NEXT: ^
524 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
525 // CHECK-ERROR-NEXT: neg x9, x10, lsl #64
526 // CHECK-ERROR-NEXT: ^
527 // CHECK-ERROR-NEXT: error: expected integer shift amount
528 // CHECK-ERROR-NEXT: neg x11, x12, lsr #-1
529 // CHECK-ERROR-NEXT: ^
530 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
531 // CHECK-ERROR-NEXT: neg x11, x12, lsr #64
532 // CHECK-ERROR-NEXT: ^
533 // CHECK-ERROR-NEXT: error: expected integer shift amount
534 // CHECK-ERROR-NEXT: neg x19, xzr, asr #-1
535 // CHECK-ERROR-NEXT: ^
536 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
537 // CHECK-ERROR-NEXT: neg xzr, xzr, asr #64
538 // CHECK-ERROR-NEXT: ^
540 negs w9, w10, lsl #-1
541 negs w9, w10, lsl #32
542 negs w11, w12, lsr #-1
543 negs w11, w12, lsr #32
544 negs w19, wzr, asr #-1
545 negs wzr, wzr, asr #32
546 negs x9, x10, lsl #-1
547 negs x9, x10, lsl #64
548 negs x11, x12, lsr #-1
549 negs x11, x12, lsr #64
550 negs x19, xzr, asr #-1
551 negs xzr, xzr, asr #64
552 // CHECK-ERROR: error: expected integer shift amount
553 // CHECK-ERROR-NEXT: negs w9, w10, lsl #-1
554 // CHECK-ERROR-NEXT: ^
555 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
556 // CHECK-ERROR-NEXT: negs w9, w10, lsl #32
557 // CHECK-ERROR-NEXT: ^
558 // CHECK-ERROR-NEXT: error: expected integer shift amount
559 // CHECK-ERROR-NEXT: negs w11, w12, lsr #-1
560 // CHECK-ERROR-NEXT: ^
561 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
562 // CHECK-ERROR-NEXT: negs w11, w12, lsr #32
563 // CHECK-ERROR-NEXT: ^
564 // CHECK-ERROR-NEXT: error: expected integer shift amount
565 // CHECK-ERROR-NEXT: negs w19, wzr, asr #-1
566 // CHECK-ERROR-NEXT: ^
567 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
568 // CHECK-ERROR-NEXT: negs wzr, wzr, asr #32
569 // CHECK-ERROR-NEXT: ^
570 // CHECK-ERROR-NEXT: error: expected integer shift amount
571 // CHECK-ERROR-NEXT: negs x9, x10, lsl #-1
572 // CHECK-ERROR-NEXT: ^
573 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
574 // CHECK-ERROR-NEXT: negs x9, x10, lsl #64
575 // CHECK-ERROR-NEXT: ^
576 // CHECK-ERROR-NEXT: error: expected integer shift amount
577 // CHECK-ERROR-NEXT: negs x11, x12, lsr #-1
578 // CHECK-ERROR-NEXT: ^
579 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
580 // CHECK-ERROR-NEXT: negs x11, x12, lsr #64
581 // CHECK-ERROR-NEXT: ^
582 // CHECK-ERROR-NEXT: error: expected integer shift amount
583 // CHECK-ERROR-NEXT: negs x19, xzr, asr #-1
584 // CHECK-ERROR-NEXT: ^
585 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
586 // CHECK-ERROR-NEXT: negs xzr, xzr, asr #64
587 // CHECK-ERROR-NEXT: ^
589 //------------------------------------------------------------------------------
590 // Add-subtract (shifted register)
591 //------------------------------------------------------------------------------
596 // CHECK-ERROR: error: invalid operand for instruction
597 // CHECK-ERROR-NEXT: adc wsp, w3, w5
598 // CHECK-ERROR-NEXT: ^
599 // CHECK-ERROR-NEXT: error: invalid operand for instruction
600 // CHECK-ERROR-NEXT: adc w1, wsp, w2
601 // CHECK-ERROR-NEXT: ^
602 // CHECK-ERROR-NEXT: error: invalid operand for instruction
603 // CHECK-ERROR-NEXT: adc w0, w10, wsp
604 // CHECK-ERROR-NEXT: ^
609 // CHECK-ERROR: error: invalid operand for instruction
610 // CHECK-ERROR-NEXT: adc sp, x3, x5
611 // CHECK-ERROR-NEXT: ^
612 // CHECK-ERROR-NEXT: error: invalid operand for instruction
613 // CHECK-ERROR-NEXT: adc x1, sp, x2
614 // CHECK-ERROR-NEXT: ^
615 // CHECK-ERROR-NEXT: error: invalid operand for instruction
616 // CHECK-ERROR-NEXT: adc x0, x10, sp
617 // CHECK-ERROR-NEXT: ^
622 // CHECK-ERROR: error: invalid operand for instruction
623 // CHECK-ERROR-NEXT: adcs wsp, w3, w5
624 // CHECK-ERROR-NEXT: ^
625 // CHECK-ERROR-NEXT: error: invalid operand for instruction
626 // CHECK-ERROR-NEXT: adcs w1, wsp, w2
627 // CHECK-ERROR-NEXT: ^
628 // CHECK-ERROR-NEXT: error: invalid operand for instruction
629 // CHECK-ERROR-NEXT: adcs w0, w10, wsp
630 // CHECK-ERROR-NEXT: ^
635 // CHECK-ERROR: error: invalid operand for instruction
636 // CHECK-ERROR-NEXT: adcs sp, x3, x5
637 // CHECK-ERROR-NEXT: ^
638 // CHECK-ERROR-NEXT: error: invalid operand for instruction
639 // CHECK-ERROR-NEXT: adcs x1, sp, x2
640 // CHECK-ERROR-NEXT: ^
641 // CHECK-ERROR-NEXT: error: invalid operand for instruction
642 // CHECK-ERROR-NEXT: adcs x0, x10, sp
643 // CHECK-ERROR-NEXT: ^
648 // CHECK-ERROR: error: invalid operand for instruction
649 // CHECK-ERROR-NEXT: sbc wsp, w3, w5
650 // CHECK-ERROR-NEXT: ^
651 // CHECK-ERROR-NEXT: error: invalid operand for instruction
652 // CHECK-ERROR-NEXT: sbc w1, wsp, w2
653 // CHECK-ERROR-NEXT: ^
654 // CHECK-ERROR-NEXT: error: invalid operand for instruction
655 // CHECK-ERROR-NEXT: sbc w0, w10, wsp
656 // CHECK-ERROR-NEXT: ^
661 // CHECK-ERROR: error: invalid operand for instruction
662 // CHECK-ERROR-NEXT: sbc sp, x3, x5
663 // CHECK-ERROR-NEXT: ^
664 // CHECK-ERROR-NEXT: error: invalid operand for instruction
665 // CHECK-ERROR-NEXT: sbc x1, sp, x2
666 // CHECK-ERROR-NEXT: ^
667 // CHECK-ERROR-NEXT: error: invalid operand for instruction
668 // CHECK-ERROR-NEXT: sbc x0, x10, sp
669 // CHECK-ERROR-NEXT: ^
674 // CHECK-ERROR: error: invalid operand for instruction
675 // CHECK-ERROR-NEXT: sbcs wsp, w3, w5
676 // CHECK-ERROR-NEXT: ^
677 // CHECK-ERROR-NEXT: error: invalid operand for instruction
678 // CHECK-ERROR-NEXT: sbcs w1, wsp, w2
679 // CHECK-ERROR-NEXT: ^
680 // CHECK-ERROR-NEXT: error: invalid operand for instruction
681 // CHECK-ERROR-NEXT: sbcs w0, w10, wsp
682 // CHECK-ERROR-NEXT: ^
687 // CHECK-ERROR: error: invalid operand for instruction
688 // CHECK-ERROR-NEXT: sbcs sp, x3, x5
689 // CHECK-ERROR-NEXT: ^
690 // CHECK-ERROR-NEXT: error: invalid operand for instruction
691 // CHECK-ERROR-NEXT: sbcs x1, sp, x2
692 // CHECK-ERROR-NEXT: ^
693 // CHECK-ERROR-NEXT: error: invalid operand for instruction
694 // CHECK-ERROR-NEXT: sbcs x0, x10, sp
695 // CHECK-ERROR-NEXT: ^
701 // CHECK-ERROR: error: invalid operand for instruction
702 // CHECK-ERROR-NEXT: ngc wsp, w3
703 // CHECK-ERROR-NEXT: ^
704 // CHECK-ERROR-NEXT: error: invalid operand for instruction
705 // CHECK-ERROR-NEXT: ngc w9, wsp
706 // CHECK-ERROR-NEXT: ^
707 // CHECK-ERROR-NEXT: error: invalid operand for instruction
708 // CHECK-ERROR-NEXT: ngc sp, x9
709 // CHECK-ERROR-NEXT: ^
710 // CHECK-ERROR-NEXT: error: invalid operand for instruction
711 // CHECK-ERROR-NEXT: ngc x2, sp
712 // CHECK-ERROR-NEXT: ^
718 // CHECK-ERROR: error: invalid operand for instruction
719 // CHECK-ERROR-NEXT: ngcs wsp, w3
720 // CHECK-ERROR-NEXT: ^
721 // CHECK-ERROR-NEXT: error: invalid operand for instruction
722 // CHECK-ERROR-NEXT: ngcs w9, wsp
723 // CHECK-ERROR-NEXT: ^
724 // CHECK-ERROR-NEXT: error: invalid operand for instruction
725 // CHECK-ERROR-NEXT: ngcs sp, x9
726 // CHECK-ERROR-NEXT: ^
727 // CHECK-ERROR-NEXT: error: invalid operand for instruction
728 // CHECK-ERROR-NEXT: ngcs x2, sp
729 // CHECK-ERROR-NEXT: ^
731 //------------------------------------------------------------------------------
733 //------------------------------------------------------------------------------
741 // CHECK-ERROR: error: invalid operand for instruction
742 // CHECK-ERROR-NEXT: sbfm x3, w13, #0, #0
743 // CHECK-ERROR-NEXT: ^
744 // CHECK-ERROR-NEXT: error: invalid operand for instruction
745 // CHECK-ERROR-NEXT: sbfm w12, x9, #0, #0
746 // CHECK-ERROR-NEXT: ^
747 // CHECK-ERROR-NEXT: error: invalid operand for instruction
748 // CHECK-ERROR-NEXT: sbfm sp, x3, #3, #5
749 // CHECK-ERROR-NEXT: ^
750 // CHECK-ERROR-NEXT: error: invalid operand for instruction
751 // CHECK-ERROR-NEXT: sbfm w3, wsp, #1, #9
752 // CHECK-ERROR-NEXT: ^
753 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
754 // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0
755 // CHECK-ERROR-NEXT: ^
756 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
757 // CHECK-ERROR-NEXT: sbfm x9, x5, #0, #-1
758 // CHECK-ERROR-NEXT: ^
761 sbfm w7, w11, #19, #32
762 sbfm x29, x30, #64, #0
763 sbfm x10, x20, #63, #64
764 // CHECK-ERROR: error: expected integer in range [0, 31]
765 // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1
766 // CHECK-ERROR-NEXT: ^
767 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
768 // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32
769 // CHECK-ERROR-NEXT: ^
770 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
771 // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0
772 // CHECK-ERROR-NEXT: ^
773 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
774 // CHECK-ERROR-NEXT: sbfm x10, x20, #63, #64
775 // CHECK-ERROR-NEXT: ^
778 ubfm w7, w11, #19, #32
779 ubfm x29, x30, #64, #0
780 ubfm x10, x20, #63, #64
781 // CHECK-ERROR: error: expected integer in range [0, 31]
782 // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1
783 // CHECK-ERROR-NEXT: ^
784 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
785 // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32
786 // CHECK-ERROR-NEXT: ^
787 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
788 // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0
789 // CHECK-ERROR-NEXT: ^
790 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
791 // CHECK-ERROR-NEXT: ubfm x10, x20, #63, #64
792 // CHECK-ERROR-NEXT: ^
795 bfm w7, w11, #19, #32
796 bfm x29, x30, #64, #0
797 bfm x10, x20, #63, #64
798 // CHECK-ERROR: error: expected integer in range [0, 31]
799 // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1
800 // CHECK-ERROR-NEXT: ^
801 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
802 // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32
803 // CHECK-ERROR-NEXT: ^
804 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
805 // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0
806 // CHECK-ERROR-NEXT: ^
807 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
808 // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64
809 // CHECK-ERROR-NEXT: ^
814 // CHECK-ERROR: error: invalid operand for instruction
815 // CHECK-ERROR-NEXT: sxtb x3, x2
816 // CHECK-ERROR-NEXT: ^
817 // CHECK-ERROR-NEXT: error: invalid operand for instruction
818 // CHECK-ERROR-NEXT: sxth xzr, xzr
819 // CHECK-ERROR-NEXT: ^
820 // CHECK-ERROR-NEXT: error: invalid operand for instruction
821 // CHECK-ERROR-NEXT: sxtw x3, x5
822 // CHECK-ERROR-NEXT: ^
829 // CHECK-ERROR: error: invalid operand for instruction
830 // CHECK-ERROR-NEXT: uxtb x3, x12
831 // CHECK-ERROR-NEXT: ^
832 // CHECK-ERROR-NEXT: error: invalid operand for instruction
833 // CHECK-ERROR-NEXT: uxth x5, x9
834 // CHECK-ERROR-NEXT: ^
835 // CHECK-ERROR-NEXT: error: invalid instruction
836 // CHECK-ERROR-NEXT: uxtw x3, x5
837 // CHECK-ERROR-NEXT: ^
838 // CHECK-ERROR-NEXT: error: invalid operand for instruction
839 // CHECK-ERROR-NEXT: uxtb x2, sp
840 // CHECK-ERROR-NEXT: ^
841 // CHECK-ERROR-NEXT: error: invalid operand for instruction
842 // CHECK-ERROR-NEXT: uxtb sp, xzr
843 // CHECK-ERROR-NEXT: ^
850 // CHECK-ERROR: error: invalid operand for instruction
851 // CHECK-ERROR-NEXT: asr x3, w2, #1
852 // CHECK-ERROR-NEXT: ^
853 // CHECK-ERROR-NEXT: error: invalid operand for instruction
854 // CHECK-ERROR-NEXT: asr sp, x2, #1
855 // CHECK-ERROR-NEXT: ^
856 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
857 // CHECK-ERROR-NEXT: asr x25, x26, #-1
858 // CHECK-ERROR-NEXT: ^
859 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
860 // CHECK-ERROR-NEXT: asr x25, x26, #64
861 // CHECK-ERROR-NEXT: ^
862 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
863 // CHECK-ERROR-NEXT: asr w9, w8, #32
864 // CHECK-ERROR-NEXT: ^
867 sbfiz wsp, w9, #0, #1
868 sbfiz w9, w10, #32, #1
869 sbfiz w11, w12, #32, #0
870 sbfiz w9, w10, #10, #23
871 sbfiz x3, x5, #12, #53
873 sbfiz w3, wsp, #7, #8
874 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
875 // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0
876 // CHECK-ERROR-NEXT: ^
877 // CHECK-ERROR-NEXT: error: invalid operand for instruction
878 // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1
879 // CHECK-ERROR-NEXT: ^
880 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
881 // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1
882 // CHECK-ERROR-NEXT: ^
883 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
884 // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0
885 // CHECK-ERROR-NEXT: ^
886 // CHECK-ERROR-NEXT: error: requested insert overflows register
887 // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23
888 // CHECK-ERROR-NEXT: ^
889 // CHECK-ERROR-NEXT: error: requested insert overflows register
890 // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53
891 // CHECK-ERROR-NEXT: ^
892 // CHECK-ERROR-NEXT: error: invalid operand for instruction
893 // CHECK-ERROR-NEXT: sbfiz sp, x3, #5, #6
894 // CHECK-ERROR-NEXT: ^
895 // CHECK-ERROR-NEXT: error: invalid operand for instruction
896 // CHECK-ERROR-NEXT: sbfiz w3, wsp, #7, #8
897 // CHECK-ERROR-NEXT: ^
901 sbfx w9, w10, #32, #1
902 sbfx w11, w12, #32, #0
903 sbfx w9, w10, #10, #23
904 sbfx x3, x5, #12, #53
907 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
908 // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0
909 // CHECK-ERROR-NEXT: ^
910 // CHECK-ERROR-NEXT: error: invalid operand for instruction
911 // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1
912 // CHECK-ERROR-NEXT: ^
913 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
914 // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1
915 // CHECK-ERROR-NEXT: ^
916 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
917 // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0
918 // CHECK-ERROR-NEXT: ^
919 // CHECK-ERROR-NEXT: error: requested extract overflows register
920 // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23
921 // CHECK-ERROR-NEXT: ^
922 // CHECK-ERROR-NEXT: error: requested extract overflows register
923 // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53
924 // CHECK-ERROR-NEXT: ^
925 // CHECK-ERROR-NEXT: error: invalid operand for instruction
926 // CHECK-ERROR-NEXT: sbfx sp, x3, #5, #6
927 // CHECK-ERROR-NEXT: ^
928 // CHECK-ERROR-NEXT: error: invalid operand for instruction
929 // CHECK-ERROR-NEXT: sbfx w3, wsp, #7, #8
930 // CHECK-ERROR-NEXT: ^
935 bfi w11, w12, #32, #0
936 bfi w9, w10, #10, #23
940 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
941 // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0
942 // CHECK-ERROR-NEXT: ^
943 // CHECK-ERROR-NEXT: error: invalid operand for instruction
944 // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1
945 // CHECK-ERROR-NEXT: ^
946 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
947 // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1
948 // CHECK-ERROR-NEXT: ^
949 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
950 // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0
951 // CHECK-ERROR-NEXT: ^
952 // CHECK-ERROR-NEXT: error: requested insert overflows register
953 // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23
954 // CHECK-ERROR-NEXT: ^
955 // CHECK-ERROR-NEXT: error: requested insert overflows register
956 // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53
957 // CHECK-ERROR-NEXT: ^
958 // CHECK-ERROR-NEXT: error: invalid operand for instruction
959 // CHECK-ERROR-NEXT: bfi sp, x3, #5, #6
960 // CHECK-ERROR-NEXT: ^
961 // CHECK-ERROR-NEXT: error: invalid operand for instruction
962 // CHECK-ERROR-NEXT: bfi w3, wsp, #7, #8
963 // CHECK-ERROR-NEXT: ^
966 bfxil wsp, w9, #0, #1
967 bfxil w9, w10, #32, #1
968 bfxil w11, w12, #32, #0
969 bfxil w9, w10, #10, #23
970 bfxil x3, x5, #12, #53
972 bfxil w3, wsp, #7, #8
973 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
974 // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0
975 // CHECK-ERROR-NEXT: ^
976 // CHECK-ERROR-NEXT: error: invalid operand for instruction
977 // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1
978 // CHECK-ERROR-NEXT: ^
979 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
980 // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1
981 // CHECK-ERROR-NEXT: ^
982 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
983 // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0
984 // CHECK-ERROR-NEXT: ^
985 // CHECK-ERROR-NEXT: error: requested extract overflows register
986 // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23
987 // CHECK-ERROR-NEXT: ^
988 // CHECK-ERROR-NEXT: error: requested extract overflows register
989 // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53
990 // CHECK-ERROR-NEXT: ^
991 // CHECK-ERROR-NEXT: error: invalid operand for instruction
992 // CHECK-ERROR-NEXT: bfxil sp, x3, #5, #6
993 // CHECK-ERROR-NEXT: ^
994 // CHECK-ERROR-NEXT: error: invalid operand for instruction
995 // CHECK-ERROR-NEXT: bfxil w3, wsp, #7, #8
996 // CHECK-ERROR-NEXT: ^
999 ubfiz wsp, w9, #0, #1
1000 ubfiz w9, w10, #32, #1
1001 ubfiz w11, w12, #32, #0
1002 ubfiz w9, w10, #10, #23
1003 ubfiz x3, x5, #12, #53
1004 ubfiz sp, x3, #5, #6
1005 ubfiz w3, wsp, #7, #8
1006 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
1007 // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0
1008 // CHECK-ERROR-NEXT: ^
1009 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1010 // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1
1011 // CHECK-ERROR-NEXT: ^
1012 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1013 // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1
1014 // CHECK-ERROR-NEXT: ^
1015 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1016 // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0
1017 // CHECK-ERROR-NEXT: ^
1018 // CHECK-ERROR-NEXT: error: requested insert overflows register
1019 // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23
1020 // CHECK-ERROR-NEXT: ^
1021 // CHECK-ERROR-NEXT: error: requested insert overflows register
1022 // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53
1023 // CHECK-ERROR-NEXT: ^
1024 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1025 // CHECK-ERROR-NEXT: ubfiz sp, x3, #5, #6
1026 // CHECK-ERROR-NEXT: ^
1027 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1028 // CHECK-ERROR-NEXT: ubfiz w3, wsp, #7, #8
1029 // CHECK-ERROR-NEXT: ^
1032 ubfx wsp, w9, #0, #1
1033 ubfx w9, w10, #32, #1
1034 ubfx w11, w12, #32, #0
1035 ubfx w9, w10, #10, #23
1036 ubfx x3, x5, #12, #53
1038 ubfx w3, wsp, #7, #8
1039 // CHECK-ERROR: error: expected integer in range [<lsb>, 31]
1040 // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0
1041 // CHECK-ERROR-NEXT: ^
1042 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1043 // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1
1044 // CHECK-ERROR-NEXT: ^
1045 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1046 // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1
1047 // CHECK-ERROR-NEXT: ^
1048 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1049 // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0
1050 // CHECK-ERROR-NEXT: ^
1051 // CHECK-ERROR-NEXT: error: requested extract overflows register
1052 // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23
1053 // CHECK-ERROR-NEXT: ^
1054 // CHECK-ERROR-NEXT: error: requested extract overflows register
1055 // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53
1056 // CHECK-ERROR-NEXT: ^
1057 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1058 // CHECK-ERROR-NEXT: ubfx sp, x3, #5, #6
1059 // CHECK-ERROR-NEXT: ^
1060 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1061 // CHECK-ERROR-NEXT: ubfx w3, wsp, #7, #8
1062 // CHECK-ERROR-NEXT: ^
1064 //------------------------------------------------------------------------------
1065 // Compare & branch (immediate)
1066 //------------------------------------------------------------------------------
1071 // CHECK-ERROR: error: invalid operand for instruction
1072 // CHECK-ERROR-NEXT: cbnz wsp, lbl
1073 // CHECK-ERROR-NEXT: ^
1074 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1075 // CHECK-ERROR-NEXT: cbz sp, lbl
1076 // CHECK-ERROR-NEXT: ^
1077 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1078 // CHECK-ERROR-NEXT: cbz x3, x5
1079 // CHECK-ERROR-NEXT: ^
1084 // CHECK-ERROR: error: expected label or encodable integer pc offset
1085 // CHECK-ERROR-NEXT: cbz w20, #1048576
1086 // CHECK-ERROR-NEXT: ^
1087 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1088 // CHECK-ERROR-NEXT: cbnz xzr, #-1048580
1089 // CHECK-ERROR-NEXT: ^
1090 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1091 // CHECK-ERROR-NEXT: cbz x29, #1
1092 // CHECK-ERROR-NEXT: ^
1094 //------------------------------------------------------------------------------
1095 // Conditional branch (immediate)
1096 //------------------------------------------------------------------------------
1099 // CHECK-ERROR: error: invalid condition code
1100 // CHECK-ERROR-NEXT: b.zf lbl
1101 // CHECK-ERROR-NEXT: ^
1106 // CHECK-ERROR: error: expected label or encodable integer pc offset
1107 // CHECK-ERROR-NEXT: b.eq #1048576
1108 // CHECK-ERROR-NEXT: ^
1109 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1110 // CHECK-ERROR-NEXT: b.ge #-1048580
1111 // CHECK-ERROR-NEXT: ^
1112 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1113 // CHECK-ERROR-NEXT: b.cc #1
1114 // CHECK-ERROR-NEXT: ^
1116 //------------------------------------------------------------------------------
1117 // Conditional compare (immediate)
1118 //------------------------------------------------------------------------------
1120 ccmp wsp, #4, #2, ne
1121 ccmp w25, #-1, #15, hs
1122 ccmp w3, #32, #0, ge
1123 ccmp w19, #5, #-1, lt
1124 ccmp w20, #7, #16, hs
1125 // CHECK-ERROR: error: invalid operand for instruction
1126 // CHECK-ERROR-NEXT: ccmp wsp, #4, #2, ne
1127 // CHECK-ERROR-NEXT: ^
1128 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1129 // CHECK-ERROR-NEXT: ccmp w25, #-1, #15, hs
1130 // CHECK-ERROR-NEXT: ^
1131 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1132 // CHECK-ERROR-NEXT: ccmp w3, #32, #0, ge
1133 // CHECK-ERROR-NEXT: ^
1134 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1135 // CHECK-ERROR-NEXT: ccmp w19, #5, #-1, lt
1136 // CHECK-ERROR-NEXT: ^
1137 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1138 // CHECK-ERROR-NEXT: ccmp w20, #7, #16, hs
1139 // CHECK-ERROR-NEXT: ^
1142 ccmp x25, #-1, #15, hs
1143 ccmp x3, #32, #0, ge
1144 ccmp x19, #5, #-1, lt
1145 ccmp x20, #7, #16, hs
1146 // CHECK-ERROR: error: invalid operand for instruction
1147 // CHECK-ERROR-NEXT: ccmp sp, #4, #2, ne
1148 // CHECK-ERROR-NEXT: ^
1149 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1150 // CHECK-ERROR-NEXT: ccmp x25, #-1, #15, hs
1151 // CHECK-ERROR-NEXT: ^
1152 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1153 // CHECK-ERROR-NEXT: ccmp x3, #32, #0, ge
1154 // CHECK-ERROR-NEXT: ^
1155 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1156 // CHECK-ERROR-NEXT: ccmp x19, #5, #-1, lt
1157 // CHECK-ERROR-NEXT: ^
1158 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1159 // CHECK-ERROR-NEXT: ccmp x20, #7, #16, hs
1160 // CHECK-ERROR-NEXT: ^
1162 ccmn wsp, #4, #2, ne
1163 ccmn w25, #-1, #15, hs
1164 ccmn w3, #32, #0, ge
1165 ccmn w19, #5, #-1, lt
1166 ccmn w20, #7, #16, hs
1167 // CHECK-ERROR: error: invalid operand for instruction
1168 // CHECK-ERROR-NEXT: ccmn wsp, #4, #2, ne
1169 // CHECK-ERROR-NEXT: ^
1170 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1171 // CHECK-ERROR-NEXT: ccmn w25, #-1, #15, hs
1172 // CHECK-ERROR-NEXT: ^
1173 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1174 // CHECK-ERROR-NEXT: ccmn w3, #32, #0, ge
1175 // CHECK-ERROR-NEXT: ^
1176 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1177 // CHECK-ERROR-NEXT: ccmn w19, #5, #-1, lt
1178 // CHECK-ERROR-NEXT: ^
1179 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1180 // CHECK-ERROR-NEXT: ccmn w20, #7, #16, hs
1181 // CHECK-ERROR-NEXT: ^
1184 ccmn x25, #-1, #15, hs
1185 ccmn x3, #32, #0, ge
1186 ccmn x19, #5, #-1, lt
1187 ccmn x20, #7, #16, hs
1188 // CHECK-ERROR: error: invalid operand for instruction
1189 // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne
1190 // CHECK-ERROR-NEXT: ^
1191 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1192 // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs
1193 // CHECK-ERROR-NEXT: ^
1194 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1195 // CHECK-ERROR-NEXT: ccmn x3, #32, #0, ge
1196 // CHECK-ERROR-NEXT: ^
1197 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1198 // CHECK-ERROR-NEXT: ccmn x19, #5, #-1, lt
1199 // CHECK-ERROR-NEXT: ^
1200 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1201 // CHECK-ERROR-NEXT: ccmn x20, #7, #16, hs
1202 // CHECK-ERROR-NEXT: ^
1204 //------------------------------------------------------------------------------
1205 // Conditional compare (register)
1206 //------------------------------------------------------------------------------
1208 ccmp wsp, w4, #2, ne
1209 ccmp w3, wsp, #0, ge
1210 ccmp w19, w5, #-1, lt
1211 ccmp w20, w7, #16, hs
1212 // CHECK-ERROR: error: invalid operand for instruction
1213 // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne
1214 // CHECK-ERROR-NEXT: ^
1215 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1216 // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge
1217 // CHECK-ERROR-NEXT: ^
1218 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1219 // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt
1220 // CHECK-ERROR-NEXT: ^
1221 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1222 // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs
1223 // CHECK-ERROR-NEXT: ^
1226 ccmp x25, sp, #15, hs
1227 ccmp x19, x5, #-1, lt
1228 ccmp x20, x7, #16, hs
1229 // CHECK-ERROR: error: invalid operand for instruction
1230 // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne
1231 // CHECK-ERROR-NEXT: ^
1232 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1233 // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs
1234 // CHECK-ERROR-NEXT: ^
1235 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1236 // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt
1237 // CHECK-ERROR-NEXT: ^
1238 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1239 // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs
1240 // CHECK-ERROR-NEXT: ^
1242 ccmn wsp, w4, #2, ne
1243 ccmn w25, wsp, #15, hs
1244 ccmn w19, w5, #-1, lt
1245 ccmn w20, w7, #16, hs
1246 // CHECK-ERROR: error: invalid operand for instruction
1247 // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne
1248 // CHECK-ERROR-NEXT: ^
1249 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1250 // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs
1251 // CHECK-ERROR-NEXT: ^
1252 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1253 // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt
1254 // CHECK-ERROR-NEXT: ^
1255 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1256 // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs
1257 // CHECK-ERROR-NEXT: ^
1260 ccmn x25, sp, #15, hs
1261 ccmn x19, x5, #-1, lt
1262 ccmn x20, x7, #16, hs
1263 // CHECK-ERROR: error: invalid operand for instruction
1264 // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne
1265 // CHECK-ERROR-NEXT: ^
1266 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1267 // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs
1268 // CHECK-ERROR-NEXT: ^
1269 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1270 // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt
1271 // CHECK-ERROR-NEXT: ^
1272 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1273 // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs
1274 // CHECK-ERROR-NEXT: ^
1276 //------------------------------------------------------------------------------
1277 // Conditional select
1278 //------------------------------------------------------------------------------
1280 csel w4, wsp, w9, eq
1281 csel wsp, w2, w3, ne
1282 csel w10, w11, wsp, ge
1286 csel x10, x11, sp, ge
1288 // CHECK-ERROR: error: invalid operand for instruction
1289 // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq
1290 // CHECK-ERROR-NEXT: ^
1291 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1292 // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne
1293 // CHECK-ERROR-NEXT: ^
1294 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1295 // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge
1296 // CHECK-ERROR-NEXT: ^
1297 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1298 // CHECK-ERROR-NEXT: csel w1, w2, w3, #3
1299 // CHECK-ERROR-NEXT: ^
1300 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1301 // CHECK-ERROR-NEXT: csel x4, sp, x9, eq
1302 // CHECK-ERROR-NEXT: ^
1303 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1304 // CHECK-ERROR-NEXT: csel sp, x2, x3, ne
1305 // CHECK-ERROR-NEXT: ^
1306 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1307 // CHECK-ERROR-NEXT: csel x10, x11, sp, ge
1308 // CHECK-ERROR-NEXT: ^
1309 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1310 // CHECK-ERROR-NEXT: csel x1, x2, x3, #3
1311 // CHECK-ERROR-NEXT: ^
1313 csinc w20, w21, wsp, mi
1314 csinc sp, x30, x29, eq
1315 // CHECK-ERROR: error: invalid operand for instruction
1316 // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi
1317 // CHECK-ERROR-NEXT: ^
1318 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1319 // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq
1320 // CHECK-ERROR-NEXT: ^
1322 csinv w20, wsp, wsp, mi
1323 csinv sp, x30, x29, le
1324 // CHECK-ERROR: error: invalid operand for instruction
1325 // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi
1326 // CHECK-ERROR-NEXT: ^
1327 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1328 // CHECK-ERROR-NEXT: csinv sp, x30, x29, le
1329 // CHECK-ERROR-NEXT: ^
1331 csneg w20, w21, wsp, mi
1332 csneg x0, sp, x29, le
1333 // CHECK-ERROR: error: invalid operand for instruction
1334 // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi
1335 // CHECK-ERROR-NEXT: ^
1336 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1337 // CHECK-ERROR-NEXT: csneg x0, sp, x29, le
1338 // CHECK-ERROR-NEXT: ^
1342 // CHECK-ERROR: error: invalid operand for instruction
1343 // CHECK-ERROR-NEXT: cset wsp, lt
1344 // CHECK-ERROR-NEXT: ^
1345 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1346 // CHECK-ERROR-NEXT: csetm sp, ge
1347 // CHECK-ERROR-NEXT: ^
1351 // CHECK-ERROR: error: invalid operand for instruction
1352 // CHECK-ERROR-NEXT: cinc w3, wsp, ne
1353 // CHECK-ERROR-NEXT: ^
1354 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1355 // CHECK-ERROR-NEXT: cinc sp, x9, eq
1356 // CHECK-ERROR-NEXT: ^
1360 // CHECK-ERROR: error: invalid operand for instruction
1361 // CHECK-ERROR-NEXT: cinv w3, wsp, ne
1362 // CHECK-ERROR-NEXT: ^
1363 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1364 // CHECK-ERROR-NEXT: cinv sp, x9, eq
1365 // CHECK-ERROR-NEXT: ^
1369 // CHECK-ERROR: error: invalid operand for instruction
1370 // CHECK-ERROR-NEXT: cneg w3, wsp, ne
1371 // CHECK-ERROR-NEXT: ^
1372 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1373 // CHECK-ERROR-NEXT: cneg sp, x9, eq
1374 // CHECK-ERROR-NEXT: ^
1376 //------------------------------------------------------------------------------
1377 // Data Processing (1 source)
1378 //------------------------------------------------------------------------------
1380 //CHECK-ERROR: error: invalid operand for instruction
1381 //CHECK-ERROR-NEXT: rbit x23, w2
1384 //CHECK-ERROR: error: invalid operand for instruction
1385 //CHECK-ERROR-NEXT: cls sp, x2
1388 //CHECK-ERROR: error: invalid operand for instruction
1389 //CHECK-ERROR-NEXT: clz wsp, w3
1391 //------------------------------------------------------------------------------
1392 // Data Processing (2 sources)
1393 //------------------------------------------------------------------------------
1395 //CHECK-ERROR: error: invalid operand for instruction
1396 //CHECK-ERROR-NEXT: udiv x23, w2, x18
1399 //CHECK-ERROR: error: invalid operand for instruction
1400 //CHECK-ERROR-NEXT: lsl sp, x2, x4
1403 //CHECK-ERROR: error: invalid operand for instruction
1404 //CHECK-ERROR-NEXT: asr wsp, w3, w9
1406 //------------------------------------------------------------------------------
1407 // Data Processing (3 sources)
1408 //------------------------------------------------------------------------------
1410 madd sp, x3, x9, x10
1411 //CHECK-ERROR: error: invalid operand for instruction
1412 //CHECK-ERROR-NEXT: madd sp, x3, x9, x10
1414 //------------------------------------------------------------------------------
1415 // Exception generation
1416 //------------------------------------------------------------------------------
1421 // CHECK-ERROR: error: expected integer in range [0, 65535]
1422 // CHECK-ERROR-NEXT: svc #-1
1423 // CHECK-ERROR-NEXT: ^
1424 // CHECK-ERROR-NEXT: error: expected integer in range [0, 65535]
1425 // CHECK-ERROR-NEXT: hlt #65536
1426 // CHECK-ERROR-NEXT: ^
1427 // CHECK-ERROR-NEXT: error: invalid instruction
1428 // CHECK-ERROR-NEXT: dcps4 #43
1429 // CHECK-ERROR-NEXT: ^
1430 // CHECK-ERROR-NEXT: error: invalid instruction
1431 // CHECK-ERROR-NEXT: dcps4
1432 // CHECK-ERROR-NEXT: ^
1434 //------------------------------------------------------------------------------
1435 // Extract (immediate)
1436 //------------------------------------------------------------------------------
1438 extr w2, w20, w30, #-1
1439 extr w9, w19, w20, #32
1440 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1441 // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1
1442 // CHECK-ERROR-NEXT: ^
1443 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1444 // CHECK-ERROR-NEXT: extr w9, w19, w20, #32
1445 // CHECK-ERROR-NEXT: ^
1447 extr x10, x15, x20, #-1
1448 extr x20, x25, x30, #64
1449 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
1450 // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1
1451 // CHECK-ERROR-NEXT: ^
1452 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
1453 // CHECK-ERROR-NEXT: extr x20, x25, x30, #64
1454 // CHECK-ERROR-NEXT: ^
1458 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
1459 // CHECK-ERROR-NEXT: ror w9, w10, #32
1460 // CHECK-ERROR-NEXT: ^
1461 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
1462 // CHECK-ERROR-NEXT: ror x10, x11, #64
1463 // CHECK-ERROR-NEXT: ^
1465 //------------------------------------------------------------------------------
1466 // Floating-point compare
1467 //------------------------------------------------------------------------------
1470 // CHECK-ERROR: error: expected floating-point constant #0.0
1471 // CHECK-ERROR-NEXT: fcmp s3, d2
1472 // CHECK-ERROR-NEXT: ^
1478 // CHECK-ERROR: error: expected floating-point constant #0.0
1479 // CHECK-ERROR-NEXT: fcmp s9, #-0.0
1480 // CHECK-ERROR-NEXT: ^
1481 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1482 // CHECK-ERROR-NEXT: fcmp d3, #-0.0
1483 // CHECK-ERROR-NEXT: ^
1484 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1485 // CHECK-ERROR-NEXT: fcmp s1, #1.0
1486 // CHECK-ERROR-NEXT: ^
1487 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1488 // CHECK-ERROR-NEXT: fcmpe s30, #-0.0
1489 // CHECK-ERROR-NEXT: ^
1491 //------------------------------------------------------------------------------
1492 // Floating-point conditional compare
1493 //------------------------------------------------------------------------------
1495 fccmp s19, s5, #-1, lt
1496 fccmp s20, s7, #16, hs
1497 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1498 // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt
1499 // CHECK-ERROR-NEXT: ^
1500 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1501 // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs
1502 // CHECK-ERROR-NEXT: ^
1504 fccmp d19, d5, #-1, lt
1505 fccmp d20, d7, #16, hs
1506 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1507 // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt
1508 // CHECK-ERROR-NEXT: ^
1509 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1510 // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs
1511 // CHECK-ERROR-NEXT: ^
1513 fccmpe s19, s5, #-1, lt
1514 fccmpe s20, s7, #16, hs
1515 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1516 // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt
1517 // CHECK-ERROR-NEXT: ^
1518 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1519 // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs
1520 // CHECK-ERROR-NEXT: ^
1522 fccmpe d19, d5, #-1, lt
1523 fccmpe d20, d7, #16, hs
1524 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1525 // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt
1526 // CHECK-ERROR-NEXT: ^
1527 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
1528 // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs
1529 // CHECK-ERROR-NEXT: ^
1531 //------------------------------------------------------------------------------
1532 // Floating-point conditional compare
1533 //------------------------------------------------------------------------------
1535 fcsel q3, q20, q9, pl
1536 fcsel h9, h10, h11, mi
1537 fcsel b9, b10, b11, mi
1538 // CHECK-ERROR: error: invalid operand for instruction
1539 // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl
1540 // CHECK-ERROR-NEXT: ^
1541 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1542 // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi
1543 // CHECK-ERROR-NEXT: ^
1544 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1545 // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi
1546 // CHECK-ERROR-NEXT: ^
1548 //------------------------------------------------------------------------------
1549 // Floating-point data-processing (1 source)
1550 //------------------------------------------------------------------------------
1554 // CHECK-ERROR: error: expected compatible register or floating-point constant
1555 // CHECK-ERROR-NEXT: fmov d0, s3
1556 // CHECK-ERROR-NEXT: ^
1557 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1558 // CHECK-ERROR-NEXT: fcvt d0, d1
1559 // CHECK-ERROR-NEXT: ^
1562 //------------------------------------------------------------------------------
1563 // Floating-point data-processing (2 sources)
1564 //------------------------------------------------------------------------------
1569 // CHECK-ERROR: error: invalid operand for instruction
1570 // CHECK-ERROR-NEXT: fadd s0, d3, d7
1571 // CHECK-ERROR-NEXT: ^
1572 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1573 // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12
1574 // CHECK-ERROR-NEXT: ^
1575 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1576 // CHECK-ERROR-NEXT: fnmul d1, d9, s18
1577 // CHECK-ERROR-NEXT: ^
1579 //------------------------------------------------------------------------------
1580 // Floating-point data-processing (3 sources)
1581 //------------------------------------------------------------------------------
1583 fmadd b3, b4, b5, b6
1584 fmsub h1, h2, h3, h4
1585 fnmadd q3, q5, q6, q7
1586 fnmsub s2, s4, d5, h9
1587 // CHECK-ERROR: error: invalid operand for instruction
1588 // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6
1589 // CHECK-ERROR-NEXT: ^
1590 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1591 // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4
1592 // CHECK-ERROR-NEXT: ^
1593 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1594 // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7
1595 // CHECK-ERROR-NEXT: ^
1596 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1597 // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9
1598 // CHECK-ERROR-NEXT: ^
1600 //------------------------------------------------------------------------------
1601 // Floating-point conditional compare
1602 //------------------------------------------------------------------------------
1605 fcvtzs w19, s20, #33
1606 fcvtzs wsp, s19, #14
1607 // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
1608 // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0
1609 // CHECK-ERROR-NEXT: ^
1610 // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
1611 // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33
1612 // CHECK-ERROR-NEXT: ^
1613 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1614 // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14
1615 // CHECK-ERROR-NEXT: ^
1618 fcvtzs x19, s20, #65
1620 // CHECK-ERROR-NEXT: error: expected integer in range [1, 64]
1621 // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0
1622 // CHECK-ERROR-NEXT: ^
1623 // CHECK-ERROR-NEXT: error: expected integer in range [1, 64]
1624 // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65
1625 // CHECK-ERROR-NEXT: ^
1626 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1627 // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14
1628 // CHECK-ERROR-NEXT: ^
1631 fcvtzu w19, s20, #33
1632 fcvtzu wsp, s19, #14
1633 // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
1634 // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0
1635 // CHECK-ERROR-NEXT: ^
1636 // CHECK-ERROR-NEXT: error: expected integer in range [1, 32]
1637 // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33
1638 // CHECK-ERROR-NEXT: ^
1639 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1640 // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14
1641 // CHECK-ERROR-NEXT: ^
1644 fcvtzu x19, s20, #65
1646 // CHECK-ERROR-NEXT: error: expected integer in range [1, 64]
1647 // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0
1648 // CHECK-ERROR-NEXT: ^
1649 // CHECK-ERROR-NEXT: error: expected integer in range [1, 64]
1650 // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65
1651 // CHECK-ERROR-NEXT: ^
1652 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1653 // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14
1654 // CHECK-ERROR-NEXT: ^
1659 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1660 // CHECK-ERROR-NEXT: scvtf w13, s31, #0
1661 // CHECK-ERROR-NEXT: ^
1662 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1663 // CHECK-ERROR-NEXT: scvtf w19, s20, #33
1664 // CHECK-ERROR-NEXT: ^
1665 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1666 // CHECK-ERROR-NEXT: scvtf wsp, s19, #14
1667 // CHECK-ERROR-NEXT: ^
1672 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1673 // CHECK-ERROR-NEXT: scvtf x13, s31, #0
1674 // CHECK-ERROR-NEXT: ^
1675 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1676 // CHECK-ERROR-NEXT: scvtf x19, s20, #65
1677 // CHECK-ERROR-NEXT: ^
1678 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1679 // CHECK-ERROR-NEXT: scvtf sp, s19, #14
1680 // CHECK-ERROR-NEXT: ^
1685 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1686 // CHECK-ERROR-NEXT: ucvtf w13, s31, #0
1687 // CHECK-ERROR-NEXT: ^
1688 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1689 // CHECK-ERROR-NEXT: ucvtf w19, s20, #33
1690 // CHECK-ERROR-NEXT: ^
1691 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1692 // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14
1693 // CHECK-ERROR-NEXT: ^
1698 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1699 // CHECK-ERROR-NEXT: ucvtf x13, s31, #0
1700 // CHECK-ERROR-NEXT: ^
1701 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1702 // CHECK-ERROR-NEXT: ucvtf x19, s20, #65
1703 // CHECK-ERROR-NEXT: ^
1704 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1705 // CHECK-ERROR-NEXT: ucvtf sp, s19, #14
1706 // CHECK-ERROR-NEXT: ^
1708 //------------------------------------------------------------------------------
1709 // Floating-point immediate
1710 //------------------------------------------------------------------------------
1711 ;; Exponent too large
1714 // CHECK-ERROR: error: expected compatible register or floating-point constant
1715 // CHECK-ERROR-NEXT: fmov d3, #0.0625
1716 // CHECK-ERROR-NEXT: ^
1717 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1718 // CHECK-ERROR-NEXT: fmov s2, #32.0
1719 // CHECK-ERROR-NEXT: ^
1721 ;; Fraction too precise
1724 // CHECK-ERROR: error: expected compatible register or floating-point constant
1725 // CHECK-ERROR-NEXT: fmov s9, #1.03125
1726 // CHECK-ERROR-NEXT: ^
1727 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1728 // CHECK-ERROR-NEXT: fmov s28, #1.96875
1729 // CHECK-ERROR-NEXT: ^
1731 ;; No particular reason, but a striking omission
1733 // CHECK-ERROR: error: expected compatible register or floating-point constant
1734 // CHECK-ERROR-NEXT: fmov d0, #0.0
1735 // CHECK-ERROR-NEXT: ^
1737 //------------------------------------------------------------------------------
1738 // Floating-point <-> integer conversion
1739 //------------------------------------------------------------------------------
1746 // CHECK-ERROR: error: expected lane specifier '[1]'
1747 // CHECK-ERROR-NEXT: fmov x3, v0.d[0]
1748 // CHECK-ERROR-NEXT: ^
1749 // CHECK-ERROR-NEXT: error: lane number incompatible with layout
1750 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
1751 // CHECK-ERROR-NEXT: ^
1752 // CHECK-ERROR-NEXT: error: lane number incompatible with layout
1753 // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
1754 // CHECK-ERROR-NEXT: ^
1755 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1756 // CHECK-ERROR-NEXT: fcvtns sp, s5
1757 // CHECK-ERROR-NEXT: ^
1758 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1759 // CHECK-ERROR-NEXT: scvtf s6, wsp
1760 // CHECK-ERROR-NEXT: ^
1762 //------------------------------------------------------------------------------
1763 // Load-register (literal)
1764 //------------------------------------------------------------------------------
1768 // CHECK-ERROR: error: invalid operand for instruction
1769 // CHECK-ERROR-NEXT: ldr sp, some_label
1770 // CHECK-ERROR-NEXT: ^
1771 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1772 // CHECK-ERROR-NEXT: ldrsw w3, somewhere
1773 // CHECK-ERROR-NEXT: ^
1778 // CHECK-ERROR: error: expected label or encodable integer pc offset
1779 // CHECK-ERROR-NEXT: ldrsw x2, #1048576
1780 // CHECK-ERROR-NEXT: ^
1781 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1782 // CHECK-ERROR-NEXT: ldr q0, #-1048580
1783 // CHECK-ERROR-NEXT: ^
1784 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1785 // CHECK-ERROR-NEXT: ldr x0, #2
1786 // CHECK-ERROR-NEXT: ^
1788 //------------------------------------------------------------------------------
1789 // Load/store exclusive
1790 //------------------------------------------------------------------------------
1792 stxrb w2, x3, [x4, #20]
1793 stlxrh w10, w11, [w2]
1794 // CHECK-ERROR: error: expected '#0'
1795 // CHECK-ERROR-NEXT: stxrb w2, x3, [x4, #20]
1796 // CHECK-ERROR-NEXT: ^
1797 // CHECK-ERROR: error: invalid operand for instruction
1798 // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2]
1799 // CHECK-ERROR-NEXT: ^
1801 stlxr x20, w21, [sp]
1802 // CHECK-ERROR: error: invalid operand for instruction
1803 // CHECK-ERROR-NEXT: stlxr x20, w21, [sp]
1804 // CHECK-ERROR-NEXT: ^
1807 // CHECK-ERROR: error: invalid operand for instruction
1808 // CHECK-ERROR-NEXT: ldxr sp, [sp]
1809 // CHECK-ERROR-NEXT: ^
1811 stxp x1, x2, x3, [x4]
1812 // CHECK-ERROR: error: invalid operand for instruction
1813 // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4]
1814 // CHECK-ERROR-NEXT: ^
1816 stlxp w5, x1, w4, [x5]
1817 // CHECK-ERROR: error: invalid operand for instruction
1818 // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5]
1819 // CHECK-ERROR-NEXT: ^
1821 stlxp w17, w6, x7, [x22]
1822 // CHECK-ERROR: error: invalid operand for instruction
1823 // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22]
1824 // CHECK-ERROR-NEXT: ^
1826 //------------------------------------------------------------------------------
1827 // Load/store (unscaled immediate)
1828 //------------------------------------------------------------------------------
1830 ldurb w2, [sp, #256]
1831 sturh w17, [x1, #256]
1832 ldursw x20, [x1, #256]
1833 ldur x12, [sp, #256]
1834 // CHECK-ERROR: error: expected integer in range [-256, 255]
1835 // CHECK-ERROR-NEXT: ldurb w2, [sp, #256]
1836 // CHECK-ERROR-NEXT: ^
1837 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1838 // CHECK-ERROR-NEXT: sturh w17, [x1, #256]
1839 // CHECK-ERROR-NEXT: ^
1840 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1841 // CHECK-ERROR-NEXT: ldursw x20, [x1, #256]
1842 // CHECK-ERROR-NEXT: ^
1843 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1844 // CHECK-ERROR-NEXT: ldur x12, [sp, #256]
1845 // CHECK-ERROR-NEXT: ^
1847 stur h2, [x2, #-257]
1848 stur b2, [x2, #-257]
1849 ldursb x9, [sp, #-257]
1850 ldur w2, [x30, #-257]
1851 stur q9, [x20, #-257]
1852 // CHECK-ERROR: error: expected integer in range [-256, 255]
1853 // CHECK-ERROR-NEXT: stur h2, [x2, #-257]
1854 // CHECK-ERROR-NEXT: ^
1855 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1856 // CHECK-ERROR-NEXT: stur b2, [x2, #-257]
1857 // CHECK-ERROR-NEXT: ^
1858 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1859 // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257]
1860 // CHECK-ERROR-NEXT: ^
1861 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1862 // CHECK-ERROR-NEXT: ldur w2, [x30, #-257]
1863 // CHECK-ERROR-NEXT: ^
1864 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1865 // CHECK-ERROR-NEXT: stur q9, [x20, #-257]
1866 // CHECK-ERROR-NEXT: ^
1868 prfum pstl3strm, [xzr]
1869 // CHECK-ERROR: error: invalid operand for instruction
1870 // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr]
1871 // CHECK-ERROR-NEXT: ^
1873 //------------------------------------------------------------------------------
1874 // Load-store register (immediate post-indexed)
1875 //------------------------------------------------------------------------------
1876 ldr x3, [x4, #25], #0
1877 ldr x4, [x9, #0], #4
1878 // CHECK-ERROR: error: expected symbolic reference or integer in range [0, 32760]
1879 // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0
1880 // CHECK-ERROR-NEXT: ^
1881 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1882 // CHECK-ERROR-NEXT: ldr x4, [x9, #0], #4
1883 // CHECK-ERROR-NEXT: ^
1885 strb w1, [x19], #256
1886 strb w9, [sp], #-257
1887 strh w1, [x19], #256
1888 strh w9, [sp], #-257
1891 // CHECK-ERROR: error: expected integer in range [-256, 255]
1892 // CHECK-ERROR-NEXT: strb w1, [x19], #256
1893 // CHECK-ERROR-NEXT: ^
1894 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1895 // CHECK-ERROR-NEXT: strb w9, [sp], #-257
1896 // CHECK-ERROR-NEXT: ^
1897 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1898 // CHECK-ERROR-NEXT: strh w1, [x19], #256
1899 // CHECK-ERROR-NEXT: ^
1900 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1901 // CHECK-ERROR-NEXT: strh w9, [sp], #-257
1902 // CHECK-ERROR-NEXT: ^
1903 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1904 // CHECK-ERROR-NEXT: str w1, [x19], #256
1905 // CHECK-ERROR-NEXT: ^
1906 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1907 // CHECK-ERROR-NEXT: str w9, [sp], #-257
1908 // CHECK-ERROR-NEXT: ^
1910 ldrb w1, [x19], #256
1911 ldrb w9, [sp], #-257
1912 ldrh w1, [x19], #256
1913 ldrh w9, [sp], #-257
1916 // CHECK-ERROR: error: expected integer in range [-256, 255]
1917 // CHECK-ERROR-NEXT: ldrb w1, [x19], #256
1918 // CHECK-ERROR-NEXT: ^
1919 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1920 // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257
1921 // CHECK-ERROR-NEXT: ^
1922 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1923 // CHECK-ERROR-NEXT: ldrh w1, [x19], #256
1924 // CHECK-ERROR-NEXT: ^
1925 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1926 // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257
1927 // CHECK-ERROR-NEXT: ^
1928 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1929 // CHECK-ERROR-NEXT: ldr w1, [x19], #256
1930 // CHECK-ERROR-NEXT: ^
1931 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1932 // CHECK-ERROR-NEXT: ldr w9, [sp], #-257
1933 // CHECK-ERROR-NEXT: ^
1935 ldrsb x2, [x3], #256
1936 ldrsb x22, [x13], #-257
1937 ldrsh x2, [x3], #256
1938 ldrsh x22, [x13], #-257
1939 ldrsw x2, [x3], #256
1940 ldrsw x22, [x13], #-257
1941 // CHECK-ERROR: error: expected integer in range [-256, 255]
1942 // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256
1943 // CHECK-ERROR-NEXT: ^
1944 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1945 // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257
1946 // CHECK-ERROR-NEXT: ^
1947 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1948 // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256
1949 // CHECK-ERROR-NEXT: ^
1950 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1951 // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257
1952 // CHECK-ERROR-NEXT: ^
1953 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1954 // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256
1955 // CHECK-ERROR-NEXT: ^
1956 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1957 // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257
1958 // CHECK-ERROR-NEXT: ^
1960 ldrsb w2, [x3], #256
1961 ldrsb w22, [x13], #-257
1962 ldrsh w2, [x3], #256
1963 ldrsh w22, [x13], #-257
1964 // CHECK-ERROR: error: expected integer in range [-256, 255]
1965 // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256
1966 // CHECK-ERROR-NEXT: ^
1967 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1968 // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257
1969 // CHECK-ERROR-NEXT: ^
1970 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1971 // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256
1972 // CHECK-ERROR-NEXT: ^
1973 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1974 // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257
1975 // CHECK-ERROR-NEXT: ^
1978 str b3, [x13], #-257
1980 str h3, [x13], #-257
1982 str s3, [x13], #-257
1984 str d3, [x13], #-257
1986 str q3, [x13], #-257
1987 // CHECK-ERROR: error: expected integer in range [-256, 255]
1988 // CHECK-ERROR-NEXT: str b3, [x3], #256
1989 // CHECK-ERROR-NEXT: ^
1990 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1991 // CHECK-ERROR-NEXT: str b3, [x13], #-257
1992 // CHECK-ERROR-NEXT: ^
1993 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1994 // CHECK-ERROR-NEXT: str h3, [x3], #256
1995 // CHECK-ERROR-NEXT: ^
1996 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
1997 // CHECK-ERROR-NEXT: str h3, [x13], #-257
1998 // CHECK-ERROR-NEXT: ^
1999 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2000 // CHECK-ERROR-NEXT: str s3, [x3], #256
2001 // CHECK-ERROR-NEXT: ^
2002 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2003 // CHECK-ERROR-NEXT: str s3, [x13], #-257
2004 // CHECK-ERROR-NEXT: ^
2005 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2006 // CHECK-ERROR-NEXT: str d3, [x3], #256
2007 // CHECK-ERROR-NEXT: ^
2008 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2009 // CHECK-ERROR-NEXT: str d3, [x13], #-257
2010 // CHECK-ERROR-NEXT: ^
2011 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2012 // CHECK-ERROR-NEXT: str q3, [x3], #256
2013 // CHECK-ERROR-NEXT: ^
2014 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2015 // CHECK-ERROR-NEXT: str q3, [x13], #-257
2016 // CHECK-ERROR-NEXT: ^
2019 ldr b3, [x13], #-257
2021 ldr h3, [x13], #-257
2023 ldr s3, [x13], #-257
2025 ldr d3, [x13], #-257
2027 ldr q3, [x13], #-257
2028 // CHECK-ERROR: error: expected integer in range [-256, 255]
2029 // CHECK-ERROR-NEXT: ldr b3, [x3], #256
2030 // CHECK-ERROR-NEXT: ^
2031 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2032 // CHECK-ERROR-NEXT: ldr b3, [x13], #-257
2033 // CHECK-ERROR-NEXT: ^
2034 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2035 // CHECK-ERROR-NEXT: ldr h3, [x3], #256
2036 // CHECK-ERROR-NEXT: ^
2037 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2038 // CHECK-ERROR-NEXT: ldr h3, [x13], #-257
2039 // CHECK-ERROR-NEXT: ^
2040 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2041 // CHECK-ERROR-NEXT: ldr s3, [x3], #256
2042 // CHECK-ERROR-NEXT: ^
2043 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2044 // CHECK-ERROR-NEXT: ldr s3, [x13], #-257
2045 // CHECK-ERROR-NEXT: ^
2046 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2047 // CHECK-ERROR-NEXT: ldr d3, [x3], #256
2048 // CHECK-ERROR-NEXT: ^
2049 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2050 // CHECK-ERROR-NEXT: ldr d3, [x13], #-257
2051 // CHECK-ERROR-NEXT: ^
2052 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2053 // CHECK-ERROR-NEXT: ldr q3, [x3], #256
2054 // CHECK-ERROR-NEXT: ^
2055 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2056 // CHECK-ERROR-NEXT: ldr q3, [x13], #-257
2057 // CHECK-ERROR-NEXT: ^
2059 //------------------------------------------------------------------------------
2060 // Load-store register (immediate pre-indexed)
2061 //------------------------------------------------------------------------------
2064 // CHECK-ERROR: error:
2065 // CHECK-ERROR-NEXT: ldr x3, [x4]!
2066 // CHECK-ERROR-NEXT: ^
2068 strb w1, [x19, #256]!
2069 strb w9, [sp, #-257]!
2070 strh w1, [x19, #256]!
2071 strh w9, [sp, #-257]!
2072 str w1, [x19, #256]!
2073 str w9, [sp, #-257]!
2074 // CHECK-ERROR: error: invalid operand for instruction
2075 // CHECK-ERROR-NEXT: strb w1, [x19, #256]!
2076 // CHECK-ERROR-NEXT: ^
2077 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2078 // CHECK-ERROR-NEXT: strb w9, [sp, #-257]!
2079 // CHECK-ERROR-NEXT: ^
2080 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2081 // CHECK-ERROR-NEXT: strh w1, [x19, #256]!
2082 // CHECK-ERROR-NEXT: ^
2083 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2084 // CHECK-ERROR-NEXT: strh w9, [sp, #-257]!
2085 // CHECK-ERROR-NEXT: ^
2086 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2087 // CHECK-ERROR-NEXT: str w1, [x19, #256]!
2088 // CHECK-ERROR-NEXT: ^
2089 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2090 // CHECK-ERROR-NEXT: str w9, [sp, #-257]!
2091 // CHECK-ERROR-NEXT: ^
2093 ldrb w1, [x19, #256]!
2094 ldrb w9, [sp, #-257]!
2095 ldrh w1, [x19, #256]!
2096 ldrh w9, [sp, #-257]!
2097 ldr w1, [x19, #256]!
2098 ldr w9, [sp, #-257]!
2099 // CHECK-ERROR: error: invalid operand for instruction
2100 // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]!
2101 // CHECK-ERROR-NEXT: ^
2102 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2103 // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]!
2104 // CHECK-ERROR-NEXT: ^
2105 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2106 // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]!
2107 // CHECK-ERROR-NEXT: ^
2108 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2109 // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]!
2110 // CHECK-ERROR-NEXT: ^
2111 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2112 // CHECK-ERROR-NEXT: ldr w1, [x19, #256]!
2113 // CHECK-ERROR-NEXT: ^
2114 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2115 // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]!
2116 // CHECK-ERROR-NEXT: ^
2118 ldrsb x2, [x3, #256]!
2119 ldrsb x22, [x13, #-257]!
2120 ldrsh x2, [x3, #256]!
2121 ldrsh x22, [x13, #-257]!
2122 ldrsw x2, [x3, #256]!
2123 ldrsw x22, [x13, #-257]!
2124 // CHECK-ERROR: error: invalid operand for instruction
2125 // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]!
2126 // CHECK-ERROR-NEXT: ^
2127 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2128 // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]!
2129 // CHECK-ERROR-NEXT: ^
2130 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2131 // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]!
2132 // CHECK-ERROR-NEXT: ^
2133 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2134 // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]!
2135 // CHECK-ERROR-NEXT: ^
2136 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2137 // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]!
2138 // CHECK-ERROR-NEXT: ^
2139 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2140 // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]!
2141 // CHECK-ERROR-NEXT: ^
2143 ldrsb w2, [x3, #256]!
2144 ldrsb w22, [x13, #-257]!
2145 ldrsh w2, [x3, #256]!
2146 ldrsh w22, [x13, #-257]!
2147 // CHECK-ERROR: error: invalid operand for instruction
2148 // CHECK-ERROR-NEXT: ldrsb w2, [x3, #256]!
2149 // CHECK-ERROR-NEXT: ^
2150 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2151 // CHECK-ERROR-NEXT: ldrsb w22, [x13, #-257]!
2152 // CHECK-ERROR-NEXT: ^
2153 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2154 // CHECK-ERROR-NEXT: ldrsh w2, [x3, #256]!
2155 // CHECK-ERROR-NEXT: ^
2156 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2157 // CHECK-ERROR-NEXT: ldrsh w22, [x13, #-257]!
2158 // CHECK-ERROR-NEXT: ^
2161 str b3, [x13, #-257]!
2163 str h3, [x13, #-257]!
2165 str s3, [x13, #-257]!
2167 str d3, [x13, #-257]!
2168 // CHECK-ERROR: error: invalid operand for instruction
2169 // CHECK-ERROR-NEXT: str b3, [x3, #256]!
2170 // CHECK-ERROR-NEXT: ^
2171 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2172 // CHECK-ERROR-NEXT: str b3, [x13, #-257]!
2173 // CHECK-ERROR-NEXT: ^
2174 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2175 // CHECK-ERROR-NEXT: str h3, [x3, #256]!
2176 // CHECK-ERROR-NEXT: ^
2177 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2178 // CHECK-ERROR-NEXT: str h3, [x13, #-257]!
2179 // CHECK-ERROR-NEXT: ^
2180 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2181 // CHECK-ERROR-NEXT: str s3, [x3, #256]!
2182 // CHECK-ERROR-NEXT: ^
2183 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2184 // CHECK-ERROR-NEXT: str s3, [x13, #-257]!
2185 // CHECK-ERROR-NEXT: ^
2186 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2187 // CHECK-ERROR-NEXT: str d3, [x3, #256]!
2188 // CHECK-ERROR-NEXT: ^
2189 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2190 // CHECK-ERROR-NEXT: str d3, [x13, #-257]!
2191 // CHECK-ERROR-NEXT: ^
2194 ldr b3, [x13, #-257]!
2196 ldr h3, [x13, #-257]!
2198 ldr s3, [x13, #-257]!
2200 ldr d3, [x13, #-257]!
2201 // CHECK-ERROR: error: invalid operand for instruction
2202 // CHECK-ERROR-NEXT: ldr b3, [x3, #256]!
2203 // CHECK-ERROR-NEXT: ^
2204 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2205 // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]!
2206 // CHECK-ERROR-NEXT: ^
2207 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2208 // CHECK-ERROR-NEXT: ldr h3, [x3, #256]!
2209 // CHECK-ERROR-NEXT: ^
2210 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2211 // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]!
2212 // CHECK-ERROR-NEXT: ^
2213 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2214 // CHECK-ERROR-NEXT: ldr s3, [x3, #256]!
2215 // CHECK-ERROR-NEXT: ^
2216 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2217 // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]!
2218 // CHECK-ERROR-NEXT: ^
2219 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2220 // CHECK-ERROR-NEXT: ldr d3, [x3, #256]!
2221 // CHECK-ERROR-NEXT: ^
2222 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2223 // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]!
2224 // CHECK-ERROR-NEXT: ^
2226 //------------------------------------------------------------------------------
2227 // Load/store (unprivileged)
2228 //------------------------------------------------------------------------------
2230 ldtrb w2, [sp, #256]
2231 sttrh w17, [x1, #256]
2232 ldtrsw x20, [x1, #256]
2233 ldtr x12, [sp, #256]
2234 // CHECK-ERROR: error: expected integer in range [-256, 255]
2235 // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256]
2236 // CHECK-ERROR-NEXT: ^
2237 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2238 // CHECK-ERROR-NEXT: sttrh w17, [x1, #256]
2239 // CHECK-ERROR-NEXT: ^
2240 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2241 // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256]
2242 // CHECK-ERROR-NEXT: ^
2243 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2244 // CHECK-ERROR-NEXT: ldtr x12, [sp, #256]
2245 // CHECK-ERROR-NEXT: ^
2247 sttr h2, [x2, #-257]
2248 sttr b2, [x2, #-257]
2249 ldtrsb x9, [sp, #-257]
2250 ldtr w2, [x30, #-257]
2251 sttr q9, [x20, #-257]
2252 // CHECK-ERROR: error: invalid operand for instruction
2253 // CHECK-ERROR-NEXT: sttr h2, [x2, #-257]
2254 // CHECK-ERROR-NEXT: ^
2255 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2256 // CHECK-ERROR-NEXT: sttr b2, [x2, #-257]
2257 // CHECK-ERROR-NEXT: ^
2258 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2259 // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257]
2260 // CHECK-ERROR-NEXT: ^
2261 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2262 // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257]
2263 // CHECK-ERROR-NEXT: ^
2264 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2265 // CHECK-ERROR-NEXT: sttr q9, [x20, #-257]
2266 // CHECK-ERROR-NEXT: ^
2269 //------------------------------------------------------------------------------
2270 // Load/store (unsigned immediate)
2271 //------------------------------------------------------------------------------
2273 //// Out of range immediates
2274 ldr q0, [x11, #65536]
2275 ldr x0, [sp, #32768]
2276 ldr w0, [x4, #16384]
2277 ldrh w2, [x21, #8192]
2278 ldrb w3, [x12, #4096]
2279 // CHECK-ERROR: error: expected integer in range [-256, 255]
2280 // CHECK-ERROR-NEXT: ldr q0, [x11, #65536]
2281 // CHECK-ERROR-NEXT: ^
2282 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2283 // CHECK-ERROR-NEXT: ldr x0, [sp, #32768]
2284 // CHECK-ERROR-NEXT: ^
2285 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2286 // CHECK-ERROR-NEXT: ldr w0, [x4, #16384]
2287 // CHECK-ERROR-NEXT: ^
2288 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2289 // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192]
2290 // CHECK-ERROR-NEXT: ^
2291 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2292 // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096]
2293 // CHECK-ERROR-NEXT: ^
2295 //// Misaligned addresses
2297 ldrsh w2, [x0, #123]
2299 // CHECK-ERROR: error: too few operands for instruction
2300 // CHECK-ERROR-NEXT: ldr w0, [x0, #2]
2301 // CHECK-ERROR-NEXT: ^
2302 // CHECK-ERROR-NEXT: error: too few operands for instruction
2303 // CHECK-ERROR-NEXT: ldrsh w2, [x0, #123]
2304 // CHECK-ERROR-NEXT: ^
2305 // CHECK-ERROR-NEXT: error: too few operands for instruction
2306 // CHECK-ERROR-NEXT: str q0, [x0, #8]
2307 // CHECK-ERROR-NEXT: ^
2309 //// 32-bit addresses
2312 // CHECK-ERROR: error: invalid operand for instruction
2313 // CHECK-ERROR-NEXT: ldr w0, [w20]
2314 // CHECK-ERROR-NEXT: ^
2315 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2316 // CHECK-ERROR-NEXT: ldrsh x3, [wsp]
2317 // CHECK-ERROR-NEXT: ^
2323 str w7, [x12, #16384]
2324 // CHECK-ERROR: error: invalid operand for instruction
2325 // CHECK-ERROR-NEXT: strb w0, [wsp]
2326 // CHECK-ERROR-NEXT: ^
2327 // CHECK-ERROR: error: invalid operand for instruction
2328 // CHECK-ERROR-NEXT: strh w31, [x23, #1]
2329 // CHECK-ERROR-NEXT: ^
2330 // CHECK-ERROR-NEXT: error: too few operands for instruction
2331 // CHECK-ERROR-NEXT: str x5, [x22, #12]
2332 // CHECK-ERROR-NEXT: ^
2333 // CHECK-ERROR-NEXT: error: expected integer in range [-256, 255]
2334 // CHECK-ERROR-NEXT: str w7, [x12, #16384]
2335 // CHECK-ERROR-NEXT: ^
2340 prfm pldl1strm, [w3, #8]
2342 // CHECK-ERROR: error: Invalid immediate for instruction
2343 // CHECK-ERROR-NEXT: prfm #-1, [sp]
2344 // CHECK-ERROR-NEXT: ^
2345 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
2346 // CHECK-ERROR-NEXT: prfm #32, [sp, #8]
2347 // CHECK-ERROR-NEXT: ^
2348 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2349 // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8]
2350 // CHECK-ERROR-NEXT: ^
2351 // CHECK-ERROR-NEXT: error: operand specifier not recognised
2352 // CHECK-ERROR-NEXT: prfm wibble, [sp]
2353 // CHECK-ERROR-NEXT: ^
2355 //------------------------------------------------------------------------------
2356 // Load/store register (register offset)
2357 //------------------------------------------------------------------------------
2360 ldr w4, [x0, x4, lsl]
2361 ldr w9, [x5, x5, uxtw]
2362 ldr w10, [x6, x9, sxtw #2]
2363 ldr w11, [x7, w2, lsl #2]
2364 ldr w12, [x8, w1, sxtx]
2365 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2366 // CHECK-ERROR-NEXT: ldr w3, [xzr, x3]
2367 // CHECK-ERROR-NEXT: ^
2368 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2369 // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl]
2370 // CHECK-ERROR-NEXT: ^
2371 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2372 // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw]
2373 // CHECK-ERROR-NEXT: ^
2374 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2375 // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2]
2376 // CHECK-ERROR-NEXT: ^
2377 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2378 // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2]
2379 // CHECK-ERROR-NEXT: ^
2380 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2381 // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx]
2382 // CHECK-ERROR-NEXT: ^
2384 ldrsb w9, [x4, x2, lsl #-1]
2385 strb w9, [x4, x2, lsl #1]
2386 // CHECK-ERROR-NEXT: error: expected integer shift amount
2387 // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1]
2388 // CHECK-ERROR-NEXT: ^
2389 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
2390 // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1]
2391 // CHECK-ERROR-NEXT: ^
2393 ldrsh w9, [x4, x2, lsl #-1]
2394 ldr h13, [x4, w2, uxtw #2]
2395 // CHECK-ERROR-NEXT: error: expected integer shift amount
2396 // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1]
2397 // CHECK-ERROR-NEXT: ^
2398 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
2399 // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2]
2400 // CHECK-ERROR-NEXT: ^
2402 str w9, [x5, w9, sxtw #-1]
2403 str s3, [sp, w9, uxtw #1]
2404 ldrsw x9, [x15, x4, sxtx #3]
2405 // CHECK-ERROR-NEXT: error: expected integer shift amount
2406 // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1]
2407 // CHECK-ERROR-NEXT: ^
2408 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2409 // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1]
2410 // CHECK-ERROR-NEXT: ^
2411 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2412 // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3]
2413 // CHECK-ERROR-NEXT: ^
2415 str xzr, [x5, x9, sxtx #-1]
2416 prfm pldl3keep, [sp, x20, lsl #2]
2417 ldr d3, [x20, wzr, uxtw #4]
2418 // CHECK-ERROR-NEXT: error: expected integer shift amount
2419 // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1]
2420 // CHECK-ERROR-NEXT: ^
2421 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
2422 // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2]
2423 // CHECK-ERROR-NEXT: ^
2424 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
2425 // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4]
2426 // CHECK-ERROR-NEXT: ^
2428 ldr q5, [sp, x2, lsl #-1]
2429 ldr q10, [x20, w4, uxtw #2]
2430 str q21, [x20, w4, uxtw #5]
2431 // CHECK-ERROR-NEXT: error: expected integer shift amount
2432 // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1]
2433 // CHECK-ERROR-NEXT: ^
2434 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2435 // CHECK-ERROR-NEXT: ldr q10, [x20, w4, uxtw #2]
2436 // CHECK-ERROR-NEXT: ^
2437 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2438 // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5]
2439 // CHECK-ERROR-NEXT: ^
2441 //------------------------------------------------------------------------------
2442 // Load/store register pair (offset)
2443 //------------------------------------------------------------------------------
2444 ldp w3, w2, [x4, #1]
2445 stp w1, w2, [x3, #253]
2446 stp w9, w10, [x5, #256]
2447 ldp w11, w12, [x9, #-260]
2449 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2450 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]
2451 // CHECK-ERROR-NEXT: ^
2452 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2453 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]
2454 // CHECK-ERROR-NEXT: ^
2455 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2456 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]
2457 // CHECK-ERROR-NEXT: ^
2458 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2459 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]
2460 // CHECK-ERROR-NEXT: ^
2461 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2462 // CHECK-ERROR-NEXT: stp wsp, w9, [sp]
2463 // CHECK-ERROR-NEXT: ^
2465 ldpsw x9, x2, [sp, #2]
2466 ldpsw x1, x2, [x10, #256]
2467 ldpsw x3, x4, [x11, #-260]
2468 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2469 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]
2470 // CHECK-ERROR-NEXT: ^
2471 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2472 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]
2473 // CHECK-ERROR-NEXT: ^
2474 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2475 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]
2476 // CHECK-ERROR-NEXT: ^
2478 ldp x2, x5, [sp, #4]
2479 ldp x5, x6, [x9, #512]
2480 stp x7, x8, [x10, #-520]
2481 // CHECK-ERROR: error: expected integer multiple of 8 in range [-512, 508]
2482 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]
2483 // CHECK-ERROR-NEXT: ^
2484 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2485 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]
2486 // CHECK-ERROR-NEXT: ^
2487 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2488 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]
2489 // CHECK-ERROR-NEXT: ^
2493 // CHECK-ERROR: error: invalid operand for instruction
2494 // CHECK-ERROR-NEXT: ldp sp, x3, [x10]
2495 // CHECK-ERROR-NEXT: ^
2496 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2497 // CHECK-ERROR-NEXT: stp x3, sp, [x9]
2498 // CHECK-ERROR-NEXT: ^
2500 stp s3, s5, [sp, #-2]
2501 ldp s6, s26, [x4, #-260]
2502 stp s13, s19, [x5, #256]
2503 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2504 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]
2505 // CHECK-ERROR-NEXT: ^
2506 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2507 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]
2508 // CHECK-ERROR-NEXT: ^
2509 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2510 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]
2511 // CHECK-ERROR-NEXT: ^
2514 ldp d5, d6, [x0, #512]
2515 stp d7, d8, [x0, #-520]
2516 // CHECK-ERROR: error: invalid operand for instruction
2517 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr]
2518 // CHECK-ERROR-NEXT: ^
2519 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2520 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]
2521 // CHECK-ERROR-NEXT: ^
2522 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2523 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]
2524 // CHECK-ERROR-NEXT: ^
2527 ldp q3, q5, [sp, #8]
2528 stp q20, q25, [x5, #1024]
2529 ldp q30, q15, [x23, #-1040]
2530 // CHECK-ERROR: error: invalid operand for instruction
2531 // CHECK-ERROR-NEXT: ldp d3, q2, [sp]
2532 // CHECK-ERROR-NEXT: ^
2533 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2534 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]
2535 // CHECK-ERROR-NEXT: ^
2536 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2537 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]
2538 // CHECK-ERROR-NEXT: ^
2539 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2540 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]
2541 // CHECK-ERROR-NEXT: ^
2543 //------------------------------------------------------------------------------
2544 // Load/store register pair (post-indexed)
2545 //------------------------------------------------------------------------------
2547 ldp w3, w2, [x4], #1
2548 stp w1, w2, [x3], #253
2549 stp w9, w10, [x5], #256
2550 ldp w11, w12, [x9], #-260
2551 stp wsp, w9, [sp], #0
2552 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2553 // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1
2554 // CHECK-ERROR-NEXT: ^
2555 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2556 // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253
2557 // CHECK-ERROR-NEXT: ^
2558 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2559 // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256
2560 // CHECK-ERROR-NEXT: ^
2561 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2562 // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260
2563 // CHECK-ERROR-NEXT: ^
2564 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2565 // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0
2566 // CHECK-ERROR-NEXT: ^
2568 ldpsw x9, x2, [sp], #2
2569 ldpsw x1, x2, [x10], #256
2570 ldpsw x3, x4, [x11], #-260
2571 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2572 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2
2573 // CHECK-ERROR-NEXT: ^
2574 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2575 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256
2576 // CHECK-ERROR-NEXT: ^
2577 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2578 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260
2579 // CHECK-ERROR-NEXT: ^
2581 ldp x2, x5, [sp], #4
2582 ldp x5, x6, [x9], #512
2583 stp x7, x8, [x10], #-520
2584 // CHECK-ERROR: error: expected integer multiple of 8 in range [-512, 508]
2585 // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4
2586 // CHECK-ERROR-NEXT: ^
2587 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2588 // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512
2589 // CHECK-ERROR-NEXT: ^
2590 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2591 // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520
2592 // CHECK-ERROR-NEXT: ^
2594 ldp sp, x3, [x10], #0
2595 stp x3, sp, [x9], #0
2596 // CHECK-ERROR: error: invalid operand for instruction
2597 // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0
2598 // CHECK-ERROR-NEXT: ^
2599 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2600 // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0
2601 // CHECK-ERROR-NEXT: ^
2603 stp s3, s5, [sp], #-2
2604 ldp s6, s26, [x4], #-260
2605 stp s13, s19, [x5], #256
2606 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2607 // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2
2608 // CHECK-ERROR-NEXT: ^
2609 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2610 // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260
2611 // CHECK-ERROR-NEXT: ^
2612 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2613 // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256
2614 // CHECK-ERROR-NEXT: ^
2616 ldp d3, d4, [xzr], #0
2617 ldp d5, d6, [x0], #512
2618 stp d7, d8, [x0], #-520
2619 // CHECK-ERROR: error: invalid operand for instruction
2620 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0
2621 // CHECK-ERROR-NEXT: ^
2622 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2623 // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512
2624 // CHECK-ERROR-NEXT: ^
2625 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2626 // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520
2627 // CHECK-ERROR-NEXT: ^
2629 ldp d3, q2, [sp], #0
2630 ldp q3, q5, [sp], #8
2631 stp q20, q25, [x5], #1024
2632 ldp q30, q15, [x23], #-1040
2633 // CHECK-ERROR: error: invalid operand for instruction
2634 // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0
2635 // CHECK-ERROR-NEXT: ^
2636 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2637 // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8
2638 // CHECK-ERROR-NEXT: ^
2639 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2640 // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024
2641 // CHECK-ERROR-NEXT: ^
2642 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2643 // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040
2644 // CHECK-ERROR-NEXT: ^
2646 //------------------------------------------------------------------------------
2647 // Load/store register pair (pre-indexed)
2648 //------------------------------------------------------------------------------
2650 ldp w3, w2, [x4, #1]!
2651 stp w1, w2, [x3, #253]!
2652 stp w9, w10, [x5, #256]!
2653 ldp w11, w12, [x9, #-260]!
2654 stp wsp, w9, [sp, #0]!
2655 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2656 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]!
2657 // CHECK-ERROR-NEXT: ^
2658 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2659 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]!
2660 // CHECK-ERROR-NEXT: ^
2661 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2662 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]!
2663 // CHECK-ERROR-NEXT: ^
2664 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2665 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]!
2666 // CHECK-ERROR-NEXT: ^
2667 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2668 // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]!
2669 // CHECK-ERROR-NEXT: ^
2671 ldpsw x9, x2, [sp, #2]!
2672 ldpsw x1, x2, [x10, #256]!
2673 ldpsw x3, x4, [x11, #-260]!
2674 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2675 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]!
2676 // CHECK-ERROR-NEXT: ^
2677 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2678 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]!
2679 // CHECK-ERROR-NEXT: ^
2680 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2681 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]!
2682 // CHECK-ERROR-NEXT: ^
2684 ldp x2, x5, [sp, #4]!
2685 ldp x5, x6, [x9, #512]!
2686 stp x7, x8, [x10, #-520]!
2687 // CHECK-ERROR: error: expected integer multiple of 8 in range [-512, 508]
2688 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]!
2689 // CHECK-ERROR-NEXT: ^
2690 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2691 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]!
2692 // CHECK-ERROR-NEXT: ^
2693 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2694 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]!
2695 // CHECK-ERROR-NEXT: ^
2697 ldp sp, x3, [x10, #0]!
2698 stp x3, sp, [x9, #0]!
2699 // CHECK-ERROR: error: invalid operand for instruction
2700 // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]!
2701 // CHECK-ERROR-NEXT: ^
2702 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2703 // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]!
2704 // CHECK-ERROR-NEXT: ^
2706 stp s3, s5, [sp, #-2]!
2707 ldp s6, s26, [x4, #-260]!
2708 stp s13, s19, [x5, #256]!
2709 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2710 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]!
2711 // CHECK-ERROR-NEXT: ^
2712 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2713 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]!
2714 // CHECK-ERROR-NEXT: ^
2715 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2716 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]!
2717 // CHECK-ERROR-NEXT: ^
2719 ldp d3, d4, [xzr, #0]!
2720 ldp d5, d6, [x0, #512]!
2721 stp d7, d8, [x0, #-520]!
2722 // CHECK-ERROR: error: invalid operand for instruction
2723 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]!
2724 // CHECK-ERROR-NEXT: ^
2725 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2726 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]!
2727 // CHECK-ERROR-NEXT: ^
2728 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2729 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]!
2730 // CHECK-ERROR-NEXT: ^
2732 ldp d3, q2, [sp, #0]!
2733 ldp q3, q5, [sp, #8]!
2734 stp q20, q25, [x5, #1024]!
2735 ldp q30, q15, [x23, #-1040]!
2736 // CHECK-ERROR: error: invalid operand for instruction
2737 // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]!
2738 // CHECK-ERROR-NEXT: ^
2739 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2740 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]!
2741 // CHECK-ERROR-NEXT: ^
2742 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2743 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]!
2744 // CHECK-ERROR-NEXT: ^
2745 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2746 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]!
2747 // CHECK-ERROR-NEXT: ^
2749 //------------------------------------------------------------------------------
2750 // Load/store register pair (offset)
2751 //------------------------------------------------------------------------------
2752 ldnp w3, w2, [x4, #1]
2753 stnp w1, w2, [x3, #253]
2754 stnp w9, w10, [x5, #256]
2755 ldnp w11, w12, [x9, #-260]
2757 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2758 // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1]
2759 // CHECK-ERROR-NEXT: ^
2760 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2761 // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253]
2762 // CHECK-ERROR-NEXT: ^
2763 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2764 // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256]
2765 // CHECK-ERROR-NEXT: ^
2766 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2767 // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260]
2768 // CHECK-ERROR-NEXT: ^
2769 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2770 // CHECK-ERROR-NEXT: stnp wsp, w9, [sp]
2771 // CHECK-ERROR-NEXT: ^
2773 ldnp x2, x5, [sp, #4]
2774 ldnp x5, x6, [x9, #512]
2775 stnp x7, x8, [x10, #-520]
2776 // CHECK-ERROR: error: expected integer multiple of 8 in range [-512, 508]
2777 // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4]
2778 // CHECK-ERROR-NEXT: ^
2779 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2780 // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512]
2781 // CHECK-ERROR-NEXT: ^
2782 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2783 // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520]
2784 // CHECK-ERROR-NEXT: ^
2788 // CHECK-ERROR: error: invalid operand for instruction
2789 // CHECK-ERROR-NEXT: ldnp sp, x3, [x10]
2790 // CHECK-ERROR-NEXT: ^
2791 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2792 // CHECK-ERROR-NEXT: stnp x3, sp, [x9]
2793 // CHECK-ERROR-NEXT: ^
2795 stnp s3, s5, [sp, #-2]
2796 ldnp s6, s26, [x4, #-260]
2797 stnp s13, s19, [x5, #256]
2798 // CHECK-ERROR: error: expected integer multiple of 4 in range [-256, 252]
2799 // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2]
2800 // CHECK-ERROR-NEXT: ^
2801 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2802 // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260]
2803 // CHECK-ERROR-NEXT: ^
2804 // CHECK-ERROR-NEXT: error: expected integer multiple of 4 in range [-256, 252]
2805 // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256]
2806 // CHECK-ERROR-NEXT: ^
2809 ldnp d5, d6, [x0, #512]
2810 stnp d7, d8, [x0, #-520]
2811 // CHECK-ERROR: error: invalid operand for instruction
2812 // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr]
2813 // CHECK-ERROR-NEXT: ^
2814 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2815 // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512]
2816 // CHECK-ERROR-NEXT: ^
2817 // CHECK-ERROR-NEXT: error: expected integer multiple of 8 in range [-512, 508]
2818 // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520]
2819 // CHECK-ERROR-NEXT: ^
2822 ldnp q3, q5, [sp, #8]
2823 stnp q20, q25, [x5, #1024]
2824 ldnp q30, q15, [x23, #-1040]
2825 // CHECK-ERROR: error: invalid operand for instruction
2826 // CHECK-ERROR-NEXT: ldnp d3, q2, [sp]
2827 // CHECK-ERROR-NEXT: ^
2828 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2829 // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8]
2830 // CHECK-ERROR-NEXT: ^
2831 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2832 // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024]
2833 // CHECK-ERROR-NEXT: ^
2834 // CHECK-ERROR-NEXT: error: expected integer multiple of 16 in range [-1024, 1016]
2835 // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040]
2836 // CHECK-ERROR-NEXT: ^
2838 //------------------------------------------------------------------------------
2839 // Logical (shifted register)
2840 //------------------------------------------------------------------------------
2841 orr w0, w1, #0xffffffff
2842 and x3, x5, #0xffffffffffffffff
2843 // CHECK-ERROR: error: expected compatible register or logical immediate
2844 // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff
2845 // CHECK-ERROR-NEXT: ^
2846 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2847 // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff
2848 // CHECK-ERROR-NEXT: ^
2852 // CHECK-ERROR: error: expected compatible register or logical immediate
2853 // CHECK-ERROR-NEXT: ands w3, w9, #0x0
2854 // CHECK-ERROR-NEXT: ^
2855 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2856 // CHECK-ERROR-NEXT: eor x2, x0, #0x0
2857 // CHECK-ERROR-NEXT: ^
2860 eor x9, x20, #0x1234
2861 // CHECK-ERROR: error: expected compatible register or logical immediate
2862 // CHECK-ERROR-NEXT: eor w3, w5, #0x83
2863 // CHECK-ERROR-NEXT: ^
2864 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2865 // CHECK-ERROR-NEXT: eor x9, x20, #0x1234
2866 // CHECK-ERROR-NEXT: ^
2868 and wzr, w4, 0xffff0000
2869 eor xzr, x9, #0xffff0000ffff0000
2870 // CHECK-ERROR: error: invalid operand for instruction
2871 // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000
2872 // CHECK-ERROR-NEXT: ^
2873 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2874 // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000
2875 // CHECK-ERROR-NEXT: ^
2877 orr w3, wsp, #0xf0f0f0f0
2878 ands x3, sp, #0xaaaaaaaaaaaaaaaa
2879 // CHECK-ERROR: error: invalid operand for instruction
2880 // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0
2881 // CHECK-ERROR-NEXT: ^
2882 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2883 // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa
2884 // CHECK-ERROR-NEXT: ^
2886 tst sp, #0xe0e0e0e0e0e0e0e0
2887 // CHECK-ERROR: error: invalid operand for instruction
2888 // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0
2889 // CHECK-ERROR-NEXT: ^
2891 // movi has been removed from the specification. Make sure it's really gone.
2892 movi wzr, #0x44444444
2894 movi x9, #0x0000ffff00000000
2895 // CHECK-ERROR: error: invalid operand for instruction
2896 // CHECK-ERROR-NEXT: movi wzr, #0x44444444
2897 // CHECK-ERROR-NEXT: ^
2898 // CHECK-ERROR: error: invalid operand for instruction
2899 // CHECK-ERROR-NEXT: movi w3, #0xffff
2900 // CHECK-ERROR-NEXT: ^
2901 // CHECK-ERROR: error: invalid operand for instruction
2902 // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000
2903 // CHECK-ERROR-NEXT: ^
2905 //------------------------------------------------------------------------------
2906 // Logical (shifted register)
2907 //------------------------------------------------------------------------------
2909 //// Out of range shifts
2910 and w2, w24, w6, lsl #-1
2911 and w4, w6, w12, lsl #32
2912 and x4, x6, x12, lsl #64
2913 and x2, x5, x11, asr
2914 // CHECK-ERROR: error: expected integer shift amount
2915 // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1
2916 // CHECK-ERROR-NEXT: ^
2917 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
2918 // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32
2919 // CHECK-ERROR-NEXT: ^
2920 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
2921 // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64
2922 // CHECK-ERROR-NEXT: ^
2923 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2924 // CHECK-ERROR-NEXT: and x2, x5, x11, asr
2925 // CHECK-ERROR-NEXT: ^
2929 bics x20, sp, x9, lsr #0
2930 orn x2, x6, sp, lsl #3
2931 // CHECK-ERROR: error: invalid operand for instruction
2932 // CHECK-ERROR-NEXT: orn wsp, w3, w5
2933 // CHECK-ERROR-NEXT: ^
2934 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2935 // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0
2936 // CHECK-ERROR-NEXT: ^
2937 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2938 // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3
2939 // CHECK-ERROR-NEXT: ^
2941 //// Mismatched registers
2944 and x4, x5, w6, lsl #12
2945 orr w2, w5, x7, asr #0
2946 // CHECK-ERROR: error: invalid operand for instruction
2947 // CHECK-ERROR-NEXT: and x3, w2, w1
2948 // CHECK-ERROR-NEXT: ^
2949 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2950 // CHECK-ERROR-NEXT: ands w1, x12, w2
2951 // CHECK-ERROR-NEXT: ^
2952 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2953 // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12
2954 // CHECK-ERROR-NEXT: ^
2955 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2956 // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0
2957 // CHECK-ERROR-NEXT: ^
2959 //// Shifts should not be allowed on mov
2961 // CHECK-ERROR: error: invalid operand for instruction
2962 // CHECK-ERROR-NEXT: mov w3, w7, lsl #13
2963 // CHECK-ERROR-NEXT: ^
2965 //------------------------------------------------------------------------------
2966 // Move wide (immediate)
2967 //------------------------------------------------------------------------------
2969 movz w3, #65536, lsl #0
2972 movk w3, #0, lsl #-1
2973 movn w2, #-1, lsl #0
2975 movk w3, #1, lsl #32
2976 movn x2, #12, lsl #64
2977 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
2978 // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0
2979 // CHECK-ERROR-NEXT: ^
2980 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2981 // CHECK-ERROR-NEXT: movz w4, #65536
2982 // CHECK-ERROR-NEXT: ^
2983 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2984 // CHECK-ERROR-NEXT: movn w1, #2, lsl #1
2985 // CHECK-ERROR-NEXT: ^
2986 // CHECK-ERROR-NEXT: error: only 'lsl #+N' valid after immediate
2987 // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1
2988 // CHECK-ERROR-NEXT: ^
2989 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2990 // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0
2991 // CHECK-ERROR-NEXT: ^
2992 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2993 // CHECK-ERROR-NEXT: movz x3, #-1
2994 // CHECK-ERROR-NEXT: ^
2995 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2996 // CHECK-ERROR-NEXT: movk w3, #1, lsl #32
2997 // CHECK-ERROR-NEXT: ^
2998 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
2999 // CHECK-ERROR-NEXT: movn x2, #12, lsl #64
3000 // CHECK-ERROR-NEXT: ^
3002 movz x12, #:abs_g0:sym, lsl #16
3003 movz x12, #:abs_g0:sym, lsl #0
3004 movn x2, #:abs_g0:sym
3005 movk w3, #:abs_g0:sym
3006 movz x3, #:abs_g0_nc:sym
3007 movn x4, #:abs_g0_nc:sym
3008 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3009 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16
3010 // CHECK-ERROR-NEXT: ^
3011 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3012 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0
3013 // CHECK-ERROR-NEXT: ^
3014 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3015 // CHECK-ERROR-NEXT: movn x2, #:abs_g0:sym
3016 // CHECK-ERROR-NEXT: ^
3017 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3018 // CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym
3019 // CHECK-ERROR-NEXT: ^
3020 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3021 // CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym
3022 // CHECK-ERROR-NEXT: ^
3023 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3024 // CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym
3025 // CHECK-ERROR-NEXT: ^
3027 movn x2, #:abs_g1:sym
3028 movk w3, #:abs_g1:sym
3029 movz x3, #:abs_g1_nc:sym
3030 movn x4, #:abs_g1_nc:sym
3031 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3032 // CHECK-ERROR-NEXT: movn x2, #:abs_g1:sym
3033 // CHECK-ERROR-NEXT: ^
3034 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3035 // CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym
3036 // CHECK-ERROR-NEXT: ^
3037 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3038 // CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym
3039 // CHECK-ERROR-NEXT: ^
3040 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3041 // CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym
3042 // CHECK-ERROR-NEXT: ^
3044 movz w12, #:abs_g2:sym
3045 movn x12, #:abs_g2:sym
3046 movk x13, #:abs_g2:sym
3047 movk w3, #:abs_g2_nc:sym
3048 movz x13, #:abs_g2_nc:sym
3049 movn x24, #:abs_g2_nc:sym
3050 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3051 // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym
3052 // CHECK-ERROR-NEXT: ^
3053 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3054 // CHECK-ERROR-NEXT: movn x12, #:abs_g2:sym
3055 // CHECK-ERROR-NEXT: ^
3056 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3057 // CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym
3058 // CHECK-ERROR-NEXT: ^
3059 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3060 // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym
3061 // CHECK-ERROR-NEXT: ^
3062 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3063 // CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym
3064 // CHECK-ERROR-NEXT: ^
3065 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3066 // CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym
3067 // CHECK-ERROR-NEXT: ^
3069 movn x19, #:abs_g3:sym
3070 movz w20, #:abs_g3:sym
3071 movk w21, #:abs_g3:sym
3072 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3073 // CHECK-ERROR-NEXT: movn x19, #:abs_g3:sym
3074 // CHECK-ERROR-NEXT: ^
3075 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3076 // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym
3077 // CHECK-ERROR-NEXT: ^
3078 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3079 // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym
3080 // CHECK-ERROR-NEXT: ^
3082 movk x19, #:abs_g0_s:sym
3083 movk w23, #:abs_g0_s:sym
3084 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3085 // CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym
3086 // CHECK-ERROR-NEXT: ^
3087 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3088 // CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym
3089 // CHECK-ERROR-NEXT: ^
3091 movk x19, #:abs_g1_s:sym
3092 movk w23, #:abs_g1_s:sym
3093 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3094 // CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym
3095 // CHECK-ERROR-NEXT: ^
3096 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3097 // CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym
3098 // CHECK-ERROR-NEXT: ^
3100 movz w2, #:abs_g2_s:sym
3101 movn w29, #:abs_g2_s:sym
3102 movk x19, #:abs_g2_s:sym
3103 movk w23, #:abs_g2_s:sym
3104 // CHECK-ERROR: error: expected relocated symbol or integer in range [0, 65535]
3105 // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym
3106 // CHECK-ERROR-NEXT: ^
3107 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3108 // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym
3109 // CHECK-ERROR-NEXT: ^
3110 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3111 // CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym
3112 // CHECK-ERROR-NEXT: ^
3113 // CHECK-ERROR-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3114 // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym
3115 // CHECK-ERROR-NEXT: ^
3117 //------------------------------------------------------------------------------
3118 // PC-relative addressing
3119 //------------------------------------------------------------------------------
3121 adr sp, loc // expects xzr
3122 adrp x3, #20 // Immediate unaligned
3123 adrp w2, loc // 64-bit register needed
3124 // CHECK-ERROR: error: invalid operand for instruction
3125 // CHECK-ERROR-NEXT: adr sp, loc
3126 // CHECK-ERROR-NEXT: ^
3127 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3128 // CHECK-ERROR-NEXT: adrp x3, #20
3129 // CHECK-ERROR-NEXT: ^
3130 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3131 // CHECK-ERROR-NEXT: adrp w2, loc
3132 // CHECK-ERROR-NEXT: ^
3136 adrp x9, #4294967296
3137 adrp x20, #-4294971392
3138 // CHECK-ERROR: error: expected label or encodable integer pc offset
3139 // CHECK-ERROR-NEXT: adr x9, #1048576
3140 // CHECK-ERROR-NEXT: ^
3141 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3142 // CHECK-ERROR-NEXT: adr x2, #-1048577
3143 // CHECK-ERROR-NEXT: ^
3144 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3145 // CHECK-ERROR-NEXT: adrp x9, #4294967296
3146 // CHECK-ERROR-NEXT: ^
3147 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3148 // CHECK-ERROR-NEXT: adrp x20, #-4294971392
3149 // CHECK-ERROR-NEXT: ^
3151 //------------------------------------------------------------------------------
3153 //------------------------------------------------------------------------------
3157 // CHECK-ERROR: error: expected integer in range [0, 127]
3158 // CHECK-ERROR-NEXT: hint #-1
3159 // CHECK-ERROR-NEXT: ^
3160 // CHECK-ERROR-NEXT: error: expected integer in range [0, 127]
3161 // CHECK-ERROR-NEXT: hint #128
3162 // CHECK-ERROR-NEXT: ^
3166 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
3167 // CHECK-ERROR-NEXT: clrex #-1
3168 // CHECK-ERROR-NEXT: ^
3169 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
3170 // CHECK-ERROR-NEXT: clrex #16
3171 // CHECK-ERROR-NEXT: ^
3177 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3178 // CHECK-ERROR-NEXT: dsb #-1
3179 // CHECK-ERROR-NEXT: ^
3180 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3181 // CHECK-ERROR-NEXT: dsb #16
3182 // CHECK-ERROR-NEXT: ^
3183 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3184 // CHECK-ERROR-NEXT: dmb #-1
3185 // CHECK-ERROR-NEXT: ^
3186 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3187 // CHECK-ERROR-NEXT: dmb #16
3188 // CHECK-ERROR-NEXT: ^
3192 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3193 // CHECK-ERROR-NEXT: isb #-1
3194 // CHECK-ERROR-NEXT: ^
3195 // CHECK-ERROR-NEXT: error: Invalid immediate for instruction
3196 // CHECK-ERROR-NEXT: isb #16
3197 // CHECK-ERROR-NEXT: ^
3203 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
3204 // CHECK-ERROR-NEXT: msr daifset, x4
3205 // CHECK-ERROR-NEXT: ^
3206 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
3207 // CHECK-ERROR-NEXT: msr spsel, #-1
3208 // CHECK-ERROR-NEXT: ^
3209 // CHECK-ERROR-NEXT: error: expected comma before next operand
3210 // CHECK-ERROR-NEXT: msr spsel #-1
3211 // CHECK-ERROR-NEXT: ^
3212 // CHECK-ERROR-NEXT: error: expected integer in range [0, 15]
3213 // CHECK-ERROR-NEXT: msr daifclr, #16
3214 // CHECK-ERROR-NEXT: ^
3216 sys #8, c1, c2, #7, x9
3217 sys #3, c16, c2, #3, x10
3218 sys #2, c11, c16, #5
3219 sys #4, c9, c8, #8, xzr
3220 sysl x11, #8, c1, c2, #7
3221 sysl x13, #3, c16, c2, #3
3222 sysl x9, #2, c11, c16, #5
3223 sysl x4, #4, c9, c8, #8
3224 // CHECK-ERROR-NEXT: error: expected integer in range [0, 7]
3225 // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9
3226 // CHECK-ERROR-NEXT: ^
3227 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3228 // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10
3229 // CHECK-ERROR-NEXT: ^
3230 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3231 // CHECK-ERROR-NEXT: sys #2, c11, c16, #5
3232 // CHECK-ERROR-NEXT: ^
3233 // CHECK-ERROR-NEXT: error: expected integer in range [0, 7]
3234 // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr
3235 // CHECK-ERROR-NEXT: ^
3236 // CHECK-ERROR-NEXT: error: expected integer in range [0, 7]
3237 // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7
3238 // CHECK-ERROR-NEXT: ^
3239 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3240 // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3
3241 // CHECK-ERROR-NEXT: ^
3242 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3243 // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5
3244 // CHECK-ERROR-NEXT: ^
3245 // CHECK-ERROR-NEXT: error: expected integer in range [0, 7]
3246 // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8
3247 // CHECK-ERROR-NEXT: ^
3252 // CHECK-ERROR-NEXT: error: specified IC op does not use a register
3253 // CHECK-ERROR-NEXT: ic ialluis, x2
3254 // CHECK-ERROR-NEXT: ^
3255 // CHECK-ERROR-NEXT: error: operand specifier not recognised
3256 // CHECK-ERROR-NEXT: ic allu, x7
3257 // CHECK-ERROR-NEXT: ^
3258 // CHECK-ERROR-NEXT: error: specified IC op requires a register
3259 // CHECK-ERROR-NEXT: ic ivau
3260 // CHECK-ERROR-NEXT: ^
3276 tlbi VMALLS12E1IS, xzr
3292 tlbi VMALLS12E1, x15
3294 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3295 // CHECK-ERROR-NEXT: tlbi IPAS2E1IS
3296 // CHECK-ERROR-NEXT: ^
3297 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3298 // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS
3299 // CHECK-ERROR-NEXT: ^
3300 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3301 // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12
3302 // CHECK-ERROR-NEXT: ^
3303 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3304 // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11
3305 // CHECK-ERROR-NEXT: ^
3306 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3307 // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20
3308 // CHECK-ERROR-NEXT: ^
3309 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3310 // CHECK-ERROR-NEXT: tlbi VAE1IS
3311 // CHECK-ERROR-NEXT: ^
3312 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3313 // CHECK-ERROR-NEXT: tlbi VAE2IS
3314 // CHECK-ERROR-NEXT: ^
3315 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3316 // CHECK-ERROR-NEXT: tlbi VAE3IS
3317 // CHECK-ERROR-NEXT: ^
3318 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3319 // CHECK-ERROR-NEXT: tlbi ASIDE1IS
3320 // CHECK-ERROR-NEXT: ^
3321 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3322 // CHECK-ERROR-NEXT: tlbi VAAE1IS
3323 // CHECK-ERROR-NEXT: ^
3324 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3325 // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0
3326 // CHECK-ERROR-NEXT: ^
3327 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3328 // CHECK-ERROR-NEXT: tlbi VALE1IS
3329 // CHECK-ERROR-NEXT: ^
3330 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3331 // CHECK-ERROR-NEXT: tlbi VALE2IS
3332 // CHECK-ERROR-NEXT: ^
3333 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3334 // CHECK-ERROR-NEXT: tlbi VALE3IS
3335 // CHECK-ERROR-NEXT: ^
3336 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3337 // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr
3338 // CHECK-ERROR-NEXT: ^
3339 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3340 // CHECK-ERROR-NEXT: tlbi VAALE1IS
3341 // CHECK-ERROR-NEXT: ^
3342 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3343 // CHECK-ERROR-NEXT: tlbi IPAS2E1
3344 // CHECK-ERROR-NEXT: ^
3345 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3346 // CHECK-ERROR-NEXT: tlbi IPAS2LE1
3347 // CHECK-ERROR-NEXT: ^
3348 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3349 // CHECK-ERROR-NEXT: tlbi VMALLE1, x9
3350 // CHECK-ERROR-NEXT: ^
3351 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3352 // CHECK-ERROR-NEXT: tlbi ALLE2, x10
3353 // CHECK-ERROR-NEXT: ^
3354 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3355 // CHECK-ERROR-NEXT: tlbi ALLE3, x11
3356 // CHECK-ERROR-NEXT: ^
3357 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3358 // CHECK-ERROR-NEXT: tlbi VAE1
3359 // CHECK-ERROR-NEXT: ^
3360 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3361 // CHECK-ERROR-NEXT: tlbi VAE2
3362 // CHECK-ERROR-NEXT: ^
3363 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3364 // CHECK-ERROR-NEXT: tlbi VAE3
3365 // CHECK-ERROR-NEXT: ^
3366 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3367 // CHECK-ERROR-NEXT: tlbi ASIDE1
3368 // CHECK-ERROR-NEXT: ^
3369 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3370 // CHECK-ERROR-NEXT: tlbi VAAE1
3371 // CHECK-ERROR-NEXT: ^
3372 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3373 // CHECK-ERROR-NEXT: tlbi ALLE1, x25
3374 // CHECK-ERROR-NEXT: ^
3375 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3376 // CHECK-ERROR-NEXT: tlbi VALE1
3377 // CHECK-ERROR-NEXT: ^
3378 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3379 // CHECK-ERROR-NEXT: tlbi VALE2
3380 // CHECK-ERROR-NEXT: ^
3381 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3382 // CHECK-ERROR-NEXT: tlbi VALE3
3383 // CHECK-ERROR-NEXT: ^
3384 // CHECK-ERROR-NEXT: error: specified TLBI op does not use a register
3385 // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15
3386 // CHECK-ERROR-NEXT: ^
3387 // CHECK-ERROR-NEXT: error: specified TLBI op requires a register
3388 // CHECK-ERROR-NEXT: tlbi VAALE1
3389 // CHECK-ERROR-NEXT: ^
3391 // For the MSR/MRS instructions, first make sure read-only and
3392 // write-only registers actually are.
3394 msr DBGDTRRX_EL0, x12
3397 msr DBGAUTHSTATUS_EL1, x12
3406 msr ID_PFR0_EL1, x12
3407 msr ID_PFR1_EL1, x12
3408 msr ID_DFR0_EL1, x12
3409 msr ID_AFR0_EL1, x12
3410 msr ID_MMFR0_EL1, x12
3411 msr ID_MMFR1_EL1, x12
3412 msr ID_MMFR2_EL1, x12
3413 msr ID_MMFR3_EL1, x12
3414 msr ID_ISAR0_EL1, x12
3415 msr ID_ISAR1_EL1, x12
3416 msr ID_ISAR2_EL1, x12
3417 msr ID_ISAR3_EL1, x12
3418 msr ID_ISAR4_EL1, x12
3419 msr ID_ISAR5_EL1, x12
3423 msr ID_AA64PFR0_EL1, x12
3424 msr ID_AA64PFR1_EL1, x12
3425 msr ID_AA64DFR0_EL1, x12
3426 msr ID_AA64DFR1_EL1, x12
3427 msr ID_AA64AFR0_EL1, x12
3428 msr ID_AA64AFR1_EL1, x12
3429 msr ID_AA64ISAR0_EL1, x12
3430 msr ID_AA64ISAR1_EL1, x12
3431 msr ID_AA64MMFR0_EL1, x12
3432 msr ID_AA64MMFR1_EL1, x12
3433 msr PMCEID0_EL0, x12
3434 msr PMCEID1_EL0, x12
3441 msr PMEVCNTR31_EL0, x12
3442 msr PMEVTYPER31_EL0, x12
3443 // CHECK-ERROR: error: expected writable system register or pstate
3444 // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12
3445 // CHECK-ERROR-NEXT: ^
3446 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3447 // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12
3448 // CHECK-ERROR-NEXT: ^
3449 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3450 // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12
3451 // CHECK-ERROR-NEXT: ^
3452 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3453 // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12
3454 // CHECK-ERROR-NEXT: ^
3455 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3456 // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12
3457 // CHECK-ERROR-NEXT: ^
3458 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3459 // CHECK-ERROR-NEXT: msr MIDR_EL1, x12
3460 // CHECK-ERROR-NEXT: ^
3461 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3462 // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12
3463 // CHECK-ERROR-NEXT: ^
3464 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3465 // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12
3466 // CHECK-ERROR-NEXT: ^
3467 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3468 // CHECK-ERROR-NEXT: msr CTR_EL0, x12
3469 // CHECK-ERROR-NEXT: ^
3470 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3471 // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12
3472 // CHECK-ERROR-NEXT: ^
3473 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3474 // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12
3475 // CHECK-ERROR-NEXT: ^
3476 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3477 // CHECK-ERROR-NEXT: msr AIDR_EL1, x12
3478 // CHECK-ERROR-NEXT: ^
3479 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3480 // CHECK-ERROR-NEXT: msr DCZID_EL0, x12
3481 // CHECK-ERROR-NEXT: ^
3482 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3483 // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12
3484 // CHECK-ERROR-NEXT: ^
3485 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3486 // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12
3487 // CHECK-ERROR-NEXT: ^
3488 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3489 // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12
3490 // CHECK-ERROR-NEXT: ^
3491 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3492 // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12
3493 // CHECK-ERROR-NEXT: ^
3494 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3495 // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12
3496 // CHECK-ERROR-NEXT: ^
3497 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3498 // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12
3499 // CHECK-ERROR-NEXT: ^
3500 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3501 // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12
3502 // CHECK-ERROR-NEXT: ^
3503 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3504 // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12
3505 // CHECK-ERROR-NEXT: ^
3506 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3507 // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12
3508 // CHECK-ERROR-NEXT: ^
3509 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3510 // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12
3511 // CHECK-ERROR-NEXT: ^
3512 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3513 // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12
3514 // CHECK-ERROR-NEXT: ^
3515 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3516 // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12
3517 // CHECK-ERROR-NEXT: ^
3518 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3519 // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12
3520 // CHECK-ERROR-NEXT: ^
3521 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3522 // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12
3523 // CHECK-ERROR-NEXT: ^
3524 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3525 // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12
3526 // CHECK-ERROR-NEXT: ^
3527 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3528 // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12
3529 // CHECK-ERROR-NEXT: ^
3530 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3531 // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12
3532 // CHECK-ERROR-NEXT: ^
3533 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3534 // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12
3535 // CHECK-ERROR-NEXT: ^
3536 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3537 // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12
3538 // CHECK-ERROR-NEXT: ^
3539 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3540 // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12
3541 // CHECK-ERROR-NEXT: ^
3542 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3543 // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12
3544 // CHECK-ERROR-NEXT: ^
3545 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3546 // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12
3547 // CHECK-ERROR-NEXT: ^
3548 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3549 // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12
3550 // CHECK-ERROR-NEXT: ^
3551 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3552 // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12
3553 // CHECK-ERROR-NEXT: ^
3554 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3555 // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12
3556 // CHECK-ERROR-NEXT: ^
3557 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3558 // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12
3559 // CHECK-ERROR-NEXT: ^
3560 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3561 // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12
3562 // CHECK-ERROR-NEXT: ^
3563 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3564 // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12
3565 // CHECK-ERROR-NEXT: ^
3566 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3567 // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12
3568 // CHECK-ERROR-NEXT: ^
3569 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3570 // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12
3571 // CHECK-ERROR-NEXT: ^
3572 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3573 // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12
3574 // CHECK-ERROR-NEXT: ^
3575 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3576 // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12
3577 // CHECK-ERROR-NEXT: ^
3578 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3579 // CHECK-ERROR-NEXT: msr ISR_EL1, x12
3580 // CHECK-ERROR-NEXT: ^
3581 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3582 // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12
3583 // CHECK-ERROR-NEXT: ^
3584 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3585 // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12
3586 // CHECK-ERROR-NEXT: ^
3587 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3588 // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12
3589 // CHECK-ERROR-NEXT: ^
3590 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3591 // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12
3592 // CHECK-ERROR-NEXT: ^
3594 mrs x9, DBGDTRTX_EL0
3597 mrs x9, PMEVCNTR31_EL0
3598 mrs x9, PMEVTYPER31_EL0
3599 // CHECK-ERROR: error: expected readable system register
3600 // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0
3601 // CHECK-ERROR-NEXT: ^
3602 // CHECK-ERROR-NEXT: error: expected readable system register
3603 // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1
3604 // CHECK-ERROR-NEXT: ^
3605 // CHECK-ERROR-NEXT: error: expected readable system register
3606 // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0
3607 // CHECK-ERROR-NEXT: ^
3608 // CHECK-ERROR-NEXT: error: expected readable system register
3609 // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0
3610 // CHECK-ERROR-NEXT: ^
3611 // CHECK-ERROR-NEXT: error: expected readable system register
3612 // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0
3613 // CHECK-ERROR-NEXT: ^
3615 // Now check some invalid generic names
3616 mrs xzr, s2_5_c11_c13_2
3617 mrs x12, s3_8_c11_c13_2
3618 mrs x13, s3_3_c12_c13_2
3619 mrs x19, s3_2_c15_c16_2
3620 mrs x30, s3_2_c15_c1_8
3621 // CHECK-ERROR-NEXT: error: expected readable system register
3622 // CHECK-ERROR-NEXT: mrs xzr, s2_5_c11_c13_2
3623 // CHECK-ERROR-NEXT: ^
3624 // CHECK-ERROR-NEXT: error: expected readable system register
3625 // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2
3626 // CHECK-ERROR-NEXT: ^
3627 // CHECK-ERROR-NEXT: error: expected readable system register
3628 // CHECK-ERROR-NEXT: mrs x13, s3_3_c12_c13_2
3629 // CHECK-ERROR-NEXT: ^
3630 // CHECK-ERROR-NEXT: error: expected readable system register
3631 // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2
3632 // CHECK-ERROR-NEXT: ^
3633 // CHECK-ERROR-NEXT: error: expected readable system register
3634 // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8
3635 // CHECK-ERROR-NEXT: ^
3637 //------------------------------------------------------------------------------
3638 // Test and branch (immediate)
3639 //------------------------------------------------------------------------------
3642 tbz w3, #32, nowhere
3645 // CHECK-ERROR: error: expected integer in range [0, 31]
3646 // CHECK-ERROR-NEXT: tbz w3, #-1, addr
3647 // CHECK-ERROR-NEXT: ^
3648 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
3649 // CHECK-ERROR-NEXT: tbz w3, #32, nowhere
3650 // CHECK-ERROR-NEXT: ^
3651 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
3652 // CHECK-ERROR-NEXT: tbz x9, #-1, there
3653 // CHECK-ERROR-NEXT: ^
3654 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
3655 // CHECK-ERROR-NEXT: tbz x20, #64, dont
3656 // CHECK-ERROR-NEXT: ^
3659 tbnz w3, #32, nowhere
3662 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
3663 // CHECK-ERROR-NEXT: tbnz w3, #-1, addr
3664 // CHECK-ERROR-NEXT: ^
3665 // CHECK-ERROR-NEXT: error: expected integer in range [0, 31]
3666 // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere
3667 // CHECK-ERROR-NEXT: ^
3668 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
3669 // CHECK-ERROR-NEXT: tbnz x9, #-1, there
3670 // CHECK-ERROR-NEXT: ^
3671 // CHECK-ERROR-NEXT: error: expected integer in range [0, 63]
3672 // CHECK-ERROR-NEXT: tbnz x20, #64, dont
3674 //------------------------------------------------------------------------------
3675 // Unconditional branch (immediate)
3676 //------------------------------------------------------------------------------
3681 // CHECK-ERROR: error: expected label or encodable integer pc offset
3682 // CHECK-ERROR-NEXT: b #134217728
3683 // CHECK-ERROR-NEXT: ^
3684 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3685 // CHECK-ERROR-NEXT: b #-134217732
3686 // CHECK-ERROR-NEXT: ^
3687 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3688 // CHECK-ERROR-NEXT: b #1
3689 // CHECK-ERROR-NEXT: ^
3691 //------------------------------------------------------------------------------
3692 // Unconditional branch (register)
3693 //------------------------------------------------------------------------------
3697 // CHECK-ERROR: error: invalid operand for instruction
3698 // CHECK-ERROR-NEXT: br w2
3699 // CHECK-ERROR-NEXT: ^
3700 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3701 // CHECK-ERROR-NEXT: br sp
3702 // CHECK-ERROR-NEXT: ^
3704 //// These ones shouldn't allow any registers
3707 // CHECK-ERROR: error: invalid operand for instruction
3708 // CHECK-ERROR-NEXT: eret x2
3709 // CHECK-ERROR-NEXT: ^
3710 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3711 // CHECK-ERROR-NEXT: drps x2
3712 // CHECK-ERROR-NEXT: ^