1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
2 // RUN: FileCheck --check-prefix=CHECK-ERROR --check-prefix=CHECK-ERROR-ARM64 < %t %s
4 //------------------------------------------------------------------------------
5 // Add/sub (extended register)
6 //------------------------------------------------------------------------------
8 // Mismatched final register and extend
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-AARCH64-NEXT: error: expected compatible register, symbol or integer in range [0, 4095]
87 // CHECK-ERROR-AARCH64-NEXT: add w5, w6, #0x1000
88 // CHECK-ERROR-AARCH64-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-AARCH64: error: expected compatible register, symbol or integer in range [0, 4095]
145 // CHECK-ERROR-AARCH64-NEXT: adds w0, w5, #0x10000
146 // CHECK-ERROR-AARCH64-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|immediate must be an}} integer in range [0, 63]
754 // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0
755 // CHECK-ERROR-NEXT: ^
756 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} 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|immediate must be an}} integer in range [0, 31]
765 // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1
766 // CHECK-ERROR-NEXT: ^
767 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
768 // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32
769 // CHECK-ERROR-NEXT: ^
770 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
771 // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0
772 // CHECK-ERROR-NEXT: ^
773 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} 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|immediate must be an}} integer in range [0, 31]
782 // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1
783 // CHECK-ERROR-NEXT: ^
784 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
785 // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32
786 // CHECK-ERROR-NEXT: ^
787 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
788 // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0
789 // CHECK-ERROR-NEXT: ^
790 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} 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|immediate must be an}} integer in range [0, 31]
799 // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1
800 // CHECK-ERROR-NEXT: ^
801 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
802 // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32
803 // CHECK-ERROR-NEXT: ^
804 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
805 // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0
806 // CHECK-ERROR-NEXT: ^
807 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
808 // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64
809 // CHECK-ERROR-NEXT: ^
814 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
815 // CHECK-ERROR-AARCH64-NEXT: sxtb x3, x2
816 // CHECK-ERROR-AARCH64-NEXT: ^
817 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
818 // CHECK-ERROR-AARCH64-NEXT: sxth xzr, xzr
819 // CHECK-ERROR-AARCH64-NEXT: ^
820 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
821 // CHECK-ERROR-AARCH64-NEXT: sxtw x3, x5
822 // CHECK-ERROR-AARCH64-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-AARCH64-NEXT: error: invalid instruction
836 // CHECK-ERROR-AARCH64-NEXT: uxtw x3, x5
837 // CHECK-ERROR-AARCH64-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|immediate must be an}} integer in range [0, 63]
857 // CHECK-ERROR-NEXT: asr x25, x26, #-1
858 // CHECK-ERROR-NEXT: ^
859 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
860 // CHECK-ERROR-NEXT: asr x25, x26, #64
861 // CHECK-ERROR-NEXT: ^
862 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} 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, #10, #8
874 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
875 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
876 // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0
877 // CHECK-ERROR-NEXT: ^
878 // CHECK-ERROR-NEXT: error: invalid operand for instruction
879 // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1
880 // CHECK-ERROR-NEXT: ^
881 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
882 // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1
883 // CHECK-ERROR-NEXT: ^
884 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
885 // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0
886 // CHECK-ERROR-NEXT: ^
887 // CHECK-ERROR-NEXT: error: requested insert overflows register
888 // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23
889 // CHECK-ERROR-NEXT: ^
890 // CHECK-ERROR-NEXT: error: requested insert overflows register
891 // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53
892 // CHECK-ERROR-NEXT: ^
893 // CHECK-ERROR-NEXT: error: invalid operand for instruction
894 // CHECK-ERROR-NEXT: sbfiz sp, x3, #7, #6
895 // CHECK-ERROR-NEXT: ^
896 // CHECK-ERROR-NEXT: error: invalid operand for instruction
897 // CHECK-ERROR-NEXT: sbfiz w3, wsp, #10, #8
898 // CHECK-ERROR-NEXT: ^
902 sbfx w9, w10, #32, #1
903 sbfx w11, w12, #32, #0
904 sbfx w9, w10, #10, #23
905 sbfx x3, x5, #12, #53
907 sbfx w3, wsp, #10, #8
908 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
909 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
910 // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0
911 // CHECK-ERROR-NEXT: ^
912 // CHECK-ERROR-NEXT: error: invalid operand for instruction
913 // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1
914 // CHECK-ERROR-NEXT: ^
915 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
916 // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1
917 // CHECK-ERROR-NEXT: ^
918 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
919 // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0
920 // CHECK-ERROR-NEXT: ^
921 // CHECK-ERROR-NEXT: error: requested extract overflows register
922 // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23
923 // CHECK-ERROR-NEXT: ^
924 // CHECK-ERROR-NEXT: error: requested extract overflows register
925 // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53
926 // CHECK-ERROR-NEXT: ^
927 // CHECK-ERROR-NEXT: error: invalid operand for instruction
928 // CHECK-ERROR-NEXT: sbfx sp, x3, #7, #6
929 // CHECK-ERROR-NEXT: ^
930 // CHECK-ERROR-NEXT: error: invalid operand for instruction
931 // CHECK-ERROR-NEXT: sbfx w3, wsp, #10, #8
932 // CHECK-ERROR-NEXT: ^
937 bfi w11, w12, #32, #0
938 bfi w9, w10, #10, #23
942 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
943 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
944 // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0
945 // CHECK-ERROR-NEXT: ^
946 // CHECK-ERROR-NEXT: error: invalid operand for instruction
947 // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1
948 // CHECK-ERROR-NEXT: ^
949 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
950 // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1
951 // CHECK-ERROR-NEXT: ^
952 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
953 // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0
954 // CHECK-ERROR-NEXT: ^
955 // CHECK-ERROR-NEXT: error: requested insert overflows register
956 // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23
957 // CHECK-ERROR-NEXT: ^
958 // CHECK-ERROR-NEXT: error: requested insert overflows register
959 // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53
960 // CHECK-ERROR-NEXT: ^
961 // CHECK-ERROR-NEXT: error: invalid operand for instruction
962 // CHECK-ERROR-NEXT: bfi sp, x3, #7, #6
963 // CHECK-ERROR-NEXT: ^
964 // CHECK-ERROR-NEXT: error: invalid operand for instruction
965 // CHECK-ERROR-NEXT: bfi w3, wsp, #10, #8
966 // CHECK-ERROR-NEXT: ^
969 bfxil wsp, w9, #0, #1
970 bfxil w9, w10, #32, #1
971 bfxil w11, w12, #32, #0
972 bfxil w9, w10, #10, #23
973 bfxil x3, x5, #12, #53
975 bfxil w3, wsp, #10, #8
976 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
977 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
978 // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0
979 // CHECK-ERROR-NEXT: ^
980 // CHECK-ERROR-NEXT: error: invalid operand for instruction
981 // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1
982 // CHECK-ERROR-NEXT: ^
983 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
984 // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1
985 // CHECK-ERROR-NEXT: ^
986 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
987 // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0
988 // CHECK-ERROR-NEXT: ^
989 // CHECK-ERROR-NEXT: error: requested extract overflows register
990 // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23
991 // CHECK-ERROR-NEXT: ^
992 // CHECK-ERROR-NEXT: error: requested extract overflows register
993 // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53
994 // CHECK-ERROR-NEXT: ^
995 // CHECK-ERROR-NEXT: error: invalid operand for instruction
996 // CHECK-ERROR-NEXT: bfxil sp, x3, #7, #6
997 // CHECK-ERROR-NEXT: ^
998 // CHECK-ERROR-NEXT: error: invalid operand for instruction
999 // CHECK-ERROR-NEXT: bfxil w3, wsp, #10, #8
1000 // CHECK-ERROR-NEXT: ^
1002 ubfiz w1, w2, #0, #0
1003 ubfiz wsp, w9, #0, #1
1004 ubfiz w9, w10, #32, #1
1005 ubfiz w11, w12, #32, #0
1006 ubfiz w9, w10, #10, #23
1007 ubfiz x3, x5, #12, #53
1008 ubfiz sp, x3, #7, #6
1009 ubfiz w3, wsp, #10, #8
1010 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1011 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1012 // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0
1013 // CHECK-ERROR-NEXT: ^
1014 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1015 // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1
1016 // CHECK-ERROR-NEXT: ^
1017 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1018 // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1
1019 // CHECK-ERROR-NEXT: ^
1020 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1021 // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0
1022 // CHECK-ERROR-NEXT: ^
1023 // CHECK-ERROR-NEXT: error: requested insert overflows register
1024 // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23
1025 // CHECK-ERROR-NEXT: ^
1026 // CHECK-ERROR-NEXT: error: requested insert overflows register
1027 // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53
1028 // CHECK-ERROR-NEXT: ^
1029 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1030 // CHECK-ERROR-NEXT: ubfiz sp, x3, #7, #6
1031 // CHECK-ERROR-NEXT: ^
1032 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1033 // CHECK-ERROR-NEXT: ubfiz w3, wsp, #10, #8
1034 // CHECK-ERROR-NEXT: ^
1037 ubfx wsp, w9, #0, #1
1038 ubfx w9, w10, #32, #1
1039 ubfx w11, w12, #32, #0
1040 ubfx w9, w10, #10, #23
1041 ubfx x3, x5, #12, #53
1043 ubfx w3, wsp, #10, #8
1044 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1045 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1046 // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0
1047 // CHECK-ERROR-NEXT: ^
1048 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1049 // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1
1050 // CHECK-ERROR-NEXT: ^
1051 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1052 // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1
1053 // CHECK-ERROR-NEXT: ^
1054 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1055 // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0
1056 // CHECK-ERROR-NEXT: ^
1057 // CHECK-ERROR-NEXT: error: requested extract overflows register
1058 // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23
1059 // CHECK-ERROR-NEXT: ^
1060 // CHECK-ERROR-NEXT: error: requested extract overflows register
1061 // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53
1062 // CHECK-ERROR-NEXT: ^
1063 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1064 // CHECK-ERROR-NEXT: ubfx sp, x3, #7, #6
1065 // CHECK-ERROR-NEXT: ^
1066 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1067 // CHECK-ERROR-NEXT: ubfx w3, wsp, #10, #8
1068 // CHECK-ERROR-NEXT: ^
1070 //------------------------------------------------------------------------------
1071 // Compare & branch (immediate)
1072 //------------------------------------------------------------------------------
1077 // CHECK-ERROR: error: invalid operand for instruction
1078 // CHECK-ERROR-NEXT: cbnz wsp, lbl
1079 // CHECK-ERROR-NEXT: ^
1080 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1081 // CHECK-ERROR-NEXT: cbz sp, lbl
1082 // CHECK-ERROR-NEXT: ^
1083 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1084 // CHECK-ERROR-NEXT: cbz x3, x5
1085 // CHECK-ERROR-NEXT: ^
1090 // CHECK-ERROR: error: expected label or encodable integer pc offset
1091 // CHECK-ERROR-NEXT: cbz w20, #1048576
1092 // CHECK-ERROR-NEXT: ^
1093 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1094 // CHECK-ERROR-NEXT: cbnz xzr, #-1048580
1095 // CHECK-ERROR-NEXT: ^
1096 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1097 // CHECK-ERROR-NEXT: cbz x29, #1
1098 // CHECK-ERROR-NEXT: ^
1100 //------------------------------------------------------------------------------
1101 // Conditional branch (immediate)
1102 //------------------------------------------------------------------------------
1105 // CHECK-ERROR: error: invalid condition code
1106 // CHECK-ERROR-NEXT: b.zf lbl
1107 // CHECK-ERROR-NEXT: ^
1112 // CHECK-ERROR: error: expected label or encodable integer pc offset
1113 // CHECK-ERROR-NEXT: b.eq #1048576
1114 // CHECK-ERROR-NEXT: ^
1115 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1116 // CHECK-ERROR-NEXT: b.ge #-1048580
1117 // CHECK-ERROR-NEXT: ^
1118 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1119 // CHECK-ERROR-NEXT: b.cc #1
1120 // CHECK-ERROR-NEXT: ^
1122 //------------------------------------------------------------------------------
1123 // Conditional compare (immediate)
1124 //------------------------------------------------------------------------------
1126 ccmp wsp, #4, #2, ne
1127 ccmp w25, #-1, #15, hs
1128 ccmp w3, #32, #0, ge
1129 ccmp w19, #5, #-1, lt
1130 ccmp w20, #7, #16, hs
1131 // CHECK-ERROR: error: invalid operand for instruction
1132 // CHECK-ERROR-NEXT: ccmp wsp, #4, #2, ne
1133 // CHECK-ERROR-NEXT: ^
1134 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1135 // CHECK-ERROR-NEXT: ccmp w25, #-1, #15, hs
1136 // CHECK-ERROR-NEXT: ^
1137 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1138 // CHECK-ERROR-NEXT: ccmp w3, #32, #0, ge
1139 // CHECK-ERROR-NEXT: ^
1140 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1141 // CHECK-ERROR-NEXT: ccmp w19, #5, #-1, lt
1142 // CHECK-ERROR-NEXT: ^
1143 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1144 // CHECK-ERROR-NEXT: ccmp w20, #7, #16, hs
1145 // CHECK-ERROR-NEXT: ^
1148 ccmp x25, #-1, #15, hs
1149 ccmp x3, #32, #0, ge
1150 ccmp x19, #5, #-1, lt
1151 ccmp x20, #7, #16, hs
1152 // CHECK-ERROR: error: invalid operand for instruction
1153 // CHECK-ERROR-NEXT: ccmp sp, #4, #2, ne
1154 // CHECK-ERROR-NEXT: ^
1155 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1156 // CHECK-ERROR-NEXT: ccmp x25, #-1, #15, hs
1157 // CHECK-ERROR-NEXT: ^
1158 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1159 // CHECK-ERROR-NEXT: ccmp x3, #32, #0, ge
1160 // CHECK-ERROR-NEXT: ^
1161 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1162 // CHECK-ERROR-NEXT: ccmp x19, #5, #-1, lt
1163 // CHECK-ERROR-NEXT: ^
1164 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1165 // CHECK-ERROR-NEXT: ccmp x20, #7, #16, hs
1166 // CHECK-ERROR-NEXT: ^
1168 ccmn wsp, #4, #2, ne
1169 ccmn w25, #-1, #15, hs
1170 ccmn w3, #32, #0, ge
1171 ccmn w19, #5, #-1, lt
1172 ccmn w20, #7, #16, hs
1173 // CHECK-ERROR: error: invalid operand for instruction
1174 // CHECK-ERROR-NEXT: ccmn wsp, #4, #2, ne
1175 // CHECK-ERROR-NEXT: ^
1176 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1177 // CHECK-ERROR-NEXT: ccmn w25, #-1, #15, hs
1178 // CHECK-ERROR-NEXT: ^
1179 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1180 // CHECK-ERROR-NEXT: ccmn w3, #32, #0, ge
1181 // CHECK-ERROR-NEXT: ^
1182 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1183 // CHECK-ERROR-NEXT: ccmn w19, #5, #-1, lt
1184 // CHECK-ERROR-NEXT: ^
1185 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1186 // CHECK-ERROR-NEXT: ccmn w20, #7, #16, hs
1187 // CHECK-ERROR-NEXT: ^
1190 ccmn x25, #-1, #15, hs
1191 ccmn x3, #32, #0, ge
1192 ccmn x19, #5, #-1, lt
1193 ccmn x20, #7, #16, hs
1194 // CHECK-ERROR: error: invalid operand for instruction
1195 // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne
1196 // CHECK-ERROR-NEXT: ^
1197 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1198 // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs
1199 // CHECK-ERROR-NEXT: ^
1200 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1201 // CHECK-ERROR-NEXT: ccmn x3, #32, #0, ge
1202 // CHECK-ERROR-NEXT: ^
1203 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1204 // CHECK-ERROR-NEXT: ccmn x19, #5, #-1, lt
1205 // CHECK-ERROR-NEXT: ^
1206 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1207 // CHECK-ERROR-NEXT: ccmn x20, #7, #16, hs
1208 // CHECK-ERROR-NEXT: ^
1210 //------------------------------------------------------------------------------
1211 // Conditional compare (register)
1212 //------------------------------------------------------------------------------
1214 ccmp wsp, w4, #2, ne
1215 ccmp w3, wsp, #0, ge
1216 ccmp w19, w5, #-1, lt
1217 ccmp w20, w7, #16, hs
1218 // CHECK-ERROR: error: invalid operand for instruction
1219 // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne
1220 // CHECK-ERROR-NEXT: ^
1221 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1222 // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge
1223 // CHECK-ERROR-NEXT: ^
1224 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1225 // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt
1226 // CHECK-ERROR-NEXT: ^
1227 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1228 // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs
1229 // CHECK-ERROR-NEXT: ^
1232 ccmp x25, sp, #15, hs
1233 ccmp x19, x5, #-1, lt
1234 ccmp x20, x7, #16, hs
1235 // CHECK-ERROR: error: invalid operand for instruction
1236 // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne
1237 // CHECK-ERROR-NEXT: ^
1238 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1239 // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs
1240 // CHECK-ERROR-NEXT: ^
1241 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1242 // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt
1243 // CHECK-ERROR-NEXT: ^
1244 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1245 // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs
1246 // CHECK-ERROR-NEXT: ^
1248 ccmn wsp, w4, #2, ne
1249 ccmn w25, wsp, #15, hs
1250 ccmn w19, w5, #-1, lt
1251 ccmn w20, w7, #16, hs
1252 // CHECK-ERROR: error: invalid operand for instruction
1253 // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne
1254 // CHECK-ERROR-NEXT: ^
1255 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1256 // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs
1257 // CHECK-ERROR-NEXT: ^
1258 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1259 // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt
1260 // CHECK-ERROR-NEXT: ^
1261 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1262 // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs
1263 // CHECK-ERROR-NEXT: ^
1266 ccmn x25, sp, #15, hs
1267 ccmn x19, x5, #-1, lt
1268 ccmn x20, x7, #16, hs
1269 // CHECK-ERROR: error: invalid operand for instruction
1270 // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne
1271 // CHECK-ERROR-NEXT: ^
1272 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1273 // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs
1274 // CHECK-ERROR-NEXT: ^
1275 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1276 // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt
1277 // CHECK-ERROR-NEXT: ^
1278 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1279 // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs
1280 // CHECK-ERROR-NEXT: ^
1282 //------------------------------------------------------------------------------
1283 // Conditional select
1284 //------------------------------------------------------------------------------
1286 csel w4, wsp, w9, eq
1287 csel wsp, w2, w3, ne
1288 csel w10, w11, wsp, ge
1292 csel x10, x11, sp, ge
1294 // CHECK-ERROR: error: invalid operand for instruction
1295 // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq
1296 // CHECK-ERROR-NEXT: ^
1297 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1298 // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne
1299 // CHECK-ERROR-NEXT: ^
1300 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1301 // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge
1302 // CHECK-ERROR-NEXT: ^
1303 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1304 // CHECK-ERROR-NEXT: csel w1, w2, w3, #3
1305 // CHECK-ERROR-NEXT: ^
1306 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1307 // CHECK-ERROR-NEXT: csel x4, sp, x9, eq
1308 // CHECK-ERROR-NEXT: ^
1309 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1310 // CHECK-ERROR-NEXT: csel sp, x2, x3, ne
1311 // CHECK-ERROR-NEXT: ^
1312 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1313 // CHECK-ERROR-NEXT: csel x10, x11, sp, ge
1314 // CHECK-ERROR-NEXT: ^
1315 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1316 // CHECK-ERROR-NEXT: csel x1, x2, x3, #3
1317 // CHECK-ERROR-NEXT: ^
1319 csinc w20, w21, wsp, mi
1320 csinc sp, x30, x29, eq
1321 // CHECK-ERROR: error: invalid operand for instruction
1322 // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi
1323 // CHECK-ERROR-NEXT: ^
1324 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1325 // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq
1326 // CHECK-ERROR-NEXT: ^
1328 csinv w20, wsp, wsp, mi
1329 csinv sp, x30, x29, le
1330 // CHECK-ERROR: error: invalid operand for instruction
1331 // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi
1332 // CHECK-ERROR-NEXT: ^
1333 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1334 // CHECK-ERROR-NEXT: csinv sp, x30, x29, le
1335 // CHECK-ERROR-NEXT: ^
1337 csneg w20, w21, wsp, mi
1338 csneg x0, sp, x29, le
1339 // CHECK-ERROR: error: invalid operand for instruction
1340 // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi
1341 // CHECK-ERROR-NEXT: ^
1342 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1343 // CHECK-ERROR-NEXT: csneg x0, sp, x29, le
1344 // CHECK-ERROR-NEXT: ^
1350 // CHECK-ERROR: error: invalid operand for instruction
1351 // CHECK-ERROR-NEXT: cset wsp, lt
1352 // CHECK-ERROR-NEXT: ^
1353 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1354 // CHECK-ERROR-NEXT: csetm sp, ge
1355 // CHECK-ERROR-NEXT: ^
1356 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1357 // CHECK-ERROR-NEXT: cset w1, al
1358 // CHECK-ERROR-NEXT: ^
1359 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1360 // CHECK-ERROR-NEXT: csetm x6, nv
1361 // CHECK-ERROR-NEXT: ^
1366 // CHECK-ERROR: error: invalid operand for instruction
1367 // CHECK-ERROR-NEXT: cinc w3, wsp, ne
1368 // CHECK-ERROR-NEXT: ^
1369 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1370 // CHECK-ERROR-NEXT: cinc sp, x9, eq
1371 // CHECK-ERROR-NEXT: ^
1372 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1373 // CHECK-ERROR-NEXT: cinc x2, x0, nv
1374 // CHECK-ERROR-NEXT: ^
1379 // CHECK-ERROR: error: invalid operand for instruction
1380 // CHECK-ERROR-NEXT: cinv w3, wsp, ne
1381 // CHECK-ERROR-NEXT: ^
1382 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1383 // CHECK-ERROR-NEXT: cinv sp, x9, eq
1384 // CHECK-ERROR-NEXT: ^
1385 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1386 // CHECK-ERROR-NEXT: cinv w8, x7, nv
1387 // CHECK-ERROR-NEXT: ^
1392 // CHECK-ERROR: error: invalid operand for instruction
1393 // CHECK-ERROR-NEXT: cneg w3, wsp, ne
1394 // CHECK-ERROR-NEXT: ^
1395 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1396 // CHECK-ERROR-NEXT: cneg sp, x9, eq
1397 // CHECK-ERROR-NEXT: ^
1398 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1399 // CHECK-ERROR-NEXT: cneg x4, x5, al
1400 // CHECK-ERROR-NEXT: ^
1402 //------------------------------------------------------------------------------
1403 // Data Processing (1 source)
1404 //------------------------------------------------------------------------------
1406 //CHECK-ERROR: error: invalid operand for instruction
1407 //CHECK-ERROR-NEXT: rbit x23, w2
1410 //CHECK-ERROR: error: invalid operand for instruction
1411 //CHECK-ERROR-NEXT: cls sp, x2
1414 //CHECK-ERROR: error: invalid operand for instruction
1415 //CHECK-ERROR-NEXT: clz wsp, w3
1417 //------------------------------------------------------------------------------
1418 // Data Processing (2 sources)
1419 //------------------------------------------------------------------------------
1421 //CHECK-ERROR: error: invalid operand for instruction
1422 //CHECK-ERROR-NEXT: udiv x23, w2, x18
1425 //CHECK-ERROR: error: invalid operand for instruction
1426 //CHECK-ERROR-NEXT: lsl sp, x2, x4
1429 //CHECK-ERROR: error: invalid operand for instruction
1430 //CHECK-ERROR-NEXT: asr wsp, w3, w9
1432 //------------------------------------------------------------------------------
1433 // Data Processing (3 sources)
1434 //------------------------------------------------------------------------------
1436 madd sp, x3, x9, x10
1437 //CHECK-ERROR: error: invalid operand for instruction
1438 //CHECK-ERROR-NEXT: madd sp, x3, x9, x10
1440 //------------------------------------------------------------------------------
1441 // Exception generation
1442 //------------------------------------------------------------------------------
1447 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
1448 // CHECK-ERROR-NEXT: svc #-1
1449 // CHECK-ERROR-NEXT: ^
1450 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
1451 // CHECK-ERROR-NEXT: hlt #65536
1452 // CHECK-ERROR-NEXT: ^
1453 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1454 // CHECK-ERROR-NEXT: dcps4 #43
1455 // CHECK-ERROR-NEXT: ^
1456 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1457 // CHECK-ERROR-NEXT: dcps4
1458 // CHECK-ERROR-NEXT: ^
1460 //------------------------------------------------------------------------------
1461 // Extract (immediate)
1462 //------------------------------------------------------------------------------
1464 extr w2, w20, w30, #-1
1465 extr w9, w19, w20, #32
1466 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1467 // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1
1468 // CHECK-ERROR-NEXT: ^
1469 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1470 // CHECK-ERROR-NEXT: extr w9, w19, w20, #32
1471 // CHECK-ERROR-NEXT: ^
1473 extr x10, x15, x20, #-1
1474 extr x20, x25, x30, #64
1475 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1476 // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1
1477 // CHECK-ERROR-NEXT: ^
1478 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1479 // CHECK-ERROR-NEXT: extr x20, x25, x30, #64
1480 // CHECK-ERROR-NEXT: ^
1484 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1485 // CHECK-ERROR-NEXT: ror w9, w10, #32
1486 // CHECK-ERROR-NEXT: ^
1487 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1488 // CHECK-ERROR-NEXT: ror x10, x11, #64
1489 // CHECK-ERROR-NEXT: ^
1491 //------------------------------------------------------------------------------
1492 // Floating-point compare
1493 //------------------------------------------------------------------------------
1496 // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
1497 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1498 // CHECK-ERROR-NEXT: fcmp s3, d2
1499 // CHECK-ERROR-NEXT: ^
1505 // CHECK-ERROR: error: expected floating-point constant #0.0
1506 // CHECK-ERROR-NEXT: fcmp s9, #-0.0
1507 // CHECK-ERROR-NEXT: ^
1508 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1509 // CHECK-ERROR-NEXT: fcmp d3, #-0.0
1510 // CHECK-ERROR-NEXT: ^
1511 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1512 // CHECK-ERROR-NEXT: fcmp s1, #1.0
1513 // CHECK-ERROR-NEXT: ^
1514 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1515 // CHECK-ERROR-NEXT: fcmpe s30, #-0.0
1516 // CHECK-ERROR-NEXT: ^
1518 //------------------------------------------------------------------------------
1519 // Floating-point conditional compare
1520 //------------------------------------------------------------------------------
1522 fccmp s19, s5, #-1, lt
1523 fccmp s20, s7, #16, hs
1524 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1525 // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt
1526 // CHECK-ERROR-NEXT: ^
1527 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1528 // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs
1529 // CHECK-ERROR-NEXT: ^
1531 fccmp d19, d5, #-1, lt
1532 fccmp d20, d7, #16, hs
1533 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1534 // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt
1535 // CHECK-ERROR-NEXT: ^
1536 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1537 // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs
1538 // CHECK-ERROR-NEXT: ^
1540 fccmpe s19, s5, #-1, lt
1541 fccmpe s20, s7, #16, hs
1542 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1543 // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt
1544 // CHECK-ERROR-NEXT: ^
1545 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1546 // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs
1547 // CHECK-ERROR-NEXT: ^
1549 fccmpe d19, d5, #-1, lt
1550 fccmpe d20, d7, #16, hs
1551 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1552 // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt
1553 // CHECK-ERROR-NEXT: ^
1554 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1555 // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs
1556 // CHECK-ERROR-NEXT: ^
1558 //------------------------------------------------------------------------------
1559 // Floating-point conditional compare
1560 //------------------------------------------------------------------------------
1562 fcsel q3, q20, q9, pl
1563 fcsel h9, h10, h11, mi
1564 fcsel b9, b10, b11, mi
1565 // CHECK-ERROR: error: invalid operand for instruction
1566 // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl
1567 // CHECK-ERROR-NEXT: ^
1568 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1569 // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi
1570 // CHECK-ERROR-NEXT: ^
1571 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1572 // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi
1573 // CHECK-ERROR-NEXT: ^
1575 //------------------------------------------------------------------------------
1576 // Floating-point data-processing (1 source)
1577 //------------------------------------------------------------------------------
1581 // CHECK-ERROR: error: expected compatible register or floating-point constant
1582 // CHECK-ERROR-NEXT: fmov d0, s3
1583 // CHECK-ERROR-NEXT: ^
1584 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1585 // CHECK-ERROR-NEXT: fcvt d0, d1
1586 // CHECK-ERROR-NEXT: ^
1589 //------------------------------------------------------------------------------
1590 // Floating-point data-processing (2 sources)
1591 //------------------------------------------------------------------------------
1596 // CHECK-ERROR: error: invalid operand for instruction
1597 // CHECK-ERROR-NEXT: fadd s0, d3, d7
1598 // CHECK-ERROR-NEXT: ^
1599 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1600 // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12
1601 // CHECK-ERROR-NEXT: ^
1602 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1603 // CHECK-ERROR-NEXT: fnmul d1, d9, s18
1604 // CHECK-ERROR-NEXT: ^
1606 //------------------------------------------------------------------------------
1607 // Floating-point data-processing (3 sources)
1608 //------------------------------------------------------------------------------
1610 fmadd b3, b4, b5, b6
1611 fmsub h1, h2, h3, h4
1612 fnmadd q3, q5, q6, q7
1613 fnmsub s2, s4, d5, h9
1614 // CHECK-ERROR: error: invalid operand for instruction
1615 // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6
1616 // CHECK-ERROR-NEXT: ^
1617 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1618 // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4
1619 // CHECK-ERROR-NEXT: ^
1620 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1621 // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7
1622 // CHECK-ERROR-NEXT: ^
1623 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1624 // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9
1625 // CHECK-ERROR-NEXT: ^
1627 //------------------------------------------------------------------------------
1628 // Floating-point conditional compare
1629 //------------------------------------------------------------------------------
1632 fcvtzs w19, s20, #33
1633 fcvtzs wsp, s19, #14
1634 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1635 // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0
1636 // CHECK-ERROR-NEXT: ^
1637 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1638 // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33
1639 // CHECK-ERROR-NEXT: ^
1640 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1641 // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14
1642 // CHECK-ERROR-NEXT: ^
1645 fcvtzs x19, s20, #65
1647 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1648 // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0
1649 // CHECK-ERROR-NEXT: ^
1650 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1651 // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65
1652 // CHECK-ERROR-NEXT: ^
1653 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1654 // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14
1655 // CHECK-ERROR-NEXT: ^
1658 fcvtzu w19, s20, #33
1659 fcvtzu wsp, s19, #14
1660 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1661 // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0
1662 // CHECK-ERROR-NEXT: ^
1663 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1664 // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33
1665 // CHECK-ERROR-NEXT: ^
1666 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1667 // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14
1668 // CHECK-ERROR-NEXT: ^
1671 fcvtzu x19, s20, #65
1673 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1674 // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0
1675 // CHECK-ERROR-NEXT: ^
1676 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1677 // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65
1678 // CHECK-ERROR-NEXT: ^
1679 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1680 // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14
1681 // CHECK-ERROR-NEXT: ^
1686 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1687 // CHECK-ERROR-NEXT: scvtf w13, s31, #0
1688 // CHECK-ERROR-NEXT: ^
1689 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1690 // CHECK-ERROR-NEXT: scvtf w19, s20, #33
1691 // CHECK-ERROR-NEXT: ^
1692 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1693 // CHECK-ERROR-NEXT: scvtf wsp, s19, #14
1694 // CHECK-ERROR-NEXT: ^
1699 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1700 // CHECK-ERROR-NEXT: scvtf x13, s31, #0
1701 // CHECK-ERROR-NEXT: ^
1702 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1703 // CHECK-ERROR-NEXT: scvtf x19, s20, #65
1704 // CHECK-ERROR-NEXT: ^
1705 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1706 // CHECK-ERROR-NEXT: scvtf sp, s19, #14
1707 // CHECK-ERROR-NEXT: ^
1712 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1713 // CHECK-ERROR-NEXT: ucvtf w13, s31, #0
1714 // CHECK-ERROR-NEXT: ^
1715 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1716 // CHECK-ERROR-NEXT: ucvtf w19, s20, #33
1717 // CHECK-ERROR-NEXT: ^
1718 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1719 // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14
1720 // CHECK-ERROR-NEXT: ^
1725 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1726 // CHECK-ERROR-NEXT: ucvtf x13, s31, #0
1727 // CHECK-ERROR-NEXT: ^
1728 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1729 // CHECK-ERROR-NEXT: ucvtf x19, s20, #65
1730 // CHECK-ERROR-NEXT: ^
1731 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1732 // CHECK-ERROR-NEXT: ucvtf sp, s19, #14
1733 // CHECK-ERROR-NEXT: ^
1735 //------------------------------------------------------------------------------
1736 // Floating-point immediate
1737 //------------------------------------------------------------------------------
1738 ;; Exponent too large
1741 // CHECK-ERROR: error: expected compatible register or floating-point constant
1742 // CHECK-ERROR-NEXT: fmov d3, #0.0625
1743 // CHECK-ERROR-NEXT: ^
1744 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1745 // CHECK-ERROR-NEXT: fmov s2, #32.0
1746 // CHECK-ERROR-NEXT: ^
1748 ;; Fraction too precise
1751 // CHECK-ERROR: error: expected compatible register or floating-point constant
1752 // CHECK-ERROR-NEXT: fmov s9, #1.03125
1753 // CHECK-ERROR-NEXT: ^
1754 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1755 // CHECK-ERROR-NEXT: fmov s28, #1.96875
1756 // CHECK-ERROR-NEXT: ^
1758 ;; No particular reason, but a striking omission
1760 // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant
1761 // CHECK-ERROR-AARCH64-NEXT: fmov d0, #0.0
1762 // CHECK-ERROR-AARCH64-NEXT: ^
1764 //------------------------------------------------------------------------------
1765 // Floating-point <-> integer conversion
1766 //------------------------------------------------------------------------------
1773 // CHECK-ERROR: error: expected lane specifier '[1]'
1774 // CHECK-ERROR-NEXT: fmov x3, v0.d[0]
1775 // CHECK-ERROR-NEXT: ^
1776 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1777 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
1778 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
1779 // CHECK-ERROR-NEXT: ^
1780 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1781 // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
1782 // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
1783 // CHECK-ERROR-NEXT: ^
1784 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1785 // CHECK-ERROR-NEXT: fcvtns sp, s5
1786 // CHECK-ERROR-NEXT: ^
1787 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1788 // CHECK-ERROR-NEXT: scvtf s6, wsp
1789 // CHECK-ERROR-NEXT: ^
1791 //------------------------------------------------------------------------------
1792 // Load-register (literal)
1793 //------------------------------------------------------------------------------
1797 // CHECK-ERROR: error: invalid operand for instruction
1798 // CHECK-ERROR-NEXT: ldr sp, some_label
1799 // CHECK-ERROR-NEXT: ^
1800 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1801 // CHECK-ERROR-NEXT: ldrsw w3, somewhere
1802 // CHECK-ERROR-NEXT: ^
1807 // CHECK-ERROR: error: expected label or encodable integer pc offset
1808 // CHECK-ERROR-NEXT: ldrsw x2, #1048576
1809 // CHECK-ERROR-NEXT: ^
1810 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1811 // CHECK-ERROR-NEXT: ldr q0, #-1048580
1812 // CHECK-ERROR-NEXT: ^
1813 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1814 // CHECK-ERROR-NEXT: ldr x0, #2
1815 // CHECK-ERROR-NEXT: ^
1817 //------------------------------------------------------------------------------
1818 // Load/store exclusive
1819 //------------------------------------------------------------------------------
1821 stxrb w2, w3, [x4, #20]
1822 stlxrh w10, w11, [w2]
1823 // CHECK-ERROR-AARCH64: error: expected '#0'
1824 // CHECK-ERROR-ARM64: error: index must be absent or #0
1825 // CHECK-ERROR-NEXT: stxrb w2, w3, [x4, #20]
1826 // CHECK-ERROR-NEXT: ^
1827 // CHECK-ERROR: error: invalid operand for instruction
1828 // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2]
1829 // CHECK-ERROR-NEXT: ^
1831 stlxr x20, w21, [sp]
1832 // CHECK-ERROR: error: invalid operand for instruction
1833 // CHECK-ERROR-NEXT: stlxr x20, w21, [sp]
1834 // CHECK-ERROR-NEXT: ^
1837 // CHECK-ERROR: error: invalid operand for instruction
1838 // CHECK-ERROR-NEXT: ldxr sp, [sp]
1839 // CHECK-ERROR-NEXT: ^
1841 stxp x1, x2, x3, [x4]
1842 // CHECK-ERROR: error: invalid operand for instruction
1843 // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4]
1844 // CHECK-ERROR-NEXT: ^
1846 stlxp w5, x1, w4, [x5]
1847 // CHECK-ERROR: error: invalid operand for instruction
1848 // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5]
1849 // CHECK-ERROR-NEXT: ^
1851 stlxp w17, w6, x7, [x22]
1852 // CHECK-ERROR: error: invalid operand for instruction
1853 // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22]
1854 // CHECK-ERROR-NEXT: ^
1856 //------------------------------------------------------------------------------
1857 // Load/store (unscaled immediate)
1858 //------------------------------------------------------------------------------
1860 ldurb w2, [sp, #256]
1861 sturh w17, [x1, #256]
1862 ldursw x20, [x1, #256]
1863 ldur x12, [sp, #256]
1864 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1865 // CHECK-ERROR-NEXT: ldurb w2, [sp, #256]
1866 // CHECK-ERROR-NEXT: ^
1867 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1868 // CHECK-ERROR-NEXT: sturh w17, [x1, #256]
1869 // CHECK-ERROR-NEXT: ^
1870 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1871 // CHECK-ERROR-NEXT: ldursw x20, [x1, #256]
1872 // CHECK-ERROR-NEXT: ^
1873 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1874 // CHECK-ERROR-NEXT: ldur x12, [sp, #256]
1875 // CHECK-ERROR-NEXT: ^
1877 stur h2, [x2, #-257]
1878 stur b2, [x2, #-257]
1879 ldursb x9, [sp, #-257]
1880 ldur w2, [x30, #-257]
1881 stur q9, [x20, #-257]
1882 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1883 // CHECK-ERROR-NEXT: stur h2, [x2, #-257]
1884 // CHECK-ERROR-NEXT: ^
1885 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1886 // CHECK-ERROR-NEXT: stur b2, [x2, #-257]
1887 // CHECK-ERROR-NEXT: ^
1888 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1889 // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257]
1890 // CHECK-ERROR-NEXT: ^
1891 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1892 // CHECK-ERROR-NEXT: ldur w2, [x30, #-257]
1893 // CHECK-ERROR-NEXT: ^
1894 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1895 // CHECK-ERROR-NEXT: stur q9, [x20, #-257]
1896 // CHECK-ERROR-NEXT: ^
1898 prfum pstl3strm, [xzr]
1899 // CHECK-ERROR: error: invalid operand for instruction
1900 // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr]
1901 // CHECK-ERROR-NEXT: ^
1903 //------------------------------------------------------------------------------
1904 // Load-store register (immediate post-indexed)
1905 //------------------------------------------------------------------------------
1906 ldr x3, [x4, #25], #0
1907 ldr x4, [x9, #0], #4
1908 // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760]
1909 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1910 // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0
1911 // CHECK-ERROR-NEXT: ^
1912 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
1913 // CHECK-ERROR-AARCH64-NEXT: ldr x4, [x9, #0], #4
1914 // CHECK-ERROR-AARCH64-NEXT: ^
1916 strb w1, [x19], #256
1917 strb w9, [sp], #-257
1918 strh w1, [x19], #256
1919 strh w9, [sp], #-257
1922 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1923 // CHECK-ERROR-NEXT: strb w1, [x19], #256
1924 // CHECK-ERROR-NEXT: ^
1925 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1926 // CHECK-ERROR-NEXT: strb w9, [sp], #-257
1927 // CHECK-ERROR-NEXT: ^
1928 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1929 // CHECK-ERROR-NEXT: strh w1, [x19], #256
1930 // CHECK-ERROR-NEXT: ^
1931 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1932 // CHECK-ERROR-NEXT: strh w9, [sp], #-257
1933 // CHECK-ERROR-NEXT: ^
1934 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1935 // CHECK-ERROR-NEXT: str w1, [x19], #256
1936 // CHECK-ERROR-NEXT: ^
1937 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1938 // CHECK-ERROR-NEXT: str w9, [sp], #-257
1939 // CHECK-ERROR-NEXT: ^
1941 ldrb w1, [x19], #256
1942 ldrb w9, [sp], #-257
1943 ldrh w1, [x19], #256
1944 ldrh w9, [sp], #-257
1947 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1948 // CHECK-ERROR-NEXT: ldrb w1, [x19], #256
1949 // CHECK-ERROR-NEXT: ^
1950 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1951 // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257
1952 // CHECK-ERROR-NEXT: ^
1953 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1954 // CHECK-ERROR-NEXT: ldrh w1, [x19], #256
1955 // CHECK-ERROR-NEXT: ^
1956 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1957 // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257
1958 // CHECK-ERROR-NEXT: ^
1959 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1960 // CHECK-ERROR-NEXT: ldr w1, [x19], #256
1961 // CHECK-ERROR-NEXT: ^
1962 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1963 // CHECK-ERROR-NEXT: ldr w9, [sp], #-257
1964 // CHECK-ERROR-NEXT: ^
1966 ldrsb x2, [x3], #256
1967 ldrsb x22, [x13], #-257
1968 ldrsh x2, [x3], #256
1969 ldrsh x22, [x13], #-257
1970 ldrsw x2, [x3], #256
1971 ldrsw x22, [x13], #-257
1972 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1973 // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256
1974 // CHECK-ERROR-NEXT: ^
1975 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1976 // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257
1977 // CHECK-ERROR-NEXT: ^
1978 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1979 // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256
1980 // CHECK-ERROR-NEXT: ^
1981 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1982 // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257
1983 // CHECK-ERROR-NEXT: ^
1984 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1985 // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256
1986 // CHECK-ERROR-NEXT: ^
1987 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1988 // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257
1989 // CHECK-ERROR-NEXT: ^
1991 ldrsb w2, [x3], #256
1992 ldrsb w22, [x13], #-257
1993 ldrsh w2, [x3], #256
1994 ldrsh w22, [x13], #-257
1995 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1996 // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256
1997 // CHECK-ERROR-NEXT: ^
1998 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1999 // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257
2000 // CHECK-ERROR-NEXT: ^
2001 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2002 // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256
2003 // CHECK-ERROR-NEXT: ^
2004 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2005 // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257
2006 // CHECK-ERROR-NEXT: ^
2009 str b3, [x13], #-257
2011 str h3, [x13], #-257
2013 str s3, [x13], #-257
2015 str d3, [x13], #-257
2017 str q3, [x13], #-257
2018 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2019 // CHECK-ERROR-NEXT: str b3, [x3], #256
2020 // CHECK-ERROR-NEXT: ^
2021 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2022 // CHECK-ERROR-NEXT: str b3, [x13], #-257
2023 // CHECK-ERROR-NEXT: ^
2024 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2025 // CHECK-ERROR-NEXT: str h3, [x3], #256
2026 // CHECK-ERROR-NEXT: ^
2027 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2028 // CHECK-ERROR-NEXT: str h3, [x13], #-257
2029 // CHECK-ERROR-NEXT: ^
2030 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2031 // CHECK-ERROR-NEXT: str s3, [x3], #256
2032 // CHECK-ERROR-NEXT: ^
2033 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2034 // CHECK-ERROR-NEXT: str s3, [x13], #-257
2035 // CHECK-ERROR-NEXT: ^
2036 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2037 // CHECK-ERROR-NEXT: str d3, [x3], #256
2038 // CHECK-ERROR-NEXT: ^
2039 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2040 // CHECK-ERROR-NEXT: str d3, [x13], #-257
2041 // CHECK-ERROR-NEXT: ^
2042 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2043 // CHECK-ERROR-NEXT: str q3, [x3], #256
2044 // CHECK-ERROR-NEXT: ^
2045 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2046 // CHECK-ERROR-NEXT: str q3, [x13], #-257
2047 // CHECK-ERROR-NEXT: ^
2050 ldr b3, [x13], #-257
2052 ldr h3, [x13], #-257
2054 ldr s3, [x13], #-257
2056 ldr d3, [x13], #-257
2058 ldr q3, [x13], #-257
2059 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2060 // CHECK-ERROR-NEXT: ldr b3, [x3], #256
2061 // CHECK-ERROR-NEXT: ^
2062 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2063 // CHECK-ERROR-NEXT: ldr b3, [x13], #-257
2064 // CHECK-ERROR-NEXT: ^
2065 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2066 // CHECK-ERROR-NEXT: ldr h3, [x3], #256
2067 // CHECK-ERROR-NEXT: ^
2068 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2069 // CHECK-ERROR-NEXT: ldr h3, [x13], #-257
2070 // CHECK-ERROR-NEXT: ^
2071 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2072 // CHECK-ERROR-NEXT: ldr s3, [x3], #256
2073 // CHECK-ERROR-NEXT: ^
2074 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2075 // CHECK-ERROR-NEXT: ldr s3, [x13], #-257
2076 // CHECK-ERROR-NEXT: ^
2077 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2078 // CHECK-ERROR-NEXT: ldr d3, [x3], #256
2079 // CHECK-ERROR-NEXT: ^
2080 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2081 // CHECK-ERROR-NEXT: ldr d3, [x13], #-257
2082 // CHECK-ERROR-NEXT: ^
2083 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2084 // CHECK-ERROR-NEXT: ldr q3, [x3], #256
2085 // CHECK-ERROR-NEXT: ^
2086 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2087 // CHECK-ERROR-NEXT: ldr q3, [x13], #-257
2088 // CHECK-ERROR-NEXT: ^
2090 //------------------------------------------------------------------------------
2091 // Load-store register (immediate pre-indexed)
2092 //------------------------------------------------------------------------------
2095 // CHECK-ERROR: error:
2096 // CHECK-ERROR-NEXT: ldr x3, [x4]!
2097 // CHECK-ERROR-NEXT: ^
2099 strb w1, [x19, #256]!
2100 strb w9, [sp, #-257]!
2101 strh w1, [x19, #256]!
2102 strh w9, [sp, #-257]!
2103 str w1, [x19, #256]!
2104 str w9, [sp, #-257]!
2105 // CHECK-ERROR: error: invalid operand for instruction
2106 // CHECK-ERROR-NEXT: strb w1, [x19, #256]!
2107 // CHECK-ERROR-NEXT: ^
2108 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2109 // CHECK-ERROR-NEXT: strb w9, [sp, #-257]!
2110 // CHECK-ERROR-NEXT: ^
2111 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2112 // CHECK-ERROR-NEXT: strh w1, [x19, #256]!
2113 // CHECK-ERROR-NEXT: ^
2114 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2115 // CHECK-ERROR-NEXT: strh w9, [sp, #-257]!
2116 // CHECK-ERROR-NEXT: ^
2117 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2118 // CHECK-ERROR-NEXT: str w1, [x19, #256]!
2119 // CHECK-ERROR-NEXT: ^
2120 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2121 // CHECK-ERROR-NEXT: str w9, [sp, #-257]!
2122 // CHECK-ERROR-NEXT: ^
2124 ldrb w1, [x19, #256]!
2125 ldrb w9, [sp, #-257]!
2126 ldrh w1, [x19, #256]!
2127 ldrh w9, [sp, #-257]!
2128 ldr w1, [x19, #256]!
2129 ldr w9, [sp, #-257]!
2130 // CHECK-ERROR: error: invalid operand for instruction
2131 // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]!
2132 // CHECK-ERROR-NEXT: ^
2133 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2134 // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]!
2135 // CHECK-ERROR-NEXT: ^
2136 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2137 // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]!
2138 // CHECK-ERROR-NEXT: ^
2139 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2140 // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]!
2141 // CHECK-ERROR-NEXT: ^
2142 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2143 // CHECK-ERROR-NEXT: ldr w1, [x19, #256]!
2144 // CHECK-ERROR-NEXT: ^
2145 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2146 // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]!
2147 // CHECK-ERROR-NEXT: ^
2149 ldrsb x2, [x3, #256]!
2150 ldrsb x22, [x13, #-257]!
2151 ldrsh x2, [x3, #256]!
2152 ldrsh x22, [x13, #-257]!
2153 ldrsw x2, [x3, #256]!
2154 ldrsw x22, [x13, #-257]!
2155 // CHECK-ERROR: error: invalid operand for instruction
2156 // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]!
2157 // CHECK-ERROR-NEXT: ^
2158 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2159 // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]!
2160 // CHECK-ERROR-NEXT: ^
2161 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2162 // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]!
2163 // CHECK-ERROR-NEXT: ^
2164 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2165 // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]!
2166 // CHECK-ERROR-NEXT: ^
2167 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2168 // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]!
2169 // CHECK-ERROR-NEXT: ^
2170 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2171 // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]!
2172 // CHECK-ERROR-NEXT: ^
2174 ldrsb w2, [x3, #256]!
2175 ldrsb w22, [x13, #-257]!
2176 ldrsh w2, [x3, #256]!
2177 ldrsh w22, [x13, #-257]!
2178 // CHECK-ERROR: error: invalid operand for instruction
2179 // CHECK-ERROR-NEXT: ldrsb w2, [x3, #256]!
2180 // CHECK-ERROR-NEXT: ^
2181 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2182 // CHECK-ERROR-NEXT: ldrsb w22, [x13, #-257]!
2183 // CHECK-ERROR-NEXT: ^
2184 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2185 // CHECK-ERROR-NEXT: ldrsh w2, [x3, #256]!
2186 // CHECK-ERROR-NEXT: ^
2187 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2188 // CHECK-ERROR-NEXT: ldrsh w22, [x13, #-257]!
2189 // CHECK-ERROR-NEXT: ^
2192 str b3, [x13, #-257]!
2194 str h3, [x13, #-257]!
2196 str s3, [x13, #-257]!
2198 str d3, [x13, #-257]!
2199 // CHECK-ERROR: error: invalid operand for instruction
2200 // CHECK-ERROR-NEXT: str b3, [x3, #256]!
2201 // CHECK-ERROR-NEXT: ^
2202 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2203 // CHECK-ERROR-NEXT: str b3, [x13, #-257]!
2204 // CHECK-ERROR-NEXT: ^
2205 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2206 // CHECK-ERROR-NEXT: str h3, [x3, #256]!
2207 // CHECK-ERROR-NEXT: ^
2208 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2209 // CHECK-ERROR-NEXT: str h3, [x13, #-257]!
2210 // CHECK-ERROR-NEXT: ^
2211 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2212 // CHECK-ERROR-NEXT: str s3, [x3, #256]!
2213 // CHECK-ERROR-NEXT: ^
2214 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2215 // CHECK-ERROR-NEXT: str s3, [x13, #-257]!
2216 // CHECK-ERROR-NEXT: ^
2217 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2218 // CHECK-ERROR-NEXT: str d3, [x3, #256]!
2219 // CHECK-ERROR-NEXT: ^
2220 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2221 // CHECK-ERROR-NEXT: str d3, [x13, #-257]!
2222 // CHECK-ERROR-NEXT: ^
2225 ldr b3, [x13, #-257]!
2227 ldr h3, [x13, #-257]!
2229 ldr s3, [x13, #-257]!
2231 ldr d3, [x13, #-257]!
2232 // CHECK-ERROR: error: invalid operand for instruction
2233 // CHECK-ERROR-NEXT: ldr b3, [x3, #256]!
2234 // CHECK-ERROR-NEXT: ^
2235 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2236 // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]!
2237 // CHECK-ERROR-NEXT: ^
2238 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2239 // CHECK-ERROR-NEXT: ldr h3, [x3, #256]!
2240 // CHECK-ERROR-NEXT: ^
2241 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2242 // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]!
2243 // CHECK-ERROR-NEXT: ^
2244 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2245 // CHECK-ERROR-NEXT: ldr s3, [x3, #256]!
2246 // CHECK-ERROR-NEXT: ^
2247 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2248 // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]!
2249 // CHECK-ERROR-NEXT: ^
2250 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2251 // CHECK-ERROR-NEXT: ldr d3, [x3, #256]!
2252 // CHECK-ERROR-NEXT: ^
2253 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2254 // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]!
2255 // CHECK-ERROR-NEXT: ^
2257 //------------------------------------------------------------------------------
2258 // Load/store (unprivileged)
2259 //------------------------------------------------------------------------------
2261 ldtrb w2, [sp, #256]
2262 sttrh w17, [x1, #256]
2263 ldtrsw x20, [x1, #256]
2264 ldtr x12, [sp, #256]
2265 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2266 // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256]
2267 // CHECK-ERROR-NEXT: ^
2268 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2269 // CHECK-ERROR-NEXT: sttrh w17, [x1, #256]
2270 // CHECK-ERROR-NEXT: ^
2271 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2272 // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256]
2273 // CHECK-ERROR-NEXT: ^
2274 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2275 // CHECK-ERROR-NEXT: ldtr x12, [sp, #256]
2276 // CHECK-ERROR-NEXT: ^
2278 sttr h2, [x2, #-257]
2279 sttr b2, [x2, #-257]
2280 ldtrsb x9, [sp, #-257]
2281 ldtr w2, [x30, #-257]
2282 sttr q9, [x20, #-257]
2283 // CHECK-ERROR: error: invalid operand for instruction
2284 // CHECK-ERROR-NEXT: sttr h2, [x2, #-257]
2285 // CHECK-ERROR-NEXT: ^
2286 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2287 // CHECK-ERROR-NEXT: sttr b2, [x2, #-257]
2288 // CHECK-ERROR-NEXT: ^
2289 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2290 // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257]
2291 // CHECK-ERROR-NEXT: ^
2292 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2293 // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257]
2294 // CHECK-ERROR-NEXT: ^
2295 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2296 // CHECK-ERROR-NEXT: sttr q9, [x20, #-257]
2297 // CHECK-ERROR-NEXT: ^
2300 //------------------------------------------------------------------------------
2301 // Load/store (unsigned immediate)
2302 //------------------------------------------------------------------------------
2304 //// Out of range immediates
2305 ldr q0, [x11, #65536]
2306 ldr x0, [sp, #32768]
2307 ldr w0, [x4, #16384]
2308 ldrh w2, [x21, #8192]
2309 ldrb w3, [x12, #4096]
2310 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2311 // CHECK-ERROR-NEXT: ldr q0, [x11, #65536]
2312 // CHECK-ERROR-NEXT: ^
2313 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2314 // CHECK-ERROR-NEXT: ldr x0, [sp, #32768]
2315 // CHECK-ERROR-NEXT: ^
2316 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2317 // CHECK-ERROR-NEXT: ldr w0, [x4, #16384]
2318 // CHECK-ERROR-NEXT: ^
2319 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2320 // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192]
2321 // CHECK-ERROR-NEXT: ^
2322 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2323 // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096]
2324 // CHECK-ERROR-NEXT: ^
2326 //// Misaligned addresses
2328 ldrsh w2, [x0, #123]
2330 // CHECK-ERROR-AARCH64: error: too few operands for instruction
2331 // CHECK-ERROR-AARCH64-NEXT: ldr w0, [x0, #2]
2332 // CHECK-ERROR-AARCH64-NEXT: ^
2333 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2334 // CHECK-ERROR-AARCH64-NEXT: ldrsh w2, [x0, #123]
2335 // CHECK-ERROR-AARCH64-NEXT: ^
2336 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2337 // CHECK-ERROR-AARCH64-NEXT: str q0, [x0, #8]
2338 // CHECK-ERROR-AARCH64-NEXT: ^
2340 //// 32-bit addresses
2343 // CHECK-ERROR: error: invalid operand for instruction
2344 // CHECK-ERROR-NEXT: ldr w0, [w20]
2345 // CHECK-ERROR-NEXT: ^
2346 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2347 // CHECK-ERROR-NEXT: ldrsh x3, [wsp]
2348 // CHECK-ERROR-NEXT: ^
2354 str w7, [x12, #16384]
2355 // CHECK-ERROR: error: invalid operand for instruction
2356 // CHECK-ERROR-NEXT: strb w0, [wsp]
2357 // CHECK-ERROR-NEXT: ^
2358 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
2359 // CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1]
2360 // CHECK-ERROR-AARCH64-NEXT: ^
2361 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2362 // CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
2363 // CHECK-ERROR-AARCH64-NEXT: ^
2364 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2365 // CHECK-ERROR-NEXT: str w7, [x12, #16384]
2366 // CHECK-ERROR-NEXT: ^
2371 prfm pldl1strm, [w3, #8]
2373 // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
2374 // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
2375 // CHECK-ERROR-NEXT: prfm #-1, [sp]
2376 // CHECK-ERROR-NEXT: ^
2377 // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
2378 // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
2379 // CHECK-ERROR-NEXT: prfm #32, [sp, #8]
2380 // CHECK-ERROR-NEXT: ^
2381 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2382 // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8]
2383 // CHECK-ERROR-NEXT: ^
2384 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
2385 // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected
2386 // CHECK-ERROR-NEXT: prfm wibble, [sp]
2387 // CHECK-ERROR-NEXT: ^
2389 //------------------------------------------------------------------------------
2390 // Load/store register (register offset)
2391 //------------------------------------------------------------------------------
2394 ldr w4, [x0, x4, lsl]
2395 ldr w9, [x5, x5, uxtw]
2396 ldr w10, [x6, x9, sxtw #2]
2397 ldr w11, [x7, w2, lsl #2]
2398 ldr w12, [x8, w1, sxtx]
2399 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2400 // CHECK-ERROR-NEXT: ldr w3, [xzr, x3]
2401 // CHECK-ERROR-NEXT: ^
2402 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2403 // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl]
2404 // CHECK-ERROR-NEXT: ^
2405 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2406 // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw]
2407 // CHECK-ERROR-NEXT: ^
2408 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2409 // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2]
2410 // CHECK-ERROR-NEXT: ^
2411 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2412 // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2]
2413 // CHECK-ERROR-NEXT: ^
2414 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2415 // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx]
2416 // CHECK-ERROR-NEXT: ^
2418 ldrsb w9, [x4, x2, lsl #-1]
2419 strb w9, [x4, x2, lsl #1]
2420 // CHECK-ERROR-NEXT: error: expected integer shift amount
2421 // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1]
2422 // CHECK-ERROR-NEXT: ^
2423 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
2424 // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1]
2425 // CHECK-ERROR-NEXT: ^
2427 ldrsh w9, [x4, x2, lsl #-1]
2428 ldr h13, [x4, w2, uxtw #2]
2429 // CHECK-ERROR-NEXT: error: expected integer shift amount
2430 // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1]
2431 // CHECK-ERROR-NEXT: ^
2432 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
2433 // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2]
2434 // CHECK-ERROR-NEXT: ^
2436 str w9, [x5, w9, sxtw #-1]
2437 str s3, [sp, w9, uxtw #1]
2438 ldrsw x9, [x15, x4, sxtx #3]
2439 // CHECK-ERROR-NEXT: error: expected integer shift amount
2440 // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1]
2441 // CHECK-ERROR-NEXT: ^
2442 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2443 // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1]
2444 // CHECK-ERROR-NEXT: ^
2445 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2446 // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3]
2447 // CHECK-ERROR-NEXT: ^
2449 str xzr, [x5, x9, sxtx #-1]
2450 prfm pldl3keep, [sp, x20, lsl #2]
2451 ldr d3, [x20, wzr, uxtw #4]
2452 // CHECK-ERROR-NEXT: error: expected integer shift amount
2453 // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1]
2454 // CHECK-ERROR-NEXT: ^
2455 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
2456 // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2]
2457 // CHECK-ERROR-NEXT: ^
2458 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
2459 // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4]
2460 // CHECK-ERROR-NEXT: ^
2462 ldr q5, [sp, x2, lsl #-1]
2463 ldr q10, [x20, w4, uxtw #2]
2464 str q21, [x20, w4, uxtw #5]
2465 // CHECK-ERROR-NEXT: error: expected integer shift amount
2466 // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1]
2467 // CHECK-ERROR-NEXT: ^
2468 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2469 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
2470 // CHECK-ERROR-NEXT: ldr q10, [x20, w4, uxtw #2]
2471 // CHECK-ERROR-NEXT: ^
2472 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2473 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
2474 // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5]
2475 // CHECK-ERROR-NEXT: ^
2477 //------------------------------------------------------------------------------
2478 // Load/store register pair (offset)
2479 //------------------------------------------------------------------------------
2480 ldp w3, w2, [x4, #1]
2481 stp w1, w2, [x3, #253]
2482 stp w9, w10, [x5, #256]
2483 ldp w11, w12, [x9, #-260]
2485 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2486 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]
2487 // CHECK-ERROR-NEXT: ^
2488 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2489 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]
2490 // CHECK-ERROR-NEXT: ^
2491 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2492 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]
2493 // CHECK-ERROR-NEXT: ^
2494 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2495 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]
2496 // CHECK-ERROR-NEXT: ^
2497 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2498 // CHECK-ERROR-NEXT: stp wsp, w9, [sp]
2499 // CHECK-ERROR-NEXT: ^
2501 ldpsw x9, x2, [sp, #2]
2502 ldpsw x1, x2, [x10, #256]
2503 ldpsw x3, x4, [x11, #-260]
2504 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2505 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]
2506 // CHECK-ERROR-NEXT: ^
2507 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2508 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]
2509 // CHECK-ERROR-NEXT: ^
2510 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2511 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]
2512 // CHECK-ERROR-NEXT: ^
2514 ldp x2, x5, [sp, #4]
2515 ldp x5, x6, [x9, #512]
2516 stp x7, x8, [x10, #-520]
2517 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2518 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]
2519 // CHECK-ERROR-NEXT: ^
2520 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2521 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]
2522 // CHECK-ERROR-NEXT: ^
2523 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2524 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]
2525 // CHECK-ERROR-NEXT: ^
2529 // CHECK-ERROR: error: invalid operand for instruction
2530 // CHECK-ERROR-NEXT: ldp sp, x3, [x10]
2531 // CHECK-ERROR-NEXT: ^
2532 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2533 // CHECK-ERROR-NEXT: stp x3, sp, [x9]
2534 // CHECK-ERROR-NEXT: ^
2536 stp s3, s5, [sp, #-2]
2537 ldp s6, s26, [x4, #-260]
2538 stp s13, s19, [x5, #256]
2539 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2540 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]
2541 // CHECK-ERROR-NEXT: ^
2542 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2543 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]
2544 // CHECK-ERROR-NEXT: ^
2545 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2546 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]
2547 // CHECK-ERROR-NEXT: ^
2550 ldp d5, d6, [x0, #512]
2551 stp d7, d8, [x0, #-520]
2552 // CHECK-ERROR: error: invalid operand for instruction
2553 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr]
2554 // CHECK-ERROR-NEXT: ^
2555 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2556 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]
2557 // CHECK-ERROR-NEXT: ^
2558 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2559 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]
2560 // CHECK-ERROR-NEXT: ^
2563 ldp q3, q5, [sp, #8]
2564 stp q20, q25, [x5, #1024]
2565 ldp q30, q15, [x23, #-1040]
2566 // CHECK-ERROR: error: invalid operand for instruction
2567 // CHECK-ERROR-NEXT: ldp d3, q2, [sp]
2568 // CHECK-ERROR-NEXT: ^
2569 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2570 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]
2571 // CHECK-ERROR-NEXT: ^
2572 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2573 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]
2574 // CHECK-ERROR-NEXT: ^
2575 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2576 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]
2577 // CHECK-ERROR-NEXT: ^
2579 //------------------------------------------------------------------------------
2580 // Load/store register pair (post-indexed)
2581 //------------------------------------------------------------------------------
2583 ldp w3, w2, [x4], #1
2584 stp w1, w2, [x3], #253
2585 stp w9, w10, [x5], #256
2586 ldp w11, w12, [x9], #-260
2587 stp wsp, w9, [sp], #0
2588 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2589 // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1
2590 // CHECK-ERROR-NEXT: ^
2591 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2592 // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253
2593 // CHECK-ERROR-NEXT: ^
2594 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2595 // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256
2596 // CHECK-ERROR-NEXT: ^
2597 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2598 // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260
2599 // CHECK-ERROR-NEXT: ^
2600 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2601 // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0
2602 // CHECK-ERROR-NEXT: ^
2604 ldpsw x9, x2, [sp], #2
2605 ldpsw x1, x2, [x10], #256
2606 ldpsw x3, x4, [x11], #-260
2607 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2608 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2
2609 // CHECK-ERROR-NEXT: ^
2610 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2611 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256
2612 // CHECK-ERROR-NEXT: ^
2613 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2614 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260
2615 // CHECK-ERROR-NEXT: ^
2617 ldp x2, x5, [sp], #4
2618 ldp x5, x6, [x9], #512
2619 stp x7, x8, [x10], #-520
2620 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2621 // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4
2622 // CHECK-ERROR-NEXT: ^
2623 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2624 // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512
2625 // CHECK-ERROR-NEXT: ^
2626 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2627 // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520
2628 // CHECK-ERROR-NEXT: ^
2630 ldp sp, x3, [x10], #0
2631 stp x3, sp, [x9], #0
2632 // CHECK-ERROR: error: invalid operand for instruction
2633 // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0
2634 // CHECK-ERROR-NEXT: ^
2635 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2636 // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0
2637 // CHECK-ERROR-NEXT: ^
2639 stp s3, s5, [sp], #-2
2640 ldp s6, s26, [x4], #-260
2641 stp s13, s19, [x5], #256
2642 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2643 // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2
2644 // CHECK-ERROR-NEXT: ^
2645 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2646 // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260
2647 // CHECK-ERROR-NEXT: ^
2648 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2649 // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256
2650 // CHECK-ERROR-NEXT: ^
2652 ldp d3, d4, [xzr], #0
2653 ldp d5, d6, [x0], #512
2654 stp d7, d8, [x0], #-520
2655 // CHECK-ERROR: error: invalid operand for instruction
2656 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0
2657 // CHECK-ERROR-NEXT: ^
2658 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2659 // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512
2660 // CHECK-ERROR-NEXT: ^
2661 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2662 // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520
2663 // CHECK-ERROR-NEXT: ^
2665 ldp d3, q2, [sp], #0
2666 ldp q3, q5, [sp], #8
2667 stp q20, q25, [x5], #1024
2668 ldp q30, q15, [x23], #-1040
2669 // CHECK-ERROR: error: invalid operand for instruction
2670 // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0
2671 // CHECK-ERROR-NEXT: ^
2672 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2673 // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8
2674 // CHECK-ERROR-NEXT: ^
2675 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2676 // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024
2677 // CHECK-ERROR-NEXT: ^
2678 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2679 // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040
2680 // CHECK-ERROR-NEXT: ^
2682 //------------------------------------------------------------------------------
2683 // Load/store register pair (pre-indexed)
2684 //------------------------------------------------------------------------------
2686 ldp w3, w2, [x4, #1]!
2687 stp w1, w2, [x3, #253]!
2688 stp w9, w10, [x5, #256]!
2689 ldp w11, w12, [x9, #-260]!
2690 stp wsp, w9, [sp, #0]!
2691 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2692 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]!
2693 // CHECK-ERROR-NEXT: ^
2694 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2695 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]!
2696 // CHECK-ERROR-NEXT: ^
2697 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2698 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]!
2699 // CHECK-ERROR-NEXT: ^
2700 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2701 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]!
2702 // CHECK-ERROR-NEXT: ^
2703 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2704 // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]!
2705 // CHECK-ERROR-NEXT: ^
2707 ldpsw x9, x2, [sp, #2]!
2708 ldpsw x1, x2, [x10, #256]!
2709 ldpsw x3, x4, [x11, #-260]!
2710 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2711 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]!
2712 // CHECK-ERROR-NEXT: ^
2713 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2714 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]!
2715 // CHECK-ERROR-NEXT: ^
2716 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2717 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]!
2718 // CHECK-ERROR-NEXT: ^
2720 ldp x2, x5, [sp, #4]!
2721 ldp x5, x6, [x9, #512]!
2722 stp x7, x8, [x10, #-520]!
2723 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2724 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]!
2725 // CHECK-ERROR-NEXT: ^
2726 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2727 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]!
2728 // CHECK-ERROR-NEXT: ^
2729 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2730 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]!
2731 // CHECK-ERROR-NEXT: ^
2733 ldp sp, x3, [x10, #0]!
2734 stp x3, sp, [x9, #0]!
2735 // CHECK-ERROR: error: invalid operand for instruction
2736 // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]!
2737 // CHECK-ERROR-NEXT: ^
2738 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2739 // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]!
2740 // CHECK-ERROR-NEXT: ^
2742 stp s3, s5, [sp, #-2]!
2743 ldp s6, s26, [x4, #-260]!
2744 stp s13, s19, [x5, #256]!
2745 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2746 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]!
2747 // CHECK-ERROR-NEXT: ^
2748 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2749 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]!
2750 // CHECK-ERROR-NEXT: ^
2751 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2752 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]!
2753 // CHECK-ERROR-NEXT: ^
2755 ldp d3, d4, [xzr, #0]!
2756 ldp d5, d6, [x0, #512]!
2757 stp d7, d8, [x0, #-520]!
2758 // CHECK-ERROR: error: invalid operand for instruction
2759 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]!
2760 // CHECK-ERROR-NEXT: ^
2761 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2762 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]!
2763 // CHECK-ERROR-NEXT: ^
2764 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2765 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]!
2766 // CHECK-ERROR-NEXT: ^
2768 ldp d3, q2, [sp, #0]!
2769 ldp q3, q5, [sp, #8]!
2770 stp q20, q25, [x5, #1024]!
2771 ldp q30, q15, [x23, #-1040]!
2772 // CHECK-ERROR: error: invalid operand for instruction
2773 // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]!
2774 // CHECK-ERROR-NEXT: ^
2775 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2776 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]!
2777 // CHECK-ERROR-NEXT: ^
2778 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2779 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]!
2780 // CHECK-ERROR-NEXT: ^
2781 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2782 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]!
2783 // CHECK-ERROR-NEXT: ^
2785 //------------------------------------------------------------------------------
2786 // Load/store register pair (offset)
2787 //------------------------------------------------------------------------------
2788 ldnp w3, w2, [x4, #1]
2789 stnp w1, w2, [x3, #253]
2790 stnp w9, w10, [x5, #256]
2791 ldnp w11, w12, [x9, #-260]
2793 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2794 // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1]
2795 // CHECK-ERROR-NEXT: ^
2796 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2797 // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253]
2798 // CHECK-ERROR-NEXT: ^
2799 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2800 // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256]
2801 // CHECK-ERROR-NEXT: ^
2802 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2803 // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260]
2804 // CHECK-ERROR-NEXT: ^
2805 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2806 // CHECK-ERROR-NEXT: stnp wsp, w9, [sp]
2807 // CHECK-ERROR-NEXT: ^
2809 ldnp x2, x5, [sp, #4]
2810 ldnp x5, x6, [x9, #512]
2811 stnp x7, x8, [x10, #-520]
2812 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2813 // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4]
2814 // CHECK-ERROR-NEXT: ^
2815 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2816 // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512]
2817 // CHECK-ERROR-NEXT: ^
2818 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2819 // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520]
2820 // CHECK-ERROR-NEXT: ^
2824 // CHECK-ERROR: error: invalid operand for instruction
2825 // CHECK-ERROR-NEXT: ldnp sp, x3, [x10]
2826 // CHECK-ERROR-NEXT: ^
2827 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2828 // CHECK-ERROR-NEXT: stnp x3, sp, [x9]
2829 // CHECK-ERROR-NEXT: ^
2831 stnp s3, s5, [sp, #-2]
2832 ldnp s6, s26, [x4, #-260]
2833 stnp s13, s19, [x5, #256]
2834 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2835 // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2]
2836 // CHECK-ERROR-NEXT: ^
2837 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2838 // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260]
2839 // CHECK-ERROR-NEXT: ^
2840 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2841 // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256]
2842 // CHECK-ERROR-NEXT: ^
2845 ldnp d5, d6, [x0, #512]
2846 stnp d7, d8, [x0, #-520]
2847 // CHECK-ERROR: error: invalid operand for instruction
2848 // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr]
2849 // CHECK-ERROR-NEXT: ^
2850 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2851 // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512]
2852 // CHECK-ERROR-NEXT: ^
2853 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2854 // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520]
2855 // CHECK-ERROR-NEXT: ^
2858 ldnp q3, q5, [sp, #8]
2859 stnp q20, q25, [x5, #1024]
2860 ldnp q30, q15, [x23, #-1040]
2861 // CHECK-ERROR: error: invalid operand for instruction
2862 // CHECK-ERROR-NEXT: ldnp d3, q2, [sp]
2863 // CHECK-ERROR-NEXT: ^
2864 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2865 // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8]
2866 // CHECK-ERROR-NEXT: ^
2867 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2868 // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024]
2869 // CHECK-ERROR-NEXT: ^
2870 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2871 // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040]
2872 // CHECK-ERROR-NEXT: ^
2874 //------------------------------------------------------------------------------
2875 // Logical (shifted register)
2876 //------------------------------------------------------------------------------
2877 orr w0, w1, #0xffffffff
2878 and x3, x5, #0xffffffffffffffff
2879 // CHECK-ERROR: error: expected compatible register or logical immediate
2880 // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff
2881 // CHECK-ERROR-NEXT: ^
2882 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2883 // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff
2884 // CHECK-ERROR-NEXT: ^
2888 // CHECK-ERROR: error: expected compatible register or logical immediate
2889 // CHECK-ERROR-NEXT: ands w3, w9, #0x0
2890 // CHECK-ERROR-NEXT: ^
2891 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2892 // CHECK-ERROR-NEXT: eor x2, x0, #0x0
2893 // CHECK-ERROR-NEXT: ^
2896 eor x9, x20, #0x1234
2897 // CHECK-ERROR: error: expected compatible register or logical immediate
2898 // CHECK-ERROR-NEXT: eor w3, w5, #0x83
2899 // CHECK-ERROR-NEXT: ^
2900 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2901 // CHECK-ERROR-NEXT: eor x9, x20, #0x1234
2902 // CHECK-ERROR-NEXT: ^
2904 and wzr, w4, 0xffff0000
2905 eor xzr, x9, #0xffff0000ffff0000
2906 // CHECK-ERROR: error: invalid operand for instruction
2907 // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000
2908 // CHECK-ERROR-NEXT: ^
2909 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2910 // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000
2911 // CHECK-ERROR-NEXT: ^
2913 orr w3, wsp, #0xf0f0f0f0
2914 ands x3, sp, #0xaaaaaaaaaaaaaaaa
2915 // CHECK-ERROR: error: invalid operand for instruction
2916 // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0
2917 // CHECK-ERROR-NEXT: ^
2918 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2919 // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa
2920 // CHECK-ERROR-NEXT: ^
2922 tst sp, #0xe0e0e0e0e0e0e0e0
2923 // CHECK-ERROR: error: invalid operand for instruction
2924 // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0
2925 // CHECK-ERROR-NEXT: ^
2927 // movi has been removed from the specification. Make sure it's really gone.
2928 movi wzr, #0x44444444
2930 movi x9, #0x0000ffff00000000
2931 // CHECK-ERROR: error: invalid operand for instruction
2932 // CHECK-ERROR-NEXT: movi wzr, #0x44444444
2933 // CHECK-ERROR-NEXT: ^
2934 // CHECK-ERROR: error: invalid operand for instruction
2935 // CHECK-ERROR-NEXT: movi w3, #0xffff
2936 // CHECK-ERROR-NEXT: ^
2937 // CHECK-ERROR: error: invalid operand for instruction
2938 // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000
2939 // CHECK-ERROR-NEXT: ^
2941 //------------------------------------------------------------------------------
2942 // Logical (shifted register)
2943 //------------------------------------------------------------------------------
2945 //// Out of range shifts
2946 and w2, w24, w6, lsl #-1
2947 and w4, w6, w12, lsl #32
2948 and x4, x6, x12, lsl #64
2949 and x2, x5, x11, asr
2950 // CHECK-ERROR: error: expected integer shift amount
2951 // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1
2952 // CHECK-ERROR-NEXT: ^
2953 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
2954 // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32
2955 // CHECK-ERROR-NEXT: ^
2956 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
2957 // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64
2958 // CHECK-ERROR-NEXT: ^
2959 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2960 // CHECK-ERROR-NEXT: and x2, x5, x11, asr
2961 // CHECK-ERROR-NEXT: ^
2965 bics x20, sp, x9, lsr #0
2966 orn x2, x6, sp, lsl #3
2967 // CHECK-ERROR: error: invalid operand for instruction
2968 // CHECK-ERROR-NEXT: orn wsp, w3, w5
2969 // CHECK-ERROR-NEXT: ^
2970 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2971 // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0
2972 // CHECK-ERROR-NEXT: ^
2973 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2974 // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3
2975 // CHECK-ERROR-NEXT: ^
2977 //// Mismatched registers
2980 and x4, x5, w6, lsl #12
2981 orr w2, w5, x7, asr #0
2982 // CHECK-ERROR: error: invalid operand for instruction
2983 // CHECK-ERROR-NEXT: and x3, w2, w1
2984 // CHECK-ERROR-NEXT: ^
2985 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2986 // CHECK-ERROR-NEXT: ands w1, x12, w2
2987 // CHECK-ERROR-NEXT: ^
2988 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2989 // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12
2990 // CHECK-ERROR-NEXT: ^
2991 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2992 // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0
2993 // CHECK-ERROR-NEXT: ^
2995 //// Shifts should not be allowed on mov
2997 // CHECK-ERROR: error: invalid operand for instruction
2998 // CHECK-ERROR-NEXT: mov w3, w7, lsl #13
2999 // CHECK-ERROR-NEXT: ^
3001 //------------------------------------------------------------------------------
3002 // Move wide (immediate)
3003 //------------------------------------------------------------------------------
3005 movz w3, #65536, lsl #0
3008 movk w3, #0, lsl #-1
3009 movn w2, #-1, lsl #0
3011 movk w3, #1, lsl #32
3012 movn x2, #12, lsl #64
3013 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3014 // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0
3015 // CHECK-ERROR-NEXT: ^
3016 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3017 // CHECK-ERROR-NEXT: movz w4, #65536
3018 // CHECK-ERROR-NEXT: ^
3019 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3020 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
3021 // CHECK-ERROR-NEXT: movn w1, #2, lsl #1
3022 // CHECK-ERROR-NEXT: ^
3023 // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
3024 // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
3025 // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1
3026 // CHECK-ERROR-NEXT: ^
3027 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3028 // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0
3029 // CHECK-ERROR-NEXT: ^
3030 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3031 // CHECK-ERROR-NEXT: movz x3, #-1
3032 // CHECK-ERROR-NEXT: ^
3033 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3034 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
3035 // CHECK-ERROR-NEXT: movk w3, #1, lsl #32
3036 // CHECK-ERROR-NEXT: ^
3037 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3038 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
3039 // CHECK-ERROR-NEXT: movn x2, #12, lsl #64
3040 // CHECK-ERROR-NEXT: ^
3042 movz x12, #:abs_g0:sym, lsl #16
3043 movz x12, #:abs_g0:sym, lsl #0
3044 movn x2, #:abs_g0:sym
3045 movk w3, #:abs_g0:sym
3046 movz x3, #:abs_g0_nc:sym
3047 movn x4, #:abs_g0_nc:sym
3048 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3049 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16
3050 // CHECK-ERROR-NEXT: ^
3051 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3052 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0
3053 // CHECK-ERROR-NEXT: ^
3054 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3055 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g0:sym
3056 // CHECK-ERROR-AARCH64-NEXT: ^
3057 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3058 // CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym
3059 // CHECK-ERROR-NEXT: ^
3060 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3061 // CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym
3062 // CHECK-ERROR-NEXT: ^
3063 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3064 // CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym
3065 // CHECK-ERROR-NEXT: ^
3067 movn x2, #:abs_g1:sym
3068 movk w3, #:abs_g1:sym
3069 movz x3, #:abs_g1_nc:sym
3070 movn x4, #:abs_g1_nc:sym
3071 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3072 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g1:sym
3073 // CHECK-ERROR-AARCH64-NEXT: ^
3074 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3075 // CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym
3076 // CHECK-ERROR-NEXT: ^
3077 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3078 // CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym
3079 // CHECK-ERROR-NEXT: ^
3080 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3081 // CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym
3082 // CHECK-ERROR-NEXT: ^
3084 movz w12, #:abs_g2:sym
3085 movn x12, #:abs_g2:sym
3086 movk x13, #:abs_g2:sym
3087 movk w3, #:abs_g2_nc:sym
3088 movz x13, #:abs_g2_nc:sym
3089 movn x24, #:abs_g2_nc:sym
3090 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3091 // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym
3092 // CHECK-ERROR-NEXT: ^
3093 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3094 // CHECK-ERROR-AARCH64-NEXT: movn x12, #:abs_g2:sym
3095 // CHECK-ERROR-AARCH64-NEXT: ^
3096 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3097 // CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym
3098 // CHECK-ERROR-NEXT: ^
3099 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3100 // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym
3101 // CHECK-ERROR-NEXT: ^
3102 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3103 // CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym
3104 // CHECK-ERROR-NEXT: ^
3105 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3106 // CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym
3107 // CHECK-ERROR-NEXT: ^
3109 movn x19, #:abs_g3:sym
3110 movz w20, #:abs_g3:sym
3111 movk w21, #:abs_g3:sym
3112 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3113 // CHECK-ERROR-AARCH64-NEXT: movn x19, #:abs_g3:sym
3114 // CHECK-ERROR-AARCH64-NEXT: ^
3115 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3116 // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym
3117 // CHECK-ERROR-NEXT: ^
3118 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3119 // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym
3120 // CHECK-ERROR-NEXT: ^
3122 movk x19, #:abs_g0_s:sym
3123 movk w23, #:abs_g0_s:sym
3124 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3125 // CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym
3126 // CHECK-ERROR-NEXT: ^
3127 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3128 // CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym
3129 // CHECK-ERROR-NEXT: ^
3131 movk x19, #:abs_g1_s:sym
3132 movk w23, #:abs_g1_s:sym
3133 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3134 // CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym
3135 // CHECK-ERROR-NEXT: ^
3136 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3137 // CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym
3138 // CHECK-ERROR-NEXT: ^
3140 movz w2, #:abs_g2_s:sym
3141 movn w29, #:abs_g2_s:sym
3142 movk x19, #:abs_g2_s:sym
3143 movk w23, #:abs_g2_s:sym
3144 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3145 // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym
3146 // CHECK-ERROR-NEXT: ^
3147 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3148 // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym
3149 // CHECK-ERROR-NEXT: ^
3150 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3151 // CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym
3152 // CHECK-ERROR-NEXT: ^
3153 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3154 // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym
3155 // CHECK-ERROR-NEXT: ^
3157 //------------------------------------------------------------------------------
3158 // PC-relative addressing
3159 //------------------------------------------------------------------------------
3161 adr sp, loc // expects xzr
3162 adrp x3, #20 // Immediate unaligned
3163 adrp w2, loc // 64-bit register needed
3164 // CHECK-ERROR: error: invalid operand for instruction
3165 // CHECK-ERROR-NEXT: adr sp, loc
3166 // CHECK-ERROR-NEXT: ^
3167 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3168 // CHECK-ERROR-NEXT: adrp x3, #20
3169 // CHECK-ERROR-NEXT: ^
3170 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3171 // CHECK-ERROR-NEXT: adrp w2, loc
3172 // CHECK-ERROR-NEXT: ^
3176 adrp x9, #4294967296
3177 adrp x20, #-4294971392
3178 // CHECK-ERROR: error: expected label or encodable integer pc offset
3179 // CHECK-ERROR-NEXT: adr x9, #1048576
3180 // CHECK-ERROR-NEXT: ^
3181 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3182 // CHECK-ERROR-NEXT: adr x2, #-1048577
3183 // CHECK-ERROR-NEXT: ^
3184 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3185 // CHECK-ERROR-NEXT: adrp x9, #4294967296
3186 // CHECK-ERROR-NEXT: ^
3187 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3188 // CHECK-ERROR-NEXT: adrp x20, #-4294971392
3189 // CHECK-ERROR-NEXT: ^
3191 //------------------------------------------------------------------------------
3193 //------------------------------------------------------------------------------
3197 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
3198 // CHECK-ERROR-NEXT: hint #-1
3199 // CHECK-ERROR-NEXT: ^
3200 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
3201 // CHECK-ERROR-NEXT: hint #128
3202 // CHECK-ERROR-NEXT: ^
3206 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3207 // CHECK-ERROR-NEXT: clrex #-1
3208 // CHECK-ERROR-NEXT: ^
3209 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3210 // CHECK-ERROR-NEXT: clrex #16
3211 // CHECK-ERROR-NEXT: ^
3217 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3218 // CHECK-ERROR-NEXT: dsb #-1
3219 // CHECK-ERROR-NEXT: ^
3220 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3221 // CHECK-ERROR-NEXT: dsb #16
3222 // CHECK-ERROR-NEXT: ^
3223 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3224 // CHECK-ERROR-NEXT: dmb #-1
3225 // CHECK-ERROR-NEXT: ^
3226 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3227 // CHECK-ERROR-NEXT: dmb #16
3228 // CHECK-ERROR-NEXT: ^
3232 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3233 // CHECK-ERROR-NEXT: isb #-1
3234 // CHECK-ERROR-NEXT: ^
3235 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3236 // CHECK-ERROR-NEXT: isb #16
3237 // CHECK-ERROR-NEXT: ^
3243 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3244 // CHECK-ERROR-NEXT: msr daifset, x4
3245 // CHECK-ERROR-NEXT: ^
3246 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3247 // CHECK-ERROR-NEXT: msr spsel, #-1
3248 // CHECK-ERROR-NEXT: ^
3249 // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}}
3250 // CHECK-ERROR-NEXT: msr spsel #-1
3251 // CHECK-ERROR-NEXT: ^
3252 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3253 // CHECK-ERROR-NEXT: msr daifclr, #16
3254 // CHECK-ERROR-NEXT: ^
3256 sys #8, c1, c2, #7, x9
3257 sys #3, c16, c2, #3, x10
3258 sys #2, c11, c16, #5
3259 sys #4, c9, c8, #8, xzr
3260 sysl x11, #8, c1, c2, #7
3261 sysl x13, #3, c16, c2, #3
3262 sysl x9, #2, c11, c16, #5
3263 sysl x4, #4, c9, c8, #8
3264 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3265 // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9
3266 // CHECK-ERROR-NEXT: ^
3267 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3268 // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10
3269 // CHECK-ERROR-NEXT: ^
3270 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3271 // CHECK-ERROR-NEXT: sys #2, c11, c16, #5
3272 // CHECK-ERROR-NEXT: ^
3273 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3274 // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr
3275 // CHECK-ERROR-NEXT: ^
3276 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3277 // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7
3278 // CHECK-ERROR-NEXT: ^
3279 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3280 // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3
3281 // CHECK-ERROR-NEXT: ^
3282 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3283 // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5
3284 // CHECK-ERROR-NEXT: ^
3285 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3286 // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8
3287 // CHECK-ERROR-NEXT: ^
3292 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
3293 // CHECK-ERROR-NEXT: ic ialluis, x2
3294 // CHECK-ERROR-NEXT: ^
3295 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
3296 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
3297 // CHECK-ERROR-NEXT: ic allu, x7
3298 // CHECK-ERROR-NEXT: ^
3299 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
3300 // CHECK-ERROR-NEXT: ic ivau
3301 // CHECK-ERROR-NEXT: ^
3317 tlbi VMALLS12E1IS, xzr
3333 tlbi VMALLS12E1, x15
3335 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3336 // CHECK-ERROR-NEXT: tlbi IPAS2E1IS
3337 // CHECK-ERROR-NEXT: ^
3338 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3339 // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS
3340 // CHECK-ERROR-NEXT: ^
3341 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3342 // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12
3343 // CHECK-ERROR-NEXT: ^
3344 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3345 // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11
3346 // CHECK-ERROR-NEXT: ^
3347 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3348 // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20
3349 // CHECK-ERROR-NEXT: ^
3350 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3351 // CHECK-ERROR-NEXT: tlbi VAE1IS
3352 // CHECK-ERROR-NEXT: ^
3353 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3354 // CHECK-ERROR-NEXT: tlbi VAE2IS
3355 // CHECK-ERROR-NEXT: ^
3356 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3357 // CHECK-ERROR-NEXT: tlbi VAE3IS
3358 // CHECK-ERROR-NEXT: ^
3359 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3360 // CHECK-ERROR-NEXT: tlbi ASIDE1IS
3361 // CHECK-ERROR-NEXT: ^
3362 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3363 // CHECK-ERROR-NEXT: tlbi VAAE1IS
3364 // CHECK-ERROR-NEXT: ^
3365 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3366 // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0
3367 // CHECK-ERROR-NEXT: ^
3368 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3369 // CHECK-ERROR-NEXT: tlbi VALE1IS
3370 // CHECK-ERROR-NEXT: ^
3371 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3372 // CHECK-ERROR-NEXT: tlbi VALE2IS
3373 // CHECK-ERROR-NEXT: ^
3374 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3375 // CHECK-ERROR-NEXT: tlbi VALE3IS
3376 // CHECK-ERROR-NEXT: ^
3377 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3378 // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr
3379 // CHECK-ERROR-NEXT: ^
3380 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3381 // CHECK-ERROR-NEXT: tlbi VAALE1IS
3382 // CHECK-ERROR-NEXT: ^
3383 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3384 // CHECK-ERROR-NEXT: tlbi IPAS2E1
3385 // CHECK-ERROR-NEXT: ^
3386 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3387 // CHECK-ERROR-NEXT: tlbi IPAS2LE1
3388 // CHECK-ERROR-NEXT: ^
3389 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3390 // CHECK-ERROR-NEXT: tlbi VMALLE1, x9
3391 // CHECK-ERROR-NEXT: ^
3392 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3393 // CHECK-ERROR-NEXT: tlbi ALLE2, x10
3394 // CHECK-ERROR-NEXT: ^
3395 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3396 // CHECK-ERROR-NEXT: tlbi ALLE3, x11
3397 // CHECK-ERROR-NEXT: ^
3398 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3399 // CHECK-ERROR-NEXT: tlbi VAE1
3400 // CHECK-ERROR-NEXT: ^
3401 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3402 // CHECK-ERROR-NEXT: tlbi VAE2
3403 // CHECK-ERROR-NEXT: ^
3404 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3405 // CHECK-ERROR-NEXT: tlbi VAE3
3406 // CHECK-ERROR-NEXT: ^
3407 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3408 // CHECK-ERROR-NEXT: tlbi ASIDE1
3409 // CHECK-ERROR-NEXT: ^
3410 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3411 // CHECK-ERROR-NEXT: tlbi VAAE1
3412 // CHECK-ERROR-NEXT: ^
3413 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3414 // CHECK-ERROR-NEXT: tlbi ALLE1, x25
3415 // CHECK-ERROR-NEXT: ^
3416 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3417 // CHECK-ERROR-NEXT: tlbi VALE1
3418 // CHECK-ERROR-NEXT: ^
3419 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3420 // CHECK-ERROR-NEXT: tlbi VALE2
3421 // CHECK-ERROR-NEXT: ^
3422 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3423 // CHECK-ERROR-NEXT: tlbi VALE3
3424 // CHECK-ERROR-NEXT: ^
3425 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3426 // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15
3427 // CHECK-ERROR-NEXT: ^
3428 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3429 // CHECK-ERROR-NEXT: tlbi VAALE1
3430 // CHECK-ERROR-NEXT: ^
3432 // For the MSR/MRS instructions, first make sure read-only and
3433 // write-only registers actually are.
3435 msr DBGDTRRX_EL0, x12
3438 msr DBGAUTHSTATUS_EL1, x12
3447 msr ID_PFR0_EL1, x12
3448 msr ID_PFR1_EL1, x12
3449 msr ID_DFR0_EL1, x12
3450 msr ID_AFR0_EL1, x12
3451 msr ID_MMFR0_EL1, x12
3452 msr ID_MMFR1_EL1, x12
3453 msr ID_MMFR2_EL1, x12
3454 msr ID_MMFR3_EL1, x12
3455 msr ID_ISAR0_EL1, x12
3456 msr ID_ISAR1_EL1, x12
3457 msr ID_ISAR2_EL1, x12
3458 msr ID_ISAR3_EL1, x12
3459 msr ID_ISAR4_EL1, x12
3460 msr ID_ISAR5_EL1, x12
3464 msr ID_AA64PFR0_EL1, x12
3465 msr ID_AA64PFR1_EL1, x12
3466 msr ID_AA64DFR0_EL1, x12
3467 msr ID_AA64DFR1_EL1, x12
3468 msr ID_AA64AFR0_EL1, x12
3469 msr ID_AA64AFR1_EL1, x12
3470 msr ID_AA64ISAR0_EL1, x12
3471 msr ID_AA64ISAR1_EL1, x12
3472 msr ID_AA64MMFR0_EL1, x12
3473 msr ID_AA64MMFR1_EL1, x12
3474 msr PMCEID0_EL0, x12
3475 msr PMCEID1_EL0, x12
3482 msr PMEVCNTR31_EL0, x12
3483 msr PMEVTYPER31_EL0, x12
3484 // CHECK-ERROR: error: expected writable system register or pstate
3485 // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12
3486 // CHECK-ERROR-NEXT: ^
3487 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3488 // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12
3489 // CHECK-ERROR-NEXT: ^
3490 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3491 // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12
3492 // CHECK-ERROR-NEXT: ^
3493 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3494 // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12
3495 // CHECK-ERROR-NEXT: ^
3496 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3497 // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12
3498 // CHECK-ERROR-NEXT: ^
3499 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3500 // CHECK-ERROR-NEXT: msr MIDR_EL1, x12
3501 // CHECK-ERROR-NEXT: ^
3502 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3503 // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12
3504 // CHECK-ERROR-NEXT: ^
3505 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3506 // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12
3507 // CHECK-ERROR-NEXT: ^
3508 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3509 // CHECK-ERROR-NEXT: msr CTR_EL0, x12
3510 // CHECK-ERROR-NEXT: ^
3511 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3512 // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12
3513 // CHECK-ERROR-NEXT: ^
3514 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3515 // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12
3516 // CHECK-ERROR-NEXT: ^
3517 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3518 // CHECK-ERROR-NEXT: msr AIDR_EL1, x12
3519 // CHECK-ERROR-NEXT: ^
3520 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3521 // CHECK-ERROR-NEXT: msr DCZID_EL0, x12
3522 // CHECK-ERROR-NEXT: ^
3523 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3524 // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12
3525 // CHECK-ERROR-NEXT: ^
3526 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3527 // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12
3528 // CHECK-ERROR-NEXT: ^
3529 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3530 // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12
3531 // CHECK-ERROR-NEXT: ^
3532 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3533 // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12
3534 // CHECK-ERROR-NEXT: ^
3535 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3536 // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12
3537 // CHECK-ERROR-NEXT: ^
3538 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3539 // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12
3540 // CHECK-ERROR-NEXT: ^
3541 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3542 // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12
3543 // CHECK-ERROR-NEXT: ^
3544 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3545 // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12
3546 // CHECK-ERROR-NEXT: ^
3547 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3548 // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12
3549 // CHECK-ERROR-NEXT: ^
3550 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3551 // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12
3552 // CHECK-ERROR-NEXT: ^
3553 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3554 // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12
3555 // CHECK-ERROR-NEXT: ^
3556 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3557 // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12
3558 // CHECK-ERROR-NEXT: ^
3559 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3560 // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12
3561 // CHECK-ERROR-NEXT: ^
3562 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3563 // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12
3564 // CHECK-ERROR-NEXT: ^
3565 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3566 // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12
3567 // CHECK-ERROR-NEXT: ^
3568 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3569 // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12
3570 // CHECK-ERROR-NEXT: ^
3571 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3572 // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12
3573 // CHECK-ERROR-NEXT: ^
3574 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3575 // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12
3576 // CHECK-ERROR-NEXT: ^
3577 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3578 // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12
3579 // CHECK-ERROR-NEXT: ^
3580 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3581 // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12
3582 // CHECK-ERROR-NEXT: ^
3583 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3584 // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12
3585 // CHECK-ERROR-NEXT: ^
3586 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3587 // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12
3588 // CHECK-ERROR-NEXT: ^
3589 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3590 // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12
3591 // CHECK-ERROR-NEXT: ^
3592 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3593 // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12
3594 // CHECK-ERROR-NEXT: ^
3595 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3596 // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12
3597 // CHECK-ERROR-NEXT: ^
3598 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3599 // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12
3600 // CHECK-ERROR-NEXT: ^
3601 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3602 // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12
3603 // CHECK-ERROR-NEXT: ^
3604 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3605 // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12
3606 // CHECK-ERROR-NEXT: ^
3607 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3608 // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12
3609 // CHECK-ERROR-NEXT: ^
3610 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3611 // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12
3612 // CHECK-ERROR-NEXT: ^
3613 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3614 // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12
3615 // CHECK-ERROR-NEXT: ^
3616 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3617 // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12
3618 // CHECK-ERROR-NEXT: ^
3619 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3620 // CHECK-ERROR-NEXT: msr ISR_EL1, x12
3621 // CHECK-ERROR-NEXT: ^
3622 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3623 // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12
3624 // CHECK-ERROR-NEXT: ^
3625 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3626 // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12
3627 // CHECK-ERROR-NEXT: ^
3628 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3629 // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12
3630 // CHECK-ERROR-NEXT: ^
3631 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3632 // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12
3633 // CHECK-ERROR-NEXT: ^
3635 mrs x9, DBGDTRTX_EL0
3638 mrs x9, PMEVCNTR31_EL0
3639 mrs x9, PMEVTYPER31_EL0
3640 // CHECK-ERROR: error: expected readable system register
3641 // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0
3642 // CHECK-ERROR-NEXT: ^
3643 // CHECK-ERROR-NEXT: error: expected readable system register
3644 // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1
3645 // CHECK-ERROR-NEXT: ^
3646 // CHECK-ERROR-NEXT: error: expected readable system register
3647 // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0
3648 // CHECK-ERROR-NEXT: ^
3649 // CHECK-ERROR-NEXT: error: expected readable system register
3650 // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0
3651 // CHECK-ERROR-NEXT: ^
3652 // CHECK-ERROR-NEXT: error: expected readable system register
3653 // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0
3654 // CHECK-ERROR-NEXT: ^
3656 // Now check some invalid generic names
3657 mrs xzr, s2_5_c11_c13_2
3658 mrs x12, s3_8_c11_c13_2
3659 mrs x13, s3_3_c12_c13_2
3660 mrs x19, s3_2_c15_c16_2
3661 mrs x30, s3_2_c15_c1_8
3662 // CHECK-ERROR-NEXT: error: expected readable system register
3663 // CHECK-ERROR-NEXT: mrs xzr, s2_5_c11_c13_2
3664 // CHECK-ERROR-NEXT: ^
3665 // CHECK-ERROR-NEXT: error: expected readable system register
3666 // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2
3667 // CHECK-ERROR-NEXT: ^
3668 // CHECK-ERROR-NEXT: error: expected readable system register
3669 // CHECK-ERROR-NEXT: mrs x13, s3_3_c12_c13_2
3670 // CHECK-ERROR-NEXT: ^
3671 // CHECK-ERROR-NEXT: error: expected readable system register
3672 // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2
3673 // CHECK-ERROR-NEXT: ^
3674 // CHECK-ERROR-NEXT: error: expected readable system register
3675 // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8
3676 // CHECK-ERROR-NEXT: ^
3678 //------------------------------------------------------------------------------
3679 // Test and branch (immediate)
3680 //------------------------------------------------------------------------------
3683 tbz w3, #32, nowhere
3686 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
3687 // CHECK-ERROR-NEXT: tbz w3, #-1, addr
3688 // CHECK-ERROR-NEXT: ^
3689 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3690 // CHECK-ERROR-NEXT: tbz w3, #32, nowhere
3691 // CHECK-ERROR-NEXT: ^
3692 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3693 // CHECK-ERROR-NEXT: tbz x9, #-1, there
3694 // CHECK-ERROR-NEXT: ^
3695 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3696 // CHECK-ERROR-NEXT: tbz x20, #64, dont
3697 // CHECK-ERROR-NEXT: ^
3700 tbnz w3, #32, nowhere
3703 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3704 // CHECK-ERROR-NEXT: tbnz w3, #-1, addr
3705 // CHECK-ERROR-NEXT: ^
3706 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3707 // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere
3708 // CHECK-ERROR-NEXT: ^
3709 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3710 // CHECK-ERROR-NEXT: tbnz x9, #-1, there
3711 // CHECK-ERROR-NEXT: ^
3712 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3713 // CHECK-ERROR-NEXT: tbnz x20, #64, dont
3715 //------------------------------------------------------------------------------
3716 // Unconditional branch (immediate)
3717 //------------------------------------------------------------------------------
3722 // CHECK-ERROR: error: expected label or encodable integer pc offset
3723 // CHECK-ERROR-NEXT: b #134217728
3724 // CHECK-ERROR-NEXT: ^
3725 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3726 // CHECK-ERROR-NEXT: b #-134217732
3727 // CHECK-ERROR-NEXT: ^
3728 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3729 // CHECK-ERROR-NEXT: b #1
3730 // CHECK-ERROR-NEXT: ^
3732 //------------------------------------------------------------------------------
3733 // Unconditional branch (register)
3734 //------------------------------------------------------------------------------
3738 // CHECK-ERROR: error: invalid operand for instruction
3739 // CHECK-ERROR-NEXT: br w2
3740 // CHECK-ERROR-NEXT: ^
3741 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3742 // CHECK-ERROR-NEXT: br sp
3743 // CHECK-ERROR-NEXT: ^
3745 //// These ones shouldn't allow any registers
3748 // CHECK-ERROR: error: invalid operand for instruction
3749 // CHECK-ERROR-NEXT: eret x2
3750 // CHECK-ERROR-NEXT: ^
3751 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3752 // CHECK-ERROR-NEXT: drps x2
3753 // CHECK-ERROR-NEXT: ^