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 //------------------------------------------------------------------------------
732 // Logical (immediates)
733 //------------------------------------------------------------------------------
735 and w2, w3, #4294967296
736 eor w2, w3, #4294967296
737 orr w2, w3, #4294967296
738 ands w2, w3, #4294967296
739 // CHECK-ERROR: error: expected compatible register or logical immediate
740 // CHECK-ERROR-NEXT: and w2, w3, #4294967296
741 // CHECK-ERROR-NEXT: ^
742 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
743 // CHECK-ERROR-NEXT: eor w2, w3, #4294967296
744 // CHECK-ERROR-NEXT: ^
745 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
746 // CHECK-ERROR-NEXT: orr w2, w3, #4294967296
747 // CHECK-ERROR-NEXT: ^
748 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
749 // CHECK-ERROR-NEXT: ands w2, w3, #4294967296
750 // CHECK-ERROR-NEXT: ^
752 //------------------------------------------------------------------------------
754 //------------------------------------------------------------------------------
762 // CHECK-ERROR: error: invalid operand for instruction
763 // CHECK-ERROR-NEXT: sbfm x3, w13, #0, #0
764 // CHECK-ERROR-NEXT: ^
765 // CHECK-ERROR-NEXT: error: invalid operand for instruction
766 // CHECK-ERROR-NEXT: sbfm w12, x9, #0, #0
767 // CHECK-ERROR-NEXT: ^
768 // CHECK-ERROR-NEXT: error: invalid operand for instruction
769 // CHECK-ERROR-NEXT: sbfm sp, x3, #3, #5
770 // CHECK-ERROR-NEXT: ^
771 // CHECK-ERROR-NEXT: error: invalid operand for instruction
772 // CHECK-ERROR-NEXT: sbfm w3, wsp, #1, #9
773 // CHECK-ERROR-NEXT: ^
774 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
775 // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0
776 // CHECK-ERROR-NEXT: ^
777 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
778 // CHECK-ERROR-NEXT: sbfm x9, x5, #0, #-1
779 // CHECK-ERROR-NEXT: ^
782 sbfm w7, w11, #19, #32
783 sbfm x29, x30, #64, #0
784 sbfm x10, x20, #63, #64
785 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
786 // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1
787 // CHECK-ERROR-NEXT: ^
788 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
789 // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32
790 // CHECK-ERROR-NEXT: ^
791 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
792 // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0
793 // CHECK-ERROR-NEXT: ^
794 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
795 // CHECK-ERROR-NEXT: sbfm x10, x20, #63, #64
796 // CHECK-ERROR-NEXT: ^
799 ubfm w7, w11, #19, #32
800 ubfm x29, x30, #64, #0
801 ubfm x10, x20, #63, #64
802 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
803 // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1
804 // CHECK-ERROR-NEXT: ^
805 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
806 // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32
807 // CHECK-ERROR-NEXT: ^
808 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
809 // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0
810 // CHECK-ERROR-NEXT: ^
811 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
812 // CHECK-ERROR-NEXT: ubfm x10, x20, #63, #64
813 // CHECK-ERROR-NEXT: ^
816 bfm w7, w11, #19, #32
817 bfm x29, x30, #64, #0
818 bfm x10, x20, #63, #64
819 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
820 // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1
821 // CHECK-ERROR-NEXT: ^
822 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
823 // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32
824 // CHECK-ERROR-NEXT: ^
825 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
826 // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0
827 // CHECK-ERROR-NEXT: ^
828 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
829 // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64
830 // CHECK-ERROR-NEXT: ^
835 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
836 // CHECK-ERROR-AARCH64-NEXT: sxtb x3, x2
837 // CHECK-ERROR-AARCH64-NEXT: ^
838 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
839 // CHECK-ERROR-AARCH64-NEXT: sxth xzr, xzr
840 // CHECK-ERROR-AARCH64-NEXT: ^
841 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
842 // CHECK-ERROR-AARCH64-NEXT: sxtw x3, x5
843 // CHECK-ERROR-AARCH64-NEXT: ^
850 // CHECK-ERROR: error: invalid operand for instruction
851 // CHECK-ERROR-NEXT: uxtb x3, x12
852 // CHECK-ERROR-NEXT: ^
853 // CHECK-ERROR-NEXT: error: invalid operand for instruction
854 // CHECK-ERROR-NEXT: uxth x5, x9
855 // CHECK-ERROR-NEXT: ^
856 // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction
857 // CHECK-ERROR-AARCH64-NEXT: uxtw x3, x5
858 // CHECK-ERROR-AARCH64-NEXT: ^
859 // CHECK-ERROR-NEXT: error: invalid operand for instruction
860 // CHECK-ERROR-NEXT: uxtb x2, sp
861 // CHECK-ERROR-NEXT: ^
862 // CHECK-ERROR-NEXT: error: invalid operand for instruction
863 // CHECK-ERROR-NEXT: uxtb sp, xzr
864 // CHECK-ERROR-NEXT: ^
871 // CHECK-ERROR: error: invalid operand for instruction
872 // CHECK-ERROR-NEXT: asr x3, w2, #1
873 // CHECK-ERROR-NEXT: ^
874 // CHECK-ERROR-NEXT: error: invalid operand for instruction
875 // CHECK-ERROR-NEXT: asr sp, x2, #1
876 // CHECK-ERROR-NEXT: ^
877 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
878 // CHECK-ERROR-NEXT: asr x25, x26, #-1
879 // CHECK-ERROR-NEXT: ^
880 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
881 // CHECK-ERROR-NEXT: asr x25, x26, #64
882 // CHECK-ERROR-NEXT: ^
883 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
884 // CHECK-ERROR-NEXT: asr w9, w8, #32
885 // CHECK-ERROR-NEXT: ^
888 sbfiz wsp, w9, #0, #1
889 sbfiz w9, w10, #32, #1
890 sbfiz w11, w12, #32, #0
891 sbfiz w9, w10, #10, #23
892 sbfiz x3, x5, #12, #53
894 sbfiz w3, wsp, #10, #8
895 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
896 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
897 // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0
898 // CHECK-ERROR-NEXT: ^
899 // CHECK-ERROR-NEXT: error: invalid operand for instruction
900 // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1
901 // CHECK-ERROR-NEXT: ^
902 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
903 // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1
904 // CHECK-ERROR-NEXT: ^
905 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
906 // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0
907 // CHECK-ERROR-NEXT: ^
908 // CHECK-ERROR-NEXT: error: requested insert overflows register
909 // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23
910 // CHECK-ERROR-NEXT: ^
911 // CHECK-ERROR-NEXT: error: requested insert overflows register
912 // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53
913 // CHECK-ERROR-NEXT: ^
914 // CHECK-ERROR-NEXT: error: invalid operand for instruction
915 // CHECK-ERROR-NEXT: sbfiz sp, x3, #7, #6
916 // CHECK-ERROR-NEXT: ^
917 // CHECK-ERROR-NEXT: error: invalid operand for instruction
918 // CHECK-ERROR-NEXT: sbfiz w3, wsp, #10, #8
919 // CHECK-ERROR-NEXT: ^
923 sbfx w9, w10, #32, #1
924 sbfx w11, w12, #32, #0
925 sbfx w9, w10, #10, #23
926 sbfx x3, x5, #12, #53
928 sbfx w3, wsp, #10, #8
929 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
930 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
931 // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0
932 // CHECK-ERROR-NEXT: ^
933 // CHECK-ERROR-NEXT: error: invalid operand for instruction
934 // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1
935 // CHECK-ERROR-NEXT: ^
936 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
937 // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1
938 // CHECK-ERROR-NEXT: ^
939 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
940 // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0
941 // CHECK-ERROR-NEXT: ^
942 // CHECK-ERROR-NEXT: error: requested extract overflows register
943 // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23
944 // CHECK-ERROR-NEXT: ^
945 // CHECK-ERROR-NEXT: error: requested extract overflows register
946 // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53
947 // CHECK-ERROR-NEXT: ^
948 // CHECK-ERROR-NEXT: error: invalid operand for instruction
949 // CHECK-ERROR-NEXT: sbfx sp, x3, #7, #6
950 // CHECK-ERROR-NEXT: ^
951 // CHECK-ERROR-NEXT: error: invalid operand for instruction
952 // CHECK-ERROR-NEXT: sbfx w3, wsp, #10, #8
953 // CHECK-ERROR-NEXT: ^
958 bfi w11, w12, #32, #0
959 bfi w9, w10, #10, #23
963 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
964 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
965 // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0
966 // CHECK-ERROR-NEXT: ^
967 // CHECK-ERROR-NEXT: error: invalid operand for instruction
968 // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1
969 // CHECK-ERROR-NEXT: ^
970 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
971 // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1
972 // CHECK-ERROR-NEXT: ^
973 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
974 // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0
975 // CHECK-ERROR-NEXT: ^
976 // CHECK-ERROR-NEXT: error: requested insert overflows register
977 // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23
978 // CHECK-ERROR-NEXT: ^
979 // CHECK-ERROR-NEXT: error: requested insert overflows register
980 // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53
981 // CHECK-ERROR-NEXT: ^
982 // CHECK-ERROR-NEXT: error: invalid operand for instruction
983 // CHECK-ERROR-NEXT: bfi sp, x3, #7, #6
984 // CHECK-ERROR-NEXT: ^
985 // CHECK-ERROR-NEXT: error: invalid operand for instruction
986 // CHECK-ERROR-NEXT: bfi w3, wsp, #10, #8
987 // CHECK-ERROR-NEXT: ^
990 bfxil wsp, w9, #0, #1
991 bfxil w9, w10, #32, #1
992 bfxil w11, w12, #32, #0
993 bfxil w9, w10, #10, #23
994 bfxil x3, x5, #12, #53
996 bfxil w3, wsp, #10, #8
997 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
998 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
999 // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0
1000 // CHECK-ERROR-NEXT: ^
1001 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1002 // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1
1003 // CHECK-ERROR-NEXT: ^
1004 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1005 // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1
1006 // CHECK-ERROR-NEXT: ^
1007 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1008 // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0
1009 // CHECK-ERROR-NEXT: ^
1010 // CHECK-ERROR-NEXT: error: requested extract overflows register
1011 // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23
1012 // CHECK-ERROR-NEXT: ^
1013 // CHECK-ERROR-NEXT: error: requested extract overflows register
1014 // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53
1015 // CHECK-ERROR-NEXT: ^
1016 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1017 // CHECK-ERROR-NEXT: bfxil sp, x3, #7, #6
1018 // CHECK-ERROR-NEXT: ^
1019 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1020 // CHECK-ERROR-NEXT: bfxil w3, wsp, #10, #8
1021 // CHECK-ERROR-NEXT: ^
1023 ubfiz w1, w2, #0, #0
1024 ubfiz wsp, w9, #0, #1
1025 ubfiz w9, w10, #32, #1
1026 ubfiz w11, w12, #32, #0
1027 ubfiz w9, w10, #10, #23
1028 ubfiz x3, x5, #12, #53
1029 ubfiz sp, x3, #7, #6
1030 ubfiz w3, wsp, #10, #8
1031 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1032 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1033 // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0
1034 // CHECK-ERROR-NEXT: ^
1035 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1036 // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1
1037 // CHECK-ERROR-NEXT: ^
1038 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1039 // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1
1040 // CHECK-ERROR-NEXT: ^
1041 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1042 // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0
1043 // CHECK-ERROR-NEXT: ^
1044 // CHECK-ERROR-NEXT: error: requested insert overflows register
1045 // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23
1046 // CHECK-ERROR-NEXT: ^
1047 // CHECK-ERROR-NEXT: error: requested insert overflows register
1048 // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53
1049 // CHECK-ERROR-NEXT: ^
1050 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1051 // CHECK-ERROR-NEXT: ubfiz sp, x3, #7, #6
1052 // CHECK-ERROR-NEXT: ^
1053 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1054 // CHECK-ERROR-NEXT: ubfiz w3, wsp, #10, #8
1055 // CHECK-ERROR-NEXT: ^
1058 ubfx wsp, w9, #0, #1
1059 ubfx w9, w10, #32, #1
1060 ubfx w11, w12, #32, #0
1061 ubfx w9, w10, #10, #23
1062 ubfx x3, x5, #12, #53
1064 ubfx w3, wsp, #10, #8
1065 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1066 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1067 // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0
1068 // CHECK-ERROR-NEXT: ^
1069 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1070 // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1
1071 // CHECK-ERROR-NEXT: ^
1072 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1073 // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1
1074 // CHECK-ERROR-NEXT: ^
1075 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1076 // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0
1077 // CHECK-ERROR-NEXT: ^
1078 // CHECK-ERROR-NEXT: error: requested extract overflows register
1079 // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23
1080 // CHECK-ERROR-NEXT: ^
1081 // CHECK-ERROR-NEXT: error: requested extract overflows register
1082 // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53
1083 // CHECK-ERROR-NEXT: ^
1084 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1085 // CHECK-ERROR-NEXT: ubfx sp, x3, #7, #6
1086 // CHECK-ERROR-NEXT: ^
1087 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1088 // CHECK-ERROR-NEXT: ubfx w3, wsp, #10, #8
1089 // CHECK-ERROR-NEXT: ^
1091 //------------------------------------------------------------------------------
1092 // Compare & branch (immediate)
1093 //------------------------------------------------------------------------------
1098 // CHECK-ERROR: error: invalid operand for instruction
1099 // CHECK-ERROR-NEXT: cbnz wsp, lbl
1100 // CHECK-ERROR-NEXT: ^
1101 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1102 // CHECK-ERROR-NEXT: cbz sp, lbl
1103 // CHECK-ERROR-NEXT: ^
1104 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1105 // CHECK-ERROR-NEXT: cbz x3, x5
1106 // CHECK-ERROR-NEXT: ^
1111 // CHECK-ERROR: error: expected label or encodable integer pc offset
1112 // CHECK-ERROR-NEXT: cbz w20, #1048576
1113 // CHECK-ERROR-NEXT: ^
1114 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1115 // CHECK-ERROR-NEXT: cbnz xzr, #-1048580
1116 // CHECK-ERROR-NEXT: ^
1117 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1118 // CHECK-ERROR-NEXT: cbz x29, #1
1119 // CHECK-ERROR-NEXT: ^
1121 //------------------------------------------------------------------------------
1122 // Conditional branch (immediate)
1123 //------------------------------------------------------------------------------
1126 // CHECK-ERROR: error: invalid condition code
1127 // CHECK-ERROR-NEXT: b.zf lbl
1128 // CHECK-ERROR-NEXT: ^
1133 // CHECK-ERROR: error: expected label or encodable integer pc offset
1134 // CHECK-ERROR-NEXT: b.eq #1048576
1135 // CHECK-ERROR-NEXT: ^
1136 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1137 // CHECK-ERROR-NEXT: b.ge #-1048580
1138 // CHECK-ERROR-NEXT: ^
1139 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1140 // CHECK-ERROR-NEXT: b.cc #1
1141 // CHECK-ERROR-NEXT: ^
1143 //------------------------------------------------------------------------------
1144 // Conditional compare (immediate)
1145 //------------------------------------------------------------------------------
1147 ccmp wsp, #4, #2, ne
1148 ccmp w25, #-1, #15, hs
1149 ccmp w3, #32, #0, ge
1150 ccmp w19, #5, #-1, lt
1151 ccmp w20, #7, #16, hs
1152 // CHECK-ERROR: error: invalid operand for instruction
1153 // CHECK-ERROR-NEXT: ccmp wsp, #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 w25, #-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 w3, #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 w19, #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 w20, #7, #16, hs
1166 // CHECK-ERROR-NEXT: ^
1169 ccmp x25, #-1, #15, hs
1170 ccmp x3, #32, #0, ge
1171 ccmp x19, #5, #-1, lt
1172 ccmp x20, #7, #16, hs
1173 // CHECK-ERROR: error: invalid operand for instruction
1174 // CHECK-ERROR-NEXT: ccmp sp, #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: ccmp x25, #-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: ccmp x3, #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: ccmp x19, #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: ccmp x20, #7, #16, hs
1187 // CHECK-ERROR-NEXT: ^
1189 ccmn wsp, #4, #2, ne
1190 ccmn w25, #-1, #15, hs
1191 ccmn w3, #32, #0, ge
1192 ccmn w19, #5, #-1, lt
1193 ccmn w20, #7, #16, hs
1194 // CHECK-ERROR: error: invalid operand for instruction
1195 // CHECK-ERROR-NEXT: ccmn wsp, #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 w25, #-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 w3, #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 w19, #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 w20, #7, #16, hs
1208 // CHECK-ERROR-NEXT: ^
1211 ccmn x25, #-1, #15, hs
1212 ccmn x3, #32, #0, ge
1213 ccmn x19, #5, #-1, lt
1214 ccmn x20, #7, #16, hs
1215 // CHECK-ERROR: error: invalid operand for instruction
1216 // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne
1217 // CHECK-ERROR-NEXT: ^
1218 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1219 // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs
1220 // CHECK-ERROR-NEXT: ^
1221 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1222 // CHECK-ERROR-NEXT: ccmn x3, #32, #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: ccmn x19, #5, #-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: ccmn x20, #7, #16, hs
1229 // CHECK-ERROR-NEXT: ^
1231 //------------------------------------------------------------------------------
1232 // Conditional compare (register)
1233 //------------------------------------------------------------------------------
1235 ccmp wsp, w4, #2, ne
1236 ccmp w3, wsp, #0, ge
1237 ccmp w19, w5, #-1, lt
1238 ccmp w20, w7, #16, hs
1239 // CHECK-ERROR: error: invalid operand for instruction
1240 // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne
1241 // CHECK-ERROR-NEXT: ^
1242 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1243 // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge
1244 // CHECK-ERROR-NEXT: ^
1245 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1246 // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt
1247 // CHECK-ERROR-NEXT: ^
1248 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1249 // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs
1250 // CHECK-ERROR-NEXT: ^
1253 ccmp x25, sp, #15, hs
1254 ccmp x19, x5, #-1, lt
1255 ccmp x20, x7, #16, hs
1256 // CHECK-ERROR: error: invalid operand for instruction
1257 // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne
1258 // CHECK-ERROR-NEXT: ^
1259 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1260 // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs
1261 // CHECK-ERROR-NEXT: ^
1262 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1263 // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt
1264 // CHECK-ERROR-NEXT: ^
1265 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1266 // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs
1267 // CHECK-ERROR-NEXT: ^
1269 ccmn wsp, w4, #2, ne
1270 ccmn w25, wsp, #15, hs
1271 ccmn w19, w5, #-1, lt
1272 ccmn w20, w7, #16, hs
1273 // CHECK-ERROR: error: invalid operand for instruction
1274 // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne
1275 // CHECK-ERROR-NEXT: ^
1276 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1277 // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs
1278 // CHECK-ERROR-NEXT: ^
1279 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1280 // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt
1281 // CHECK-ERROR-NEXT: ^
1282 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1283 // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs
1284 // CHECK-ERROR-NEXT: ^
1287 ccmn x25, sp, #15, hs
1288 ccmn x19, x5, #-1, lt
1289 ccmn x20, x7, #16, hs
1290 // CHECK-ERROR: error: invalid operand for instruction
1291 // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne
1292 // CHECK-ERROR-NEXT: ^
1293 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1294 // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs
1295 // CHECK-ERROR-NEXT: ^
1296 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1297 // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt
1298 // CHECK-ERROR-NEXT: ^
1299 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1300 // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs
1301 // CHECK-ERROR-NEXT: ^
1303 //------------------------------------------------------------------------------
1304 // Conditional select
1305 //------------------------------------------------------------------------------
1307 csel w4, wsp, w9, eq
1308 csel wsp, w2, w3, ne
1309 csel w10, w11, wsp, ge
1313 csel x10, x11, sp, ge
1315 // CHECK-ERROR: error: invalid operand for instruction
1316 // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq
1317 // CHECK-ERROR-NEXT: ^
1318 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1319 // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne
1320 // CHECK-ERROR-NEXT: ^
1321 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1322 // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge
1323 // CHECK-ERROR-NEXT: ^
1324 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1325 // CHECK-ERROR-NEXT: csel w1, w2, w3, #3
1326 // CHECK-ERROR-NEXT: ^
1327 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1328 // CHECK-ERROR-NEXT: csel x4, sp, x9, eq
1329 // CHECK-ERROR-NEXT: ^
1330 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1331 // CHECK-ERROR-NEXT: csel sp, x2, x3, ne
1332 // CHECK-ERROR-NEXT: ^
1333 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1334 // CHECK-ERROR-NEXT: csel x10, x11, sp, ge
1335 // CHECK-ERROR-NEXT: ^
1336 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1337 // CHECK-ERROR-NEXT: csel x1, x2, x3, #3
1338 // CHECK-ERROR-NEXT: ^
1340 csinc w20, w21, wsp, mi
1341 csinc sp, x30, x29, eq
1342 // CHECK-ERROR: error: invalid operand for instruction
1343 // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi
1344 // CHECK-ERROR-NEXT: ^
1345 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1346 // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq
1347 // CHECK-ERROR-NEXT: ^
1349 csinv w20, wsp, wsp, mi
1350 csinv sp, x30, x29, le
1351 // CHECK-ERROR: error: invalid operand for instruction
1352 // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi
1353 // CHECK-ERROR-NEXT: ^
1354 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1355 // CHECK-ERROR-NEXT: csinv sp, x30, x29, le
1356 // CHECK-ERROR-NEXT: ^
1358 csneg w20, w21, wsp, mi
1359 csneg x0, sp, x29, le
1360 // CHECK-ERROR: error: invalid operand for instruction
1361 // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi
1362 // CHECK-ERROR-NEXT: ^
1363 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1364 // CHECK-ERROR-NEXT: csneg x0, sp, x29, le
1365 // CHECK-ERROR-NEXT: ^
1371 // CHECK-ERROR: error: invalid operand for instruction
1372 // CHECK-ERROR-NEXT: cset wsp, lt
1373 // CHECK-ERROR-NEXT: ^
1374 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1375 // CHECK-ERROR-NEXT: csetm sp, ge
1376 // CHECK-ERROR-NEXT: ^
1377 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1378 // CHECK-ERROR-NEXT: cset w1, al
1379 // CHECK-ERROR-NEXT: ^
1380 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1381 // CHECK-ERROR-NEXT: csetm x6, nv
1382 // CHECK-ERROR-NEXT: ^
1387 // CHECK-ERROR: error: invalid operand for instruction
1388 // CHECK-ERROR-NEXT: cinc w3, wsp, ne
1389 // CHECK-ERROR-NEXT: ^
1390 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1391 // CHECK-ERROR-NEXT: cinc sp, x9, eq
1392 // CHECK-ERROR-NEXT: ^
1393 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1394 // CHECK-ERROR-NEXT: cinc x2, x0, nv
1395 // CHECK-ERROR-NEXT: ^
1400 // CHECK-ERROR: error: invalid operand for instruction
1401 // CHECK-ERROR-NEXT: cinv w3, wsp, ne
1402 // CHECK-ERROR-NEXT: ^
1403 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1404 // CHECK-ERROR-NEXT: cinv sp, x9, eq
1405 // CHECK-ERROR-NEXT: ^
1406 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1407 // CHECK-ERROR-NEXT: cinv w8, x7, nv
1408 // CHECK-ERROR-NEXT: ^
1413 // CHECK-ERROR: error: invalid operand for instruction
1414 // CHECK-ERROR-NEXT: cneg w3, wsp, ne
1415 // CHECK-ERROR-NEXT: ^
1416 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1417 // CHECK-ERROR-NEXT: cneg sp, x9, eq
1418 // CHECK-ERROR-NEXT: ^
1419 // CHECK-ERROR-NEXT: error: condition codes AL and NV are invalid for this instruction
1420 // CHECK-ERROR-NEXT: cneg x4, x5, al
1421 // CHECK-ERROR-NEXT: ^
1423 //------------------------------------------------------------------------------
1424 // Data Processing (1 source)
1425 //------------------------------------------------------------------------------
1427 //CHECK-ERROR: error: invalid operand for instruction
1428 //CHECK-ERROR-NEXT: rbit x23, w2
1431 //CHECK-ERROR: error: invalid operand for instruction
1432 //CHECK-ERROR-NEXT: cls sp, x2
1435 //CHECK-ERROR: error: invalid operand for instruction
1436 //CHECK-ERROR-NEXT: clz wsp, w3
1438 //------------------------------------------------------------------------------
1439 // Data Processing (2 sources)
1440 //------------------------------------------------------------------------------
1442 //CHECK-ERROR: error: invalid operand for instruction
1443 //CHECK-ERROR-NEXT: udiv x23, w2, x18
1446 //CHECK-ERROR: error: invalid operand for instruction
1447 //CHECK-ERROR-NEXT: lsl sp, x2, x4
1450 //CHECK-ERROR: error: invalid operand for instruction
1451 //CHECK-ERROR-NEXT: asr wsp, w3, w9
1453 //------------------------------------------------------------------------------
1454 // Data Processing (3 sources)
1455 //------------------------------------------------------------------------------
1457 madd sp, x3, x9, x10
1458 //CHECK-ERROR: error: invalid operand for instruction
1459 //CHECK-ERROR-NEXT: madd sp, x3, x9, x10
1461 //------------------------------------------------------------------------------
1462 // Exception generation
1463 //------------------------------------------------------------------------------
1468 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
1469 // CHECK-ERROR-NEXT: svc #-1
1470 // CHECK-ERROR-NEXT: ^
1471 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
1472 // CHECK-ERROR-NEXT: hlt #65536
1473 // CHECK-ERROR-NEXT: ^
1474 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1475 // CHECK-ERROR-NEXT: dcps4 #43
1476 // CHECK-ERROR-NEXT: ^
1477 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1478 // CHECK-ERROR-NEXT: dcps4
1479 // CHECK-ERROR-NEXT: ^
1481 //------------------------------------------------------------------------------
1482 // Extract (immediate)
1483 //------------------------------------------------------------------------------
1485 extr w2, w20, w30, #-1
1486 extr w9, w19, w20, #32
1487 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1488 // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1
1489 // CHECK-ERROR-NEXT: ^
1490 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1491 // CHECK-ERROR-NEXT: extr w9, w19, w20, #32
1492 // CHECK-ERROR-NEXT: ^
1494 extr x10, x15, x20, #-1
1495 extr x20, x25, x30, #64
1496 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1497 // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1
1498 // CHECK-ERROR-NEXT: ^
1499 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1500 // CHECK-ERROR-NEXT: extr x20, x25, x30, #64
1501 // CHECK-ERROR-NEXT: ^
1505 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1506 // CHECK-ERROR-NEXT: ror w9, w10, #32
1507 // CHECK-ERROR-NEXT: ^
1508 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1509 // CHECK-ERROR-NEXT: ror x10, x11, #64
1510 // CHECK-ERROR-NEXT: ^
1512 //------------------------------------------------------------------------------
1513 // Floating-point compare
1514 //------------------------------------------------------------------------------
1517 // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
1518 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1519 // CHECK-ERROR-NEXT: fcmp s3, d2
1520 // CHECK-ERROR-NEXT: ^
1526 // CHECK-ERROR: error: expected floating-point constant #0.0
1527 // CHECK-ERROR-NEXT: fcmp s9, #-0.0
1528 // CHECK-ERROR-NEXT: ^
1529 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1530 // CHECK-ERROR-NEXT: fcmp d3, #-0.0
1531 // CHECK-ERROR-NEXT: ^
1532 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1533 // CHECK-ERROR-NEXT: fcmp s1, #1.0
1534 // CHECK-ERROR-NEXT: ^
1535 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1536 // CHECK-ERROR-NEXT: fcmpe s30, #-0.0
1537 // CHECK-ERROR-NEXT: ^
1539 //------------------------------------------------------------------------------
1540 // Floating-point conditional compare
1541 //------------------------------------------------------------------------------
1543 fccmp s19, s5, #-1, lt
1544 fccmp s20, s7, #16, hs
1545 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1546 // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt
1547 // CHECK-ERROR-NEXT: ^
1548 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1549 // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs
1550 // CHECK-ERROR-NEXT: ^
1552 fccmp d19, d5, #-1, lt
1553 fccmp d20, d7, #16, hs
1554 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1555 // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt
1556 // CHECK-ERROR-NEXT: ^
1557 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1558 // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs
1559 // CHECK-ERROR-NEXT: ^
1561 fccmpe s19, s5, #-1, lt
1562 fccmpe s20, s7, #16, hs
1563 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1564 // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt
1565 // CHECK-ERROR-NEXT: ^
1566 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1567 // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs
1568 // CHECK-ERROR-NEXT: ^
1570 fccmpe d19, d5, #-1, lt
1571 fccmpe d20, d7, #16, hs
1572 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1573 // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt
1574 // CHECK-ERROR-NEXT: ^
1575 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1576 // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs
1577 // CHECK-ERROR-NEXT: ^
1579 //------------------------------------------------------------------------------
1580 // Floating-point conditional compare
1581 //------------------------------------------------------------------------------
1583 fcsel q3, q20, q9, pl
1584 fcsel h9, h10, h11, mi
1585 fcsel b9, b10, b11, mi
1586 // CHECK-ERROR: error: invalid operand for instruction
1587 // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl
1588 // CHECK-ERROR-NEXT: ^
1589 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1590 // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi
1591 // CHECK-ERROR-NEXT: ^
1592 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1593 // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi
1594 // CHECK-ERROR-NEXT: ^
1596 //------------------------------------------------------------------------------
1597 // Floating-point data-processing (1 source)
1598 //------------------------------------------------------------------------------
1602 // CHECK-ERROR: error: expected compatible register or floating-point constant
1603 // CHECK-ERROR-NEXT: fmov d0, s3
1604 // CHECK-ERROR-NEXT: ^
1605 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1606 // CHECK-ERROR-NEXT: fcvt d0, d1
1607 // CHECK-ERROR-NEXT: ^
1610 //------------------------------------------------------------------------------
1611 // Floating-point data-processing (2 sources)
1612 //------------------------------------------------------------------------------
1617 // CHECK-ERROR: error: invalid operand for instruction
1618 // CHECK-ERROR-NEXT: fadd s0, d3, d7
1619 // CHECK-ERROR-NEXT: ^
1620 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1621 // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12
1622 // CHECK-ERROR-NEXT: ^
1623 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1624 // CHECK-ERROR-NEXT: fnmul d1, d9, s18
1625 // CHECK-ERROR-NEXT: ^
1627 //------------------------------------------------------------------------------
1628 // Floating-point data-processing (3 sources)
1629 //------------------------------------------------------------------------------
1631 fmadd b3, b4, b5, b6
1632 fmsub h1, h2, h3, h4
1633 fnmadd q3, q5, q6, q7
1634 fnmsub s2, s4, d5, h9
1635 // CHECK-ERROR: error: invalid operand for instruction
1636 // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6
1637 // CHECK-ERROR-NEXT: ^
1638 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1639 // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4
1640 // CHECK-ERROR-NEXT: ^
1641 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1642 // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7
1643 // CHECK-ERROR-NEXT: ^
1644 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1645 // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9
1646 // CHECK-ERROR-NEXT: ^
1648 //------------------------------------------------------------------------------
1649 // Floating-point conditional compare
1650 //------------------------------------------------------------------------------
1653 fcvtzs w19, s20, #33
1654 fcvtzs wsp, s19, #14
1655 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1656 // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0
1657 // CHECK-ERROR-NEXT: ^
1658 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1659 // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33
1660 // CHECK-ERROR-NEXT: ^
1661 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1662 // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14
1663 // CHECK-ERROR-NEXT: ^
1666 fcvtzs x19, s20, #65
1668 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1669 // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0
1670 // CHECK-ERROR-NEXT: ^
1671 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1672 // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65
1673 // CHECK-ERROR-NEXT: ^
1674 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1675 // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14
1676 // CHECK-ERROR-NEXT: ^
1679 fcvtzu w19, s20, #33
1680 fcvtzu wsp, s19, #14
1681 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1682 // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0
1683 // CHECK-ERROR-NEXT: ^
1684 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1685 // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33
1686 // CHECK-ERROR-NEXT: ^
1687 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1688 // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14
1689 // CHECK-ERROR-NEXT: ^
1692 fcvtzu x19, s20, #65
1694 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1695 // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0
1696 // CHECK-ERROR-NEXT: ^
1697 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1698 // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65
1699 // CHECK-ERROR-NEXT: ^
1700 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1701 // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14
1702 // CHECK-ERROR-NEXT: ^
1707 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1708 // CHECK-ERROR-NEXT: scvtf w13, s31, #0
1709 // CHECK-ERROR-NEXT: ^
1710 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1711 // CHECK-ERROR-NEXT: scvtf w19, s20, #33
1712 // CHECK-ERROR-NEXT: ^
1713 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1714 // CHECK-ERROR-NEXT: scvtf wsp, s19, #14
1715 // CHECK-ERROR-NEXT: ^
1720 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1721 // CHECK-ERROR-NEXT: scvtf x13, s31, #0
1722 // CHECK-ERROR-NEXT: ^
1723 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1724 // CHECK-ERROR-NEXT: scvtf x19, s20, #65
1725 // CHECK-ERROR-NEXT: ^
1726 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1727 // CHECK-ERROR-NEXT: scvtf sp, s19, #14
1728 // CHECK-ERROR-NEXT: ^
1733 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1734 // CHECK-ERROR-NEXT: ucvtf w13, s31, #0
1735 // CHECK-ERROR-NEXT: ^
1736 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1737 // CHECK-ERROR-NEXT: ucvtf w19, s20, #33
1738 // CHECK-ERROR-NEXT: ^
1739 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1740 // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14
1741 // CHECK-ERROR-NEXT: ^
1746 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1747 // CHECK-ERROR-NEXT: ucvtf x13, s31, #0
1748 // CHECK-ERROR-NEXT: ^
1749 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1750 // CHECK-ERROR-NEXT: ucvtf x19, s20, #65
1751 // CHECK-ERROR-NEXT: ^
1752 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1753 // CHECK-ERROR-NEXT: ucvtf sp, s19, #14
1754 // CHECK-ERROR-NEXT: ^
1756 //------------------------------------------------------------------------------
1757 // Floating-point immediate
1758 //------------------------------------------------------------------------------
1759 ;; Exponent too large
1762 // CHECK-ERROR: error: expected compatible register or floating-point constant
1763 // CHECK-ERROR-NEXT: fmov d3, #0.0625
1764 // CHECK-ERROR-NEXT: ^
1765 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1766 // CHECK-ERROR-NEXT: fmov s2, #32.0
1767 // CHECK-ERROR-NEXT: ^
1769 ;; Fraction too precise
1772 // CHECK-ERROR: error: expected compatible register or floating-point constant
1773 // CHECK-ERROR-NEXT: fmov s9, #1.03125
1774 // CHECK-ERROR-NEXT: ^
1775 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1776 // CHECK-ERROR-NEXT: fmov s28, #1.96875
1777 // CHECK-ERROR-NEXT: ^
1779 ;; No particular reason, but a striking omission
1781 // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant
1782 // CHECK-ERROR-AARCH64-NEXT: fmov d0, #0.0
1783 // CHECK-ERROR-AARCH64-NEXT: ^
1785 //------------------------------------------------------------------------------
1786 // Floating-point <-> integer conversion
1787 //------------------------------------------------------------------------------
1794 // CHECK-ERROR: error: expected lane specifier '[1]'
1795 // CHECK-ERROR-NEXT: fmov x3, v0.d[0]
1796 // CHECK-ERROR-NEXT: ^
1797 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1798 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
1799 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
1800 // CHECK-ERROR-NEXT: ^
1801 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1802 // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
1803 // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
1804 // CHECK-ERROR-NEXT: ^
1805 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1806 // CHECK-ERROR-NEXT: fcvtns sp, s5
1807 // CHECK-ERROR-NEXT: ^
1808 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1809 // CHECK-ERROR-NEXT: scvtf s6, wsp
1810 // CHECK-ERROR-NEXT: ^
1812 //------------------------------------------------------------------------------
1813 // Load-register (literal)
1814 //------------------------------------------------------------------------------
1818 // CHECK-ERROR: error: invalid operand for instruction
1819 // CHECK-ERROR-NEXT: ldr sp, some_label
1820 // CHECK-ERROR-NEXT: ^
1821 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1822 // CHECK-ERROR-NEXT: ldrsw w3, somewhere
1823 // CHECK-ERROR-NEXT: ^
1828 // CHECK-ERROR: error: expected label or encodable integer pc offset
1829 // CHECK-ERROR-NEXT: ldrsw x2, #1048576
1830 // CHECK-ERROR-NEXT: ^
1831 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1832 // CHECK-ERROR-NEXT: ldr q0, #-1048580
1833 // CHECK-ERROR-NEXT: ^
1834 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1835 // CHECK-ERROR-NEXT: ldr x0, #2
1836 // CHECK-ERROR-NEXT: ^
1838 //------------------------------------------------------------------------------
1839 // Load/store exclusive
1840 //------------------------------------------------------------------------------
1842 stxrb w2, w3, [x4, #20]
1843 stlxrh w10, w11, [w2]
1844 // CHECK-ERROR-AARCH64: error: expected '#0'
1845 // CHECK-ERROR-ARM64: error: index must be absent or #0
1846 // CHECK-ERROR-NEXT: stxrb w2, w3, [x4, #20]
1847 // CHECK-ERROR-NEXT: ^
1848 // CHECK-ERROR: error: invalid operand for instruction
1849 // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2]
1850 // CHECK-ERROR-NEXT: ^
1852 stlxr x20, w21, [sp]
1853 // CHECK-ERROR: error: invalid operand for instruction
1854 // CHECK-ERROR-NEXT: stlxr x20, w21, [sp]
1855 // CHECK-ERROR-NEXT: ^
1858 // CHECK-ERROR: error: invalid operand for instruction
1859 // CHECK-ERROR-NEXT: ldxr sp, [sp]
1860 // CHECK-ERROR-NEXT: ^
1862 stxp x1, x2, x3, [x4]
1863 // CHECK-ERROR: error: invalid operand for instruction
1864 // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4]
1865 // CHECK-ERROR-NEXT: ^
1867 stlxp w5, x1, w4, [x5]
1868 // CHECK-ERROR: error: invalid operand for instruction
1869 // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5]
1870 // CHECK-ERROR-NEXT: ^
1872 stlxp w17, w6, x7, [x22]
1873 // CHECK-ERROR: error: invalid operand for instruction
1874 // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22]
1875 // CHECK-ERROR-NEXT: ^
1877 //------------------------------------------------------------------------------
1878 // Load/store (unscaled immediate)
1879 //------------------------------------------------------------------------------
1881 ldurb w2, [sp, #256]
1882 sturh w17, [x1, #256]
1883 ldursw x20, [x1, #256]
1884 ldur x12, [sp, #256]
1885 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1886 // CHECK-ERROR-NEXT: ldurb w2, [sp, #256]
1887 // CHECK-ERROR-NEXT: ^
1888 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1889 // CHECK-ERROR-NEXT: sturh w17, [x1, #256]
1890 // CHECK-ERROR-NEXT: ^
1891 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1892 // CHECK-ERROR-NEXT: ldursw x20, [x1, #256]
1893 // CHECK-ERROR-NEXT: ^
1894 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1895 // CHECK-ERROR-NEXT: ldur x12, [sp, #256]
1896 // CHECK-ERROR-NEXT: ^
1898 stur h2, [x2, #-257]
1899 stur b2, [x2, #-257]
1900 ldursb x9, [sp, #-257]
1901 ldur w2, [x30, #-257]
1902 stur q9, [x20, #-257]
1903 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1904 // CHECK-ERROR-NEXT: stur h2, [x2, #-257]
1905 // CHECK-ERROR-NEXT: ^
1906 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1907 // CHECK-ERROR-NEXT: stur b2, [x2, #-257]
1908 // CHECK-ERROR-NEXT: ^
1909 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1910 // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257]
1911 // CHECK-ERROR-NEXT: ^
1912 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1913 // CHECK-ERROR-NEXT: ldur w2, [x30, #-257]
1914 // CHECK-ERROR-NEXT: ^
1915 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1916 // CHECK-ERROR-NEXT: stur q9, [x20, #-257]
1917 // CHECK-ERROR-NEXT: ^
1919 prfum pstl3strm, [xzr]
1920 // CHECK-ERROR: error: invalid operand for instruction
1921 // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr]
1922 // CHECK-ERROR-NEXT: ^
1924 //------------------------------------------------------------------------------
1925 // Load-store register (immediate post-indexed)
1926 //------------------------------------------------------------------------------
1927 ldr x3, [x4, #25], #0
1928 ldr x4, [x9, #0], #4
1929 // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760]
1930 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1931 // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0
1932 // CHECK-ERROR-NEXT: ^
1933 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
1934 // CHECK-ERROR-AARCH64-NEXT: ldr x4, [x9, #0], #4
1935 // CHECK-ERROR-AARCH64-NEXT: ^
1937 strb w1, [x19], #256
1938 strb w9, [sp], #-257
1939 strh w1, [x19], #256
1940 strh w9, [sp], #-257
1943 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1944 // CHECK-ERROR-NEXT: strb w1, [x19], #256
1945 // CHECK-ERROR-NEXT: ^
1946 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1947 // CHECK-ERROR-NEXT: strb w9, [sp], #-257
1948 // CHECK-ERROR-NEXT: ^
1949 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1950 // CHECK-ERROR-NEXT: strh w1, [x19], #256
1951 // CHECK-ERROR-NEXT: ^
1952 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1953 // CHECK-ERROR-NEXT: strh w9, [sp], #-257
1954 // CHECK-ERROR-NEXT: ^
1955 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1956 // CHECK-ERROR-NEXT: str w1, [x19], #256
1957 // CHECK-ERROR-NEXT: ^
1958 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1959 // CHECK-ERROR-NEXT: str w9, [sp], #-257
1960 // CHECK-ERROR-NEXT: ^
1962 ldrb w1, [x19], #256
1963 ldrb w9, [sp], #-257
1964 ldrh w1, [x19], #256
1965 ldrh w9, [sp], #-257
1968 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1969 // CHECK-ERROR-NEXT: ldrb w1, [x19], #256
1970 // CHECK-ERROR-NEXT: ^
1971 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1972 // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257
1973 // CHECK-ERROR-NEXT: ^
1974 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1975 // CHECK-ERROR-NEXT: ldrh w1, [x19], #256
1976 // CHECK-ERROR-NEXT: ^
1977 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1978 // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257
1979 // CHECK-ERROR-NEXT: ^
1980 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1981 // CHECK-ERROR-NEXT: ldr w1, [x19], #256
1982 // CHECK-ERROR-NEXT: ^
1983 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1984 // CHECK-ERROR-NEXT: ldr w9, [sp], #-257
1985 // CHECK-ERROR-NEXT: ^
1987 ldrsb x2, [x3], #256
1988 ldrsb x22, [x13], #-257
1989 ldrsh x2, [x3], #256
1990 ldrsh x22, [x13], #-257
1991 ldrsw x2, [x3], #256
1992 ldrsw x22, [x13], #-257
1993 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1994 // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256
1995 // CHECK-ERROR-NEXT: ^
1996 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1997 // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257
1998 // CHECK-ERROR-NEXT: ^
1999 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2000 // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256
2001 // CHECK-ERROR-NEXT: ^
2002 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2003 // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257
2004 // CHECK-ERROR-NEXT: ^
2005 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2006 // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256
2007 // CHECK-ERROR-NEXT: ^
2008 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2009 // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257
2010 // CHECK-ERROR-NEXT: ^
2012 ldrsb w2, [x3], #256
2013 ldrsb w22, [x13], #-257
2014 ldrsh w2, [x3], #256
2015 ldrsh w22, [x13], #-257
2016 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2017 // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256
2018 // CHECK-ERROR-NEXT: ^
2019 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2020 // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257
2021 // CHECK-ERROR-NEXT: ^
2022 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2023 // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256
2024 // CHECK-ERROR-NEXT: ^
2025 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2026 // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257
2027 // CHECK-ERROR-NEXT: ^
2030 str b3, [x13], #-257
2032 str h3, [x13], #-257
2034 str s3, [x13], #-257
2036 str d3, [x13], #-257
2038 str q3, [x13], #-257
2039 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2040 // CHECK-ERROR-NEXT: str b3, [x3], #256
2041 // CHECK-ERROR-NEXT: ^
2042 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2043 // CHECK-ERROR-NEXT: str b3, [x13], #-257
2044 // CHECK-ERROR-NEXT: ^
2045 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2046 // CHECK-ERROR-NEXT: str h3, [x3], #256
2047 // CHECK-ERROR-NEXT: ^
2048 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2049 // CHECK-ERROR-NEXT: str h3, [x13], #-257
2050 // CHECK-ERROR-NEXT: ^
2051 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2052 // CHECK-ERROR-NEXT: str s3, [x3], #256
2053 // CHECK-ERROR-NEXT: ^
2054 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2055 // CHECK-ERROR-NEXT: str s3, [x13], #-257
2056 // CHECK-ERROR-NEXT: ^
2057 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2058 // CHECK-ERROR-NEXT: str d3, [x3], #256
2059 // CHECK-ERROR-NEXT: ^
2060 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2061 // CHECK-ERROR-NEXT: str d3, [x13], #-257
2062 // CHECK-ERROR-NEXT: ^
2063 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2064 // CHECK-ERROR-NEXT: str q3, [x3], #256
2065 // CHECK-ERROR-NEXT: ^
2066 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2067 // CHECK-ERROR-NEXT: str q3, [x13], #-257
2068 // CHECK-ERROR-NEXT: ^
2071 ldr b3, [x13], #-257
2073 ldr h3, [x13], #-257
2075 ldr s3, [x13], #-257
2077 ldr d3, [x13], #-257
2079 ldr q3, [x13], #-257
2080 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2081 // CHECK-ERROR-NEXT: ldr b3, [x3], #256
2082 // CHECK-ERROR-NEXT: ^
2083 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2084 // CHECK-ERROR-NEXT: ldr b3, [x13], #-257
2085 // CHECK-ERROR-NEXT: ^
2086 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2087 // CHECK-ERROR-NEXT: ldr h3, [x3], #256
2088 // CHECK-ERROR-NEXT: ^
2089 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2090 // CHECK-ERROR-NEXT: ldr h3, [x13], #-257
2091 // CHECK-ERROR-NEXT: ^
2092 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2093 // CHECK-ERROR-NEXT: ldr s3, [x3], #256
2094 // CHECK-ERROR-NEXT: ^
2095 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2096 // CHECK-ERROR-NEXT: ldr s3, [x13], #-257
2097 // CHECK-ERROR-NEXT: ^
2098 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2099 // CHECK-ERROR-NEXT: ldr d3, [x3], #256
2100 // CHECK-ERROR-NEXT: ^
2101 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2102 // CHECK-ERROR-NEXT: ldr d3, [x13], #-257
2103 // CHECK-ERROR-NEXT: ^
2104 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2105 // CHECK-ERROR-NEXT: ldr q3, [x3], #256
2106 // CHECK-ERROR-NEXT: ^
2107 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2108 // CHECK-ERROR-NEXT: ldr q3, [x13], #-257
2109 // CHECK-ERROR-NEXT: ^
2111 //------------------------------------------------------------------------------
2112 // Load-store register (immediate pre-indexed)
2113 //------------------------------------------------------------------------------
2116 // CHECK-ERROR: error:
2117 // CHECK-ERROR-NEXT: ldr x3, [x4]!
2118 // CHECK-ERROR-NEXT: ^
2120 strb w1, [x19, #256]!
2121 strb w9, [sp, #-257]!
2122 strh w1, [x19, #256]!
2123 strh w9, [sp, #-257]!
2124 str w1, [x19, #256]!
2125 str w9, [sp, #-257]!
2126 // CHECK-ERROR: error: invalid operand for instruction
2127 // CHECK-ERROR-NEXT: strb w1, [x19, #256]!
2128 // CHECK-ERROR-NEXT: ^
2129 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2130 // CHECK-ERROR-NEXT: strb w9, [sp, #-257]!
2131 // CHECK-ERROR-NEXT: ^
2132 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2133 // CHECK-ERROR-NEXT: strh w1, [x19, #256]!
2134 // CHECK-ERROR-NEXT: ^
2135 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2136 // CHECK-ERROR-NEXT: strh w9, [sp, #-257]!
2137 // CHECK-ERROR-NEXT: ^
2138 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2139 // CHECK-ERROR-NEXT: str w1, [x19, #256]!
2140 // CHECK-ERROR-NEXT: ^
2141 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2142 // CHECK-ERROR-NEXT: str w9, [sp, #-257]!
2143 // CHECK-ERROR-NEXT: ^
2145 ldrb w1, [x19, #256]!
2146 ldrb w9, [sp, #-257]!
2147 ldrh w1, [x19, #256]!
2148 ldrh w9, [sp, #-257]!
2149 ldr w1, [x19, #256]!
2150 ldr w9, [sp, #-257]!
2151 // CHECK-ERROR: error: invalid operand for instruction
2152 // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]!
2153 // CHECK-ERROR-NEXT: ^
2154 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2155 // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]!
2156 // CHECK-ERROR-NEXT: ^
2157 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2158 // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]!
2159 // CHECK-ERROR-NEXT: ^
2160 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2161 // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]!
2162 // CHECK-ERROR-NEXT: ^
2163 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2164 // CHECK-ERROR-NEXT: ldr w1, [x19, #256]!
2165 // CHECK-ERROR-NEXT: ^
2166 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2167 // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]!
2168 // CHECK-ERROR-NEXT: ^
2170 ldrsb x2, [x3, #256]!
2171 ldrsb x22, [x13, #-257]!
2172 ldrsh x2, [x3, #256]!
2173 ldrsh x22, [x13, #-257]!
2174 ldrsw x2, [x3, #256]!
2175 ldrsw x22, [x13, #-257]!
2176 // CHECK-ERROR: error: invalid operand for instruction
2177 // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]!
2178 // CHECK-ERROR-NEXT: ^
2179 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2180 // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]!
2181 // CHECK-ERROR-NEXT: ^
2182 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2183 // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]!
2184 // CHECK-ERROR-NEXT: ^
2185 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2186 // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]!
2187 // CHECK-ERROR-NEXT: ^
2188 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2189 // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]!
2190 // CHECK-ERROR-NEXT: ^
2191 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2192 // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]!
2193 // CHECK-ERROR-NEXT: ^
2195 ldrsb w2, [x3, #256]!
2196 ldrsb w22, [x13, #-257]!
2197 ldrsh w2, [x3, #256]!
2198 ldrsh w22, [x13, #-257]!
2199 // CHECK-ERROR: error: invalid operand for instruction
2200 // CHECK-ERROR-NEXT: ldrsb w2, [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: ldrsb w22, [x13, #-257]!
2204 // CHECK-ERROR-NEXT: ^
2205 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2206 // CHECK-ERROR-NEXT: ldrsh w2, [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: ldrsh w22, [x13, #-257]!
2210 // CHECK-ERROR-NEXT: ^
2213 str b3, [x13, #-257]!
2215 str h3, [x13, #-257]!
2217 str s3, [x13, #-257]!
2219 str d3, [x13, #-257]!
2220 // CHECK-ERROR: error: invalid operand for instruction
2221 // CHECK-ERROR-NEXT: str b3, [x3, #256]!
2222 // CHECK-ERROR-NEXT: ^
2223 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2224 // CHECK-ERROR-NEXT: str b3, [x13, #-257]!
2225 // CHECK-ERROR-NEXT: ^
2226 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2227 // CHECK-ERROR-NEXT: str h3, [x3, #256]!
2228 // CHECK-ERROR-NEXT: ^
2229 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2230 // CHECK-ERROR-NEXT: str h3, [x13, #-257]!
2231 // CHECK-ERROR-NEXT: ^
2232 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2233 // CHECK-ERROR-NEXT: str s3, [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: str s3, [x13, #-257]!
2237 // CHECK-ERROR-NEXT: ^
2238 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2239 // CHECK-ERROR-NEXT: str d3, [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: str d3, [x13, #-257]!
2243 // CHECK-ERROR-NEXT: ^
2246 ldr b3, [x13, #-257]!
2248 ldr h3, [x13, #-257]!
2250 ldr s3, [x13, #-257]!
2252 ldr d3, [x13, #-257]!
2253 // CHECK-ERROR: error: invalid operand for instruction
2254 // CHECK-ERROR-NEXT: ldr b3, [x3, #256]!
2255 // CHECK-ERROR-NEXT: ^
2256 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2257 // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]!
2258 // CHECK-ERROR-NEXT: ^
2259 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2260 // CHECK-ERROR-NEXT: ldr h3, [x3, #256]!
2261 // CHECK-ERROR-NEXT: ^
2262 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2263 // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]!
2264 // CHECK-ERROR-NEXT: ^
2265 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2266 // CHECK-ERROR-NEXT: ldr s3, [x3, #256]!
2267 // CHECK-ERROR-NEXT: ^
2268 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2269 // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]!
2270 // CHECK-ERROR-NEXT: ^
2271 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2272 // CHECK-ERROR-NEXT: ldr d3, [x3, #256]!
2273 // CHECK-ERROR-NEXT: ^
2274 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2275 // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]!
2276 // CHECK-ERROR-NEXT: ^
2278 //------------------------------------------------------------------------------
2279 // Load/store (unprivileged)
2280 //------------------------------------------------------------------------------
2282 ldtrb w2, [sp, #256]
2283 sttrh w17, [x1, #256]
2284 ldtrsw x20, [x1, #256]
2285 ldtr x12, [sp, #256]
2286 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2287 // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256]
2288 // CHECK-ERROR-NEXT: ^
2289 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2290 // CHECK-ERROR-NEXT: sttrh w17, [x1, #256]
2291 // CHECK-ERROR-NEXT: ^
2292 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2293 // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256]
2294 // CHECK-ERROR-NEXT: ^
2295 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2296 // CHECK-ERROR-NEXT: ldtr x12, [sp, #256]
2297 // CHECK-ERROR-NEXT: ^
2299 sttr h2, [x2, #-257]
2300 sttr b2, [x2, #-257]
2301 ldtrsb x9, [sp, #-257]
2302 ldtr w2, [x30, #-257]
2303 sttr q9, [x20, #-257]
2304 // CHECK-ERROR: error: invalid operand for instruction
2305 // CHECK-ERROR-NEXT: sttr h2, [x2, #-257]
2306 // CHECK-ERROR-NEXT: ^
2307 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2308 // CHECK-ERROR-NEXT: sttr b2, [x2, #-257]
2309 // CHECK-ERROR-NEXT: ^
2310 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2311 // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257]
2312 // CHECK-ERROR-NEXT: ^
2313 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2314 // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257]
2315 // CHECK-ERROR-NEXT: ^
2316 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2317 // CHECK-ERROR-NEXT: sttr q9, [x20, #-257]
2318 // CHECK-ERROR-NEXT: ^
2321 //------------------------------------------------------------------------------
2322 // Load/store (unsigned immediate)
2323 //------------------------------------------------------------------------------
2325 //// Out of range immediates
2326 ldr q0, [x11, #65536]
2327 ldr x0, [sp, #32768]
2328 ldr w0, [x4, #16384]
2329 ldrh w2, [x21, #8192]
2330 ldrb w3, [x12, #4096]
2331 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2332 // CHECK-ERROR-NEXT: ldr q0, [x11, #65536]
2333 // CHECK-ERROR-NEXT: ^
2334 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2335 // CHECK-ERROR-NEXT: ldr x0, [sp, #32768]
2336 // CHECK-ERROR-NEXT: ^
2337 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2338 // CHECK-ERROR-NEXT: ldr w0, [x4, #16384]
2339 // CHECK-ERROR-NEXT: ^
2340 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2341 // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192]
2342 // CHECK-ERROR-NEXT: ^
2343 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2344 // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096]
2345 // CHECK-ERROR-NEXT: ^
2347 //// Misaligned addresses
2349 ldrsh w2, [x0, #123]
2351 // CHECK-ERROR-AARCH64: error: too few operands for instruction
2352 // CHECK-ERROR-AARCH64-NEXT: ldr w0, [x0, #2]
2353 // CHECK-ERROR-AARCH64-NEXT: ^
2354 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2355 // CHECK-ERROR-AARCH64-NEXT: ldrsh w2, [x0, #123]
2356 // CHECK-ERROR-AARCH64-NEXT: ^
2357 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2358 // CHECK-ERROR-AARCH64-NEXT: str q0, [x0, #8]
2359 // CHECK-ERROR-AARCH64-NEXT: ^
2361 //// 32-bit addresses
2364 // CHECK-ERROR: error: invalid operand for instruction
2365 // CHECK-ERROR-NEXT: ldr w0, [w20]
2366 // CHECK-ERROR-NEXT: ^
2367 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2368 // CHECK-ERROR-NEXT: ldrsh x3, [wsp]
2369 // CHECK-ERROR-NEXT: ^
2375 str w7, [x12, #16384]
2376 // CHECK-ERROR: error: invalid operand for instruction
2377 // CHECK-ERROR-NEXT: strb w0, [wsp]
2378 // CHECK-ERROR-NEXT: ^
2379 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
2380 // CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1]
2381 // CHECK-ERROR-AARCH64-NEXT: ^
2382 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2383 // CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
2384 // CHECK-ERROR-AARCH64-NEXT: ^
2385 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2386 // CHECK-ERROR-NEXT: str w7, [x12, #16384]
2387 // CHECK-ERROR-NEXT: ^
2392 prfm pldl1strm, [w3, #8]
2394 // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
2395 // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
2396 // CHECK-ERROR-NEXT: prfm #-1, [sp]
2397 // CHECK-ERROR-NEXT: ^
2398 // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
2399 // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
2400 // CHECK-ERROR-NEXT: prfm #32, [sp, #8]
2401 // CHECK-ERROR-NEXT: ^
2402 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2403 // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8]
2404 // CHECK-ERROR-NEXT: ^
2405 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
2406 // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected
2407 // CHECK-ERROR-NEXT: prfm wibble, [sp]
2408 // CHECK-ERROR-NEXT: ^
2410 //------------------------------------------------------------------------------
2411 // Load/store register (register offset)
2412 //------------------------------------------------------------------------------
2415 ldr w4, [x0, x4, lsl]
2416 ldr w9, [x5, x5, uxtw]
2417 ldr w10, [x6, x9, sxtw #2]
2418 ldr w11, [x7, w2, lsl #2]
2419 ldr w12, [x8, w1, sxtx]
2420 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2421 // CHECK-ERROR-NEXT: ldr w3, [xzr, x3]
2422 // CHECK-ERROR-NEXT: ^
2423 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2424 // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl]
2425 // CHECK-ERROR-NEXT: ^
2426 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2427 // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw]
2428 // CHECK-ERROR-NEXT: ^
2429 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2430 // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2]
2431 // CHECK-ERROR-NEXT: ^
2432 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2433 // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2]
2434 // CHECK-ERROR-NEXT: ^
2435 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2436 // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx]
2437 // CHECK-ERROR-NEXT: ^
2439 ldrsb w9, [x4, x2, lsl #-1]
2440 strb w9, [x4, x2, lsl #1]
2441 // CHECK-ERROR-NEXT: error: expected integer shift amount
2442 // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1]
2443 // CHECK-ERROR-NEXT: ^
2444 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
2445 // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1]
2446 // CHECK-ERROR-NEXT: ^
2448 ldrsh w9, [x4, x2, lsl #-1]
2449 ldr h13, [x4, w2, uxtw #2]
2450 // CHECK-ERROR-NEXT: error: expected integer shift amount
2451 // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1]
2452 // CHECK-ERROR-NEXT: ^
2453 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
2454 // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2]
2455 // CHECK-ERROR-NEXT: ^
2457 str w9, [x5, w9, sxtw #-1]
2458 str s3, [sp, w9, uxtw #1]
2459 ldrsw x9, [x15, x4, sxtx #3]
2460 // CHECK-ERROR-NEXT: error: expected integer shift amount
2461 // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1]
2462 // CHECK-ERROR-NEXT: ^
2463 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2464 // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1]
2465 // CHECK-ERROR-NEXT: ^
2466 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2467 // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3]
2468 // CHECK-ERROR-NEXT: ^
2470 str xzr, [x5, x9, sxtx #-1]
2471 prfm pldl3keep, [sp, x20, lsl #2]
2472 ldr d3, [x20, wzr, uxtw #4]
2473 // CHECK-ERROR-NEXT: error: expected integer shift amount
2474 // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1]
2475 // CHECK-ERROR-NEXT: ^
2476 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
2477 // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2]
2478 // CHECK-ERROR-NEXT: ^
2479 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
2480 // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4]
2481 // CHECK-ERROR-NEXT: ^
2483 ldr q5, [sp, x2, lsl #-1]
2484 ldr q10, [x20, w4, uxtw #2]
2485 str q21, [x20, w4, uxtw #5]
2486 // CHECK-ERROR-NEXT: error: expected integer shift amount
2487 // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1]
2488 // CHECK-ERROR-NEXT: ^
2489 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2490 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
2491 // CHECK-ERROR-NEXT: ldr q10, [x20, w4, uxtw #2]
2492 // CHECK-ERROR-NEXT: ^
2493 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2494 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
2495 // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5]
2496 // CHECK-ERROR-NEXT: ^
2498 //------------------------------------------------------------------------------
2499 // Load/store register pair (offset)
2500 //------------------------------------------------------------------------------
2501 ldp w3, w2, [x4, #1]
2502 stp w1, w2, [x3, #253]
2503 stp w9, w10, [x5, #256]
2504 ldp w11, w12, [x9, #-260]
2506 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2507 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]
2508 // CHECK-ERROR-NEXT: ^
2509 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2510 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]
2511 // CHECK-ERROR-NEXT: ^
2512 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2513 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]
2514 // CHECK-ERROR-NEXT: ^
2515 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2516 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]
2517 // CHECK-ERROR-NEXT: ^
2518 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2519 // CHECK-ERROR-NEXT: stp wsp, w9, [sp]
2520 // CHECK-ERROR-NEXT: ^
2522 ldpsw x9, x2, [sp, #2]
2523 ldpsw x1, x2, [x10, #256]
2524 ldpsw x3, x4, [x11, #-260]
2525 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2526 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]
2527 // CHECK-ERROR-NEXT: ^
2528 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2529 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]
2530 // CHECK-ERROR-NEXT: ^
2531 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2532 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]
2533 // CHECK-ERROR-NEXT: ^
2535 ldp x2, x5, [sp, #4]
2536 ldp x5, x6, [x9, #512]
2537 stp x7, x8, [x10, #-520]
2538 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2539 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]
2540 // CHECK-ERROR-NEXT: ^
2541 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2542 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]
2543 // CHECK-ERROR-NEXT: ^
2544 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2545 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]
2546 // CHECK-ERROR-NEXT: ^
2550 // CHECK-ERROR: error: invalid operand for instruction
2551 // CHECK-ERROR-NEXT: ldp sp, x3, [x10]
2552 // CHECK-ERROR-NEXT: ^
2553 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2554 // CHECK-ERROR-NEXT: stp x3, sp, [x9]
2555 // CHECK-ERROR-NEXT: ^
2557 stp s3, s5, [sp, #-2]
2558 ldp s6, s26, [x4, #-260]
2559 stp s13, s19, [x5, #256]
2560 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2561 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]
2562 // CHECK-ERROR-NEXT: ^
2563 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2564 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]
2565 // CHECK-ERROR-NEXT: ^
2566 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2567 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]
2568 // CHECK-ERROR-NEXT: ^
2571 ldp d5, d6, [x0, #512]
2572 stp d7, d8, [x0, #-520]
2573 // CHECK-ERROR: error: invalid operand for instruction
2574 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr]
2575 // CHECK-ERROR-NEXT: ^
2576 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2577 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]
2578 // CHECK-ERROR-NEXT: ^
2579 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2580 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]
2581 // CHECK-ERROR-NEXT: ^
2584 ldp q3, q5, [sp, #8]
2585 stp q20, q25, [x5, #1024]
2586 ldp q30, q15, [x23, #-1040]
2587 // CHECK-ERROR: error: invalid operand for instruction
2588 // CHECK-ERROR-NEXT: ldp d3, q2, [sp]
2589 // CHECK-ERROR-NEXT: ^
2590 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2591 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]
2592 // CHECK-ERROR-NEXT: ^
2593 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2594 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]
2595 // CHECK-ERROR-NEXT: ^
2596 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2597 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]
2598 // CHECK-ERROR-NEXT: ^
2600 //------------------------------------------------------------------------------
2601 // Load/store register pair (post-indexed)
2602 //------------------------------------------------------------------------------
2604 ldp w3, w2, [x4], #1
2605 stp w1, w2, [x3], #253
2606 stp w9, w10, [x5], #256
2607 ldp w11, w12, [x9], #-260
2608 stp wsp, w9, [sp], #0
2609 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2610 // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1
2611 // CHECK-ERROR-NEXT: ^
2612 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2613 // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253
2614 // CHECK-ERROR-NEXT: ^
2615 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2616 // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256
2617 // CHECK-ERROR-NEXT: ^
2618 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2619 // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260
2620 // CHECK-ERROR-NEXT: ^
2621 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2622 // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0
2623 // CHECK-ERROR-NEXT: ^
2625 ldpsw x9, x2, [sp], #2
2626 ldpsw x1, x2, [x10], #256
2627 ldpsw x3, x4, [x11], #-260
2628 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2629 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2
2630 // CHECK-ERROR-NEXT: ^
2631 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2632 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256
2633 // CHECK-ERROR-NEXT: ^
2634 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2635 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260
2636 // CHECK-ERROR-NEXT: ^
2638 ldp x2, x5, [sp], #4
2639 ldp x5, x6, [x9], #512
2640 stp x7, x8, [x10], #-520
2641 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2642 // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4
2643 // CHECK-ERROR-NEXT: ^
2644 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2645 // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512
2646 // CHECK-ERROR-NEXT: ^
2647 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2648 // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520
2649 // CHECK-ERROR-NEXT: ^
2651 ldp sp, x3, [x10], #0
2652 stp x3, sp, [x9], #0
2653 // CHECK-ERROR: error: invalid operand for instruction
2654 // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0
2655 // CHECK-ERROR-NEXT: ^
2656 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2657 // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0
2658 // CHECK-ERROR-NEXT: ^
2660 stp s3, s5, [sp], #-2
2661 ldp s6, s26, [x4], #-260
2662 stp s13, s19, [x5], #256
2663 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2664 // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2
2665 // CHECK-ERROR-NEXT: ^
2666 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2667 // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260
2668 // CHECK-ERROR-NEXT: ^
2669 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2670 // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256
2671 // CHECK-ERROR-NEXT: ^
2673 ldp d3, d4, [xzr], #0
2674 ldp d5, d6, [x0], #512
2675 stp d7, d8, [x0], #-520
2676 // CHECK-ERROR: error: invalid operand for instruction
2677 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0
2678 // CHECK-ERROR-NEXT: ^
2679 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2680 // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512
2681 // CHECK-ERROR-NEXT: ^
2682 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2683 // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520
2684 // CHECK-ERROR-NEXT: ^
2686 ldp d3, q2, [sp], #0
2687 ldp q3, q5, [sp], #8
2688 stp q20, q25, [x5], #1024
2689 ldp q30, q15, [x23], #-1040
2690 // CHECK-ERROR: error: invalid operand for instruction
2691 // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0
2692 // CHECK-ERROR-NEXT: ^
2693 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2694 // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8
2695 // CHECK-ERROR-NEXT: ^
2696 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2697 // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024
2698 // CHECK-ERROR-NEXT: ^
2699 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2700 // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040
2701 // CHECK-ERROR-NEXT: ^
2703 //------------------------------------------------------------------------------
2704 // Load/store register pair (pre-indexed)
2705 //------------------------------------------------------------------------------
2707 ldp w3, w2, [x4, #1]!
2708 stp w1, w2, [x3, #253]!
2709 stp w9, w10, [x5, #256]!
2710 ldp w11, w12, [x9, #-260]!
2711 stp wsp, w9, [sp, #0]!
2712 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2713 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]!
2714 // CHECK-ERROR-NEXT: ^
2715 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2716 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]!
2717 // CHECK-ERROR-NEXT: ^
2718 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2719 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]!
2720 // CHECK-ERROR-NEXT: ^
2721 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2722 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]!
2723 // CHECK-ERROR-NEXT: ^
2724 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2725 // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]!
2726 // CHECK-ERROR-NEXT: ^
2728 ldpsw x9, x2, [sp, #2]!
2729 ldpsw x1, x2, [x10, #256]!
2730 ldpsw x3, x4, [x11, #-260]!
2731 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2732 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]!
2733 // CHECK-ERROR-NEXT: ^
2734 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2735 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]!
2736 // CHECK-ERROR-NEXT: ^
2737 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2738 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]!
2739 // CHECK-ERROR-NEXT: ^
2741 ldp x2, x5, [sp, #4]!
2742 ldp x5, x6, [x9, #512]!
2743 stp x7, x8, [x10, #-520]!
2744 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2745 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]!
2746 // CHECK-ERROR-NEXT: ^
2747 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2748 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]!
2749 // CHECK-ERROR-NEXT: ^
2750 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2751 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]!
2752 // CHECK-ERROR-NEXT: ^
2754 ldp sp, x3, [x10, #0]!
2755 stp x3, sp, [x9, #0]!
2756 // CHECK-ERROR: error: invalid operand for instruction
2757 // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]!
2758 // CHECK-ERROR-NEXT: ^
2759 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2760 // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]!
2761 // CHECK-ERROR-NEXT: ^
2763 stp s3, s5, [sp, #-2]!
2764 ldp s6, s26, [x4, #-260]!
2765 stp s13, s19, [x5, #256]!
2766 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2767 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]!
2768 // CHECK-ERROR-NEXT: ^
2769 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2770 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]!
2771 // CHECK-ERROR-NEXT: ^
2772 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2773 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]!
2774 // CHECK-ERROR-NEXT: ^
2776 ldp d3, d4, [xzr, #0]!
2777 ldp d5, d6, [x0, #512]!
2778 stp d7, d8, [x0, #-520]!
2779 // CHECK-ERROR: error: invalid operand for instruction
2780 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]!
2781 // CHECK-ERROR-NEXT: ^
2782 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2783 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]!
2784 // CHECK-ERROR-NEXT: ^
2785 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2786 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]!
2787 // CHECK-ERROR-NEXT: ^
2789 ldp d3, q2, [sp, #0]!
2790 ldp q3, q5, [sp, #8]!
2791 stp q20, q25, [x5, #1024]!
2792 ldp q30, q15, [x23, #-1040]!
2793 // CHECK-ERROR: error: invalid operand for instruction
2794 // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]!
2795 // CHECK-ERROR-NEXT: ^
2796 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2797 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]!
2798 // CHECK-ERROR-NEXT: ^
2799 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2800 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]!
2801 // CHECK-ERROR-NEXT: ^
2802 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2803 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]!
2804 // CHECK-ERROR-NEXT: ^
2806 //------------------------------------------------------------------------------
2807 // Load/store register pair (offset)
2808 //------------------------------------------------------------------------------
2809 ldnp w3, w2, [x4, #1]
2810 stnp w1, w2, [x3, #253]
2811 stnp w9, w10, [x5, #256]
2812 ldnp w11, w12, [x9, #-260]
2814 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2815 // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1]
2816 // CHECK-ERROR-NEXT: ^
2817 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2818 // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253]
2819 // CHECK-ERROR-NEXT: ^
2820 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2821 // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256]
2822 // CHECK-ERROR-NEXT: ^
2823 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2824 // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260]
2825 // CHECK-ERROR-NEXT: ^
2826 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2827 // CHECK-ERROR-NEXT: stnp wsp, w9, [sp]
2828 // CHECK-ERROR-NEXT: ^
2830 ldnp x2, x5, [sp, #4]
2831 ldnp x5, x6, [x9, #512]
2832 stnp x7, x8, [x10, #-520]
2833 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2834 // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4]
2835 // CHECK-ERROR-NEXT: ^
2836 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2837 // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512]
2838 // CHECK-ERROR-NEXT: ^
2839 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2840 // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520]
2841 // CHECK-ERROR-NEXT: ^
2845 // CHECK-ERROR: error: invalid operand for instruction
2846 // CHECK-ERROR-NEXT: ldnp sp, x3, [x10]
2847 // CHECK-ERROR-NEXT: ^
2848 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2849 // CHECK-ERROR-NEXT: stnp x3, sp, [x9]
2850 // CHECK-ERROR-NEXT: ^
2852 stnp s3, s5, [sp, #-2]
2853 ldnp s6, s26, [x4, #-260]
2854 stnp s13, s19, [x5, #256]
2855 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2856 // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2]
2857 // CHECK-ERROR-NEXT: ^
2858 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2859 // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260]
2860 // CHECK-ERROR-NEXT: ^
2861 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2862 // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256]
2863 // CHECK-ERROR-NEXT: ^
2866 ldnp d5, d6, [x0, #512]
2867 stnp d7, d8, [x0, #-520]
2868 // CHECK-ERROR: error: invalid operand for instruction
2869 // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr]
2870 // CHECK-ERROR-NEXT: ^
2871 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2872 // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512]
2873 // CHECK-ERROR-NEXT: ^
2874 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2875 // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520]
2876 // CHECK-ERROR-NEXT: ^
2879 ldnp q3, q5, [sp, #8]
2880 stnp q20, q25, [x5, #1024]
2881 ldnp q30, q15, [x23, #-1040]
2882 // CHECK-ERROR: error: invalid operand for instruction
2883 // CHECK-ERROR-NEXT: ldnp d3, q2, [sp]
2884 // CHECK-ERROR-NEXT: ^
2885 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2886 // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8]
2887 // CHECK-ERROR-NEXT: ^
2888 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2889 // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024]
2890 // CHECK-ERROR-NEXT: ^
2891 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2892 // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040]
2893 // CHECK-ERROR-NEXT: ^
2895 //------------------------------------------------------------------------------
2896 // Logical (shifted register)
2897 //------------------------------------------------------------------------------
2898 orr w0, w1, #0xffffffff
2899 and x3, x5, #0xffffffffffffffff
2900 // CHECK-ERROR: error: expected compatible register or logical immediate
2901 // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff
2902 // CHECK-ERROR-NEXT: ^
2903 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2904 // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff
2905 // CHECK-ERROR-NEXT: ^
2909 // CHECK-ERROR: error: expected compatible register or logical immediate
2910 // CHECK-ERROR-NEXT: ands w3, w9, #0x0
2911 // CHECK-ERROR-NEXT: ^
2912 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2913 // CHECK-ERROR-NEXT: eor x2, x0, #0x0
2914 // CHECK-ERROR-NEXT: ^
2917 eor x9, x20, #0x1234
2918 // CHECK-ERROR: error: expected compatible register or logical immediate
2919 // CHECK-ERROR-NEXT: eor w3, w5, #0x83
2920 // CHECK-ERROR-NEXT: ^
2921 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2922 // CHECK-ERROR-NEXT: eor x9, x20, #0x1234
2923 // CHECK-ERROR-NEXT: ^
2925 and wzr, w4, 0xffff0000
2926 eor xzr, x9, #0xffff0000ffff0000
2927 // CHECK-ERROR: error: invalid operand for instruction
2928 // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000
2929 // CHECK-ERROR-NEXT: ^
2930 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2931 // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000
2932 // CHECK-ERROR-NEXT: ^
2934 orr w3, wsp, #0xf0f0f0f0
2935 ands x3, sp, #0xaaaaaaaaaaaaaaaa
2936 // CHECK-ERROR: error: invalid operand for instruction
2937 // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0
2938 // CHECK-ERROR-NEXT: ^
2939 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2940 // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa
2941 // CHECK-ERROR-NEXT: ^
2943 tst sp, #0xe0e0e0e0e0e0e0e0
2944 // CHECK-ERROR: error: invalid operand for instruction
2945 // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0
2946 // CHECK-ERROR-NEXT: ^
2948 // movi has been removed from the specification. Make sure it's really gone.
2949 movi wzr, #0x44444444
2951 movi x9, #0x0000ffff00000000
2952 // CHECK-ERROR: error: invalid operand for instruction
2953 // CHECK-ERROR-NEXT: movi wzr, #0x44444444
2954 // CHECK-ERROR-NEXT: ^
2955 // CHECK-ERROR: error: invalid operand for instruction
2956 // CHECK-ERROR-NEXT: movi w3, #0xffff
2957 // CHECK-ERROR-NEXT: ^
2958 // CHECK-ERROR: error: invalid operand for instruction
2959 // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000
2960 // CHECK-ERROR-NEXT: ^
2962 //------------------------------------------------------------------------------
2963 // Logical (shifted register)
2964 //------------------------------------------------------------------------------
2966 //// Out of range shifts
2967 and w2, w24, w6, lsl #-1
2968 and w4, w6, w12, lsl #32
2969 and x4, x6, x12, lsl #64
2970 and x2, x5, x11, asr
2971 // CHECK-ERROR: error: expected integer shift amount
2972 // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1
2973 // CHECK-ERROR-NEXT: ^
2974 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
2975 // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32
2976 // CHECK-ERROR-NEXT: ^
2977 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
2978 // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64
2979 // CHECK-ERROR-NEXT: ^
2980 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2981 // CHECK-ERROR-NEXT: and x2, x5, x11, asr
2982 // CHECK-ERROR-NEXT: ^
2986 bics x20, sp, x9, lsr #0
2987 orn x2, x6, sp, lsl #3
2988 // CHECK-ERROR: error: invalid operand for instruction
2989 // CHECK-ERROR-NEXT: orn wsp, w3, w5
2990 // CHECK-ERROR-NEXT: ^
2991 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2992 // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0
2993 // CHECK-ERROR-NEXT: ^
2994 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2995 // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3
2996 // CHECK-ERROR-NEXT: ^
2998 //// Mismatched registers
3001 and x4, x5, w6, lsl #12
3002 orr w2, w5, x7, asr #0
3003 // CHECK-ERROR: error: invalid operand for instruction
3004 // CHECK-ERROR-NEXT: and x3, w2, w1
3005 // CHECK-ERROR-NEXT: ^
3006 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3007 // CHECK-ERROR-NEXT: ands w1, x12, w2
3008 // CHECK-ERROR-NEXT: ^
3009 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
3010 // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12
3011 // CHECK-ERROR-NEXT: ^
3012 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
3013 // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0
3014 // CHECK-ERROR-NEXT: ^
3016 //// Shifts should not be allowed on mov
3018 // CHECK-ERROR: error: invalid operand for instruction
3019 // CHECK-ERROR-NEXT: mov w3, w7, lsl #13
3020 // CHECK-ERROR-NEXT: ^
3022 //------------------------------------------------------------------------------
3023 // Move wide (immediate)
3024 //------------------------------------------------------------------------------
3026 movz w3, #65536, lsl #0
3029 movk w3, #0, lsl #-1
3030 movn w2, #-1, lsl #0
3032 movk w3, #1, lsl #32
3033 movn x2, #12, lsl #64
3034 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3035 // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0
3036 // CHECK-ERROR-NEXT: ^
3037 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3038 // CHECK-ERROR-NEXT: movz w4, #65536
3039 // CHECK-ERROR-NEXT: ^
3040 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3041 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
3042 // CHECK-ERROR-NEXT: movn w1, #2, lsl #1
3043 // CHECK-ERROR-NEXT: ^
3044 // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
3045 // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
3046 // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1
3047 // CHECK-ERROR-NEXT: ^
3048 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3049 // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0
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 x3, #-1
3053 // CHECK-ERROR-NEXT: ^
3054 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3055 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
3056 // CHECK-ERROR-NEXT: movk w3, #1, lsl #32
3057 // CHECK-ERROR-NEXT: ^
3058 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3059 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
3060 // CHECK-ERROR-NEXT: movn x2, #12, lsl #64
3061 // CHECK-ERROR-NEXT: ^
3063 movz x12, #:abs_g0:sym, lsl #16
3064 movz x12, #:abs_g0:sym, lsl #0
3065 movn x2, #:abs_g0:sym
3066 movk w3, #:abs_g0:sym
3067 movz x3, #:abs_g0_nc:sym
3068 movn x4, #:abs_g0_nc:sym
3069 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3070 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16
3071 // CHECK-ERROR-NEXT: ^
3072 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3073 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0
3074 // CHECK-ERROR-NEXT: ^
3075 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3076 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g0:sym
3077 // CHECK-ERROR-AARCH64-NEXT: ^
3078 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3079 // CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym
3080 // CHECK-ERROR-NEXT: ^
3081 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3082 // CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym
3083 // CHECK-ERROR-NEXT: ^
3084 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3085 // CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym
3086 // CHECK-ERROR-NEXT: ^
3088 movn x2, #:abs_g1:sym
3089 movk w3, #:abs_g1:sym
3090 movz x3, #:abs_g1_nc:sym
3091 movn x4, #:abs_g1_nc:sym
3092 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3093 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g1:sym
3094 // CHECK-ERROR-AARCH64-NEXT: ^
3095 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3096 // CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym
3097 // CHECK-ERROR-NEXT: ^
3098 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3099 // CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym
3100 // CHECK-ERROR-NEXT: ^
3101 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3102 // CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym
3103 // CHECK-ERROR-NEXT: ^
3105 movz w12, #:abs_g2:sym
3106 movn x12, #:abs_g2:sym
3107 movk x13, #:abs_g2:sym
3108 movk w3, #:abs_g2_nc:sym
3109 movz x13, #:abs_g2_nc:sym
3110 movn x24, #:abs_g2_nc:sym
3111 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3112 // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym
3113 // CHECK-ERROR-NEXT: ^
3114 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3115 // CHECK-ERROR-AARCH64-NEXT: movn x12, #:abs_g2:sym
3116 // CHECK-ERROR-AARCH64-NEXT: ^
3117 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3118 // CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym
3119 // CHECK-ERROR-NEXT: ^
3120 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3121 // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym
3122 // CHECK-ERROR-NEXT: ^
3123 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3124 // CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym
3125 // CHECK-ERROR-NEXT: ^
3126 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3127 // CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym
3128 // CHECK-ERROR-NEXT: ^
3130 movn x19, #:abs_g3:sym
3131 movz w20, #:abs_g3:sym
3132 movk w21, #:abs_g3:sym
3133 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3134 // CHECK-ERROR-AARCH64-NEXT: movn x19, #:abs_g3:sym
3135 // CHECK-ERROR-AARCH64-NEXT: ^
3136 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3137 // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym
3138 // CHECK-ERROR-NEXT: ^
3139 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3140 // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym
3141 // CHECK-ERROR-NEXT: ^
3143 movk x19, #:abs_g0_s:sym
3144 movk w23, #:abs_g0_s:sym
3145 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3146 // CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym
3147 // CHECK-ERROR-NEXT: ^
3148 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3149 // CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym
3150 // CHECK-ERROR-NEXT: ^
3152 movk x19, #:abs_g1_s:sym
3153 movk w23, #:abs_g1_s:sym
3154 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3155 // CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym
3156 // CHECK-ERROR-NEXT: ^
3157 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3158 // CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym
3159 // CHECK-ERROR-NEXT: ^
3161 movz w2, #:abs_g2_s:sym
3162 movn w29, #:abs_g2_s:sym
3163 movk x19, #:abs_g2_s:sym
3164 movk w23, #:abs_g2_s:sym
3165 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3166 // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym
3167 // CHECK-ERROR-NEXT: ^
3168 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3169 // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym
3170 // CHECK-ERROR-NEXT: ^
3171 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3172 // CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym
3173 // CHECK-ERROR-NEXT: ^
3174 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3175 // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym
3176 // CHECK-ERROR-NEXT: ^
3178 //------------------------------------------------------------------------------
3179 // PC-relative addressing
3180 //------------------------------------------------------------------------------
3182 adr sp, loc // expects xzr
3183 adrp x3, #20 // Immediate unaligned
3184 adrp w2, loc // 64-bit register needed
3185 // CHECK-ERROR: error: invalid operand for instruction
3186 // CHECK-ERROR-NEXT: adr sp, loc
3187 // CHECK-ERROR-NEXT: ^
3188 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3189 // CHECK-ERROR-NEXT: adrp x3, #20
3190 // CHECK-ERROR-NEXT: ^
3191 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3192 // CHECK-ERROR-NEXT: adrp w2, loc
3193 // CHECK-ERROR-NEXT: ^
3197 adrp x9, #4294967296
3198 adrp x20, #-4294971392
3199 // CHECK-ERROR: error: expected label or encodable integer pc offset
3200 // CHECK-ERROR-NEXT: adr x9, #1048576
3201 // CHECK-ERROR-NEXT: ^
3202 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3203 // CHECK-ERROR-NEXT: adr x2, #-1048577
3204 // CHECK-ERROR-NEXT: ^
3205 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3206 // CHECK-ERROR-NEXT: adrp x9, #4294967296
3207 // CHECK-ERROR-NEXT: ^
3208 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3209 // CHECK-ERROR-NEXT: adrp x20, #-4294971392
3210 // CHECK-ERROR-NEXT: ^
3212 //------------------------------------------------------------------------------
3214 //------------------------------------------------------------------------------
3218 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
3219 // CHECK-ERROR-NEXT: hint #-1
3220 // CHECK-ERROR-NEXT: ^
3221 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
3222 // CHECK-ERROR-NEXT: hint #128
3223 // CHECK-ERROR-NEXT: ^
3227 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3228 // CHECK-ERROR-NEXT: clrex #-1
3229 // CHECK-ERROR-NEXT: ^
3230 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3231 // CHECK-ERROR-NEXT: clrex #16
3232 // CHECK-ERROR-NEXT: ^
3238 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3239 // CHECK-ERROR-NEXT: dsb #-1
3240 // CHECK-ERROR-NEXT: ^
3241 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3242 // CHECK-ERROR-NEXT: dsb #16
3243 // CHECK-ERROR-NEXT: ^
3244 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3245 // CHECK-ERROR-NEXT: dmb #-1
3246 // CHECK-ERROR-NEXT: ^
3247 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3248 // CHECK-ERROR-NEXT: dmb #16
3249 // CHECK-ERROR-NEXT: ^
3253 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3254 // CHECK-ERROR-NEXT: isb #-1
3255 // CHECK-ERROR-NEXT: ^
3256 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3257 // CHECK-ERROR-NEXT: isb #16
3258 // CHECK-ERROR-NEXT: ^
3264 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3265 // CHECK-ERROR-NEXT: msr daifset, x4
3266 // CHECK-ERROR-NEXT: ^
3267 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3268 // CHECK-ERROR-NEXT: msr spsel, #-1
3269 // CHECK-ERROR-NEXT: ^
3270 // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}}
3271 // CHECK-ERROR-NEXT: msr spsel #-1
3272 // CHECK-ERROR-NEXT: ^
3273 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3274 // CHECK-ERROR-NEXT: msr daifclr, #16
3275 // CHECK-ERROR-NEXT: ^
3277 sys #8, c1, c2, #7, x9
3278 sys #3, c16, c2, #3, x10
3279 sys #2, c11, c16, #5
3280 sys #4, c9, c8, #8, xzr
3281 sysl x11, #8, c1, c2, #7
3282 sysl x13, #3, c16, c2, #3
3283 sysl x9, #2, c11, c16, #5
3284 sysl x4, #4, c9, c8, #8
3285 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3286 // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9
3287 // CHECK-ERROR-NEXT: ^
3288 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3289 // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10
3290 // CHECK-ERROR-NEXT: ^
3291 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3292 // CHECK-ERROR-NEXT: sys #2, c11, c16, #5
3293 // CHECK-ERROR-NEXT: ^
3294 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3295 // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr
3296 // CHECK-ERROR-NEXT: ^
3297 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3298 // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7
3299 // CHECK-ERROR-NEXT: ^
3300 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3301 // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3
3302 // CHECK-ERROR-NEXT: ^
3303 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3304 // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5
3305 // CHECK-ERROR-NEXT: ^
3306 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3307 // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8
3308 // CHECK-ERROR-NEXT: ^
3313 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
3314 // CHECK-ERROR-NEXT: ic ialluis, x2
3315 // CHECK-ERROR-NEXT: ^
3316 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
3317 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
3318 // CHECK-ERROR-NEXT: ic allu, x7
3319 // CHECK-ERROR-NEXT: ^
3320 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
3321 // CHECK-ERROR-NEXT: ic ivau
3322 // CHECK-ERROR-NEXT: ^
3338 tlbi VMALLS12E1IS, xzr
3354 tlbi VMALLS12E1, x15
3356 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3357 // CHECK-ERROR-NEXT: tlbi IPAS2E1IS
3358 // CHECK-ERROR-NEXT: ^
3359 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3360 // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS
3361 // CHECK-ERROR-NEXT: ^
3362 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3363 // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12
3364 // CHECK-ERROR-NEXT: ^
3365 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3366 // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11
3367 // CHECK-ERROR-NEXT: ^
3368 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3369 // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20
3370 // CHECK-ERROR-NEXT: ^
3371 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3372 // CHECK-ERROR-NEXT: tlbi VAE1IS
3373 // CHECK-ERROR-NEXT: ^
3374 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3375 // CHECK-ERROR-NEXT: tlbi VAE2IS
3376 // CHECK-ERROR-NEXT: ^
3377 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3378 // CHECK-ERROR-NEXT: tlbi VAE3IS
3379 // CHECK-ERROR-NEXT: ^
3380 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3381 // CHECK-ERROR-NEXT: tlbi ASIDE1IS
3382 // CHECK-ERROR-NEXT: ^
3383 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3384 // CHECK-ERROR-NEXT: tlbi VAAE1IS
3385 // CHECK-ERROR-NEXT: ^
3386 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3387 // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0
3388 // CHECK-ERROR-NEXT: ^
3389 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3390 // CHECK-ERROR-NEXT: tlbi VALE1IS
3391 // CHECK-ERROR-NEXT: ^
3392 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3393 // CHECK-ERROR-NEXT: tlbi VALE2IS
3394 // CHECK-ERROR-NEXT: ^
3395 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3396 // CHECK-ERROR-NEXT: tlbi VALE3IS
3397 // CHECK-ERROR-NEXT: ^
3398 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3399 // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr
3400 // CHECK-ERROR-NEXT: ^
3401 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3402 // CHECK-ERROR-NEXT: tlbi VAALE1IS
3403 // CHECK-ERROR-NEXT: ^
3404 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3405 // CHECK-ERROR-NEXT: tlbi IPAS2E1
3406 // CHECK-ERROR-NEXT: ^
3407 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3408 // CHECK-ERROR-NEXT: tlbi IPAS2LE1
3409 // CHECK-ERROR-NEXT: ^
3410 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3411 // CHECK-ERROR-NEXT: tlbi VMALLE1, x9
3412 // CHECK-ERROR-NEXT: ^
3413 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3414 // CHECK-ERROR-NEXT: tlbi ALLE2, x10
3415 // CHECK-ERROR-NEXT: ^
3416 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3417 // CHECK-ERROR-NEXT: tlbi ALLE3, x11
3418 // CHECK-ERROR-NEXT: ^
3419 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3420 // CHECK-ERROR-NEXT: tlbi VAE1
3421 // CHECK-ERROR-NEXT: ^
3422 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3423 // CHECK-ERROR-NEXT: tlbi VAE2
3424 // CHECK-ERROR-NEXT: ^
3425 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3426 // CHECK-ERROR-NEXT: tlbi VAE3
3427 // CHECK-ERROR-NEXT: ^
3428 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3429 // CHECK-ERROR-NEXT: tlbi ASIDE1
3430 // CHECK-ERROR-NEXT: ^
3431 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3432 // CHECK-ERROR-NEXT: tlbi VAAE1
3433 // CHECK-ERROR-NEXT: ^
3434 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3435 // CHECK-ERROR-NEXT: tlbi ALLE1, x25
3436 // CHECK-ERROR-NEXT: ^
3437 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3438 // CHECK-ERROR-NEXT: tlbi VALE1
3439 // CHECK-ERROR-NEXT: ^
3440 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3441 // CHECK-ERROR-NEXT: tlbi VALE2
3442 // CHECK-ERROR-NEXT: ^
3443 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3444 // CHECK-ERROR-NEXT: tlbi VALE3
3445 // CHECK-ERROR-NEXT: ^
3446 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3447 // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15
3448 // CHECK-ERROR-NEXT: ^
3449 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3450 // CHECK-ERROR-NEXT: tlbi VAALE1
3451 // CHECK-ERROR-NEXT: ^
3453 // For the MSR/MRS instructions, first make sure read-only and
3454 // write-only registers actually are.
3456 msr DBGDTRRX_EL0, x12
3459 msr DBGAUTHSTATUS_EL1, x12
3468 msr ID_PFR0_EL1, x12
3469 msr ID_PFR1_EL1, x12
3470 msr ID_DFR0_EL1, x12
3471 msr ID_AFR0_EL1, x12
3472 msr ID_MMFR0_EL1, x12
3473 msr ID_MMFR1_EL1, x12
3474 msr ID_MMFR2_EL1, x12
3475 msr ID_MMFR3_EL1, x12
3476 msr ID_ISAR0_EL1, x12
3477 msr ID_ISAR1_EL1, x12
3478 msr ID_ISAR2_EL1, x12
3479 msr ID_ISAR3_EL1, x12
3480 msr ID_ISAR4_EL1, x12
3481 msr ID_ISAR5_EL1, x12
3485 msr ID_AA64PFR0_EL1, x12
3486 msr ID_AA64PFR1_EL1, x12
3487 msr ID_AA64DFR0_EL1, x12
3488 msr ID_AA64DFR1_EL1, x12
3489 msr ID_AA64AFR0_EL1, x12
3490 msr ID_AA64AFR1_EL1, x12
3491 msr ID_AA64ISAR0_EL1, x12
3492 msr ID_AA64ISAR1_EL1, x12
3493 msr ID_AA64MMFR0_EL1, x12
3494 msr ID_AA64MMFR1_EL1, x12
3495 msr PMCEID0_EL0, x12
3496 msr PMCEID1_EL0, x12
3503 msr PMEVCNTR31_EL0, x12
3504 msr PMEVTYPER31_EL0, x12
3505 // CHECK-ERROR: error: expected writable system register or pstate
3506 // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12
3507 // CHECK-ERROR-NEXT: ^
3508 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3509 // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12
3510 // CHECK-ERROR-NEXT: ^
3511 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3512 // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12
3513 // CHECK-ERROR-NEXT: ^
3514 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3515 // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12
3516 // CHECK-ERROR-NEXT: ^
3517 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3518 // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12
3519 // CHECK-ERROR-NEXT: ^
3520 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3521 // CHECK-ERROR-NEXT: msr MIDR_EL1, x12
3522 // CHECK-ERROR-NEXT: ^
3523 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3524 // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12
3525 // CHECK-ERROR-NEXT: ^
3526 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3527 // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12
3528 // CHECK-ERROR-NEXT: ^
3529 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3530 // CHECK-ERROR-NEXT: msr CTR_EL0, x12
3531 // CHECK-ERROR-NEXT: ^
3532 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3533 // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12
3534 // CHECK-ERROR-NEXT: ^
3535 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3536 // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12
3537 // CHECK-ERROR-NEXT: ^
3538 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3539 // CHECK-ERROR-NEXT: msr AIDR_EL1, x12
3540 // CHECK-ERROR-NEXT: ^
3541 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3542 // CHECK-ERROR-NEXT: msr DCZID_EL0, x12
3543 // CHECK-ERROR-NEXT: ^
3544 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3545 // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12
3546 // CHECK-ERROR-NEXT: ^
3547 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3548 // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12
3549 // CHECK-ERROR-NEXT: ^
3550 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3551 // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12
3552 // CHECK-ERROR-NEXT: ^
3553 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3554 // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12
3555 // CHECK-ERROR-NEXT: ^
3556 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3557 // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12
3558 // CHECK-ERROR-NEXT: ^
3559 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3560 // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12
3561 // CHECK-ERROR-NEXT: ^
3562 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3563 // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12
3564 // CHECK-ERROR-NEXT: ^
3565 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3566 // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12
3567 // CHECK-ERROR-NEXT: ^
3568 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3569 // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12
3570 // CHECK-ERROR-NEXT: ^
3571 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3572 // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12
3573 // CHECK-ERROR-NEXT: ^
3574 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3575 // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12
3576 // CHECK-ERROR-NEXT: ^
3577 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3578 // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12
3579 // CHECK-ERROR-NEXT: ^
3580 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3581 // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12
3582 // CHECK-ERROR-NEXT: ^
3583 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3584 // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12
3585 // CHECK-ERROR-NEXT: ^
3586 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3587 // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12
3588 // CHECK-ERROR-NEXT: ^
3589 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3590 // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12
3591 // CHECK-ERROR-NEXT: ^
3592 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3593 // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12
3594 // CHECK-ERROR-NEXT: ^
3595 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3596 // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12
3597 // CHECK-ERROR-NEXT: ^
3598 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3599 // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12
3600 // CHECK-ERROR-NEXT: ^
3601 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3602 // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12
3603 // CHECK-ERROR-NEXT: ^
3604 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3605 // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12
3606 // CHECK-ERROR-NEXT: ^
3607 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3608 // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12
3609 // CHECK-ERROR-NEXT: ^
3610 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3611 // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12
3612 // CHECK-ERROR-NEXT: ^
3613 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3614 // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12
3615 // CHECK-ERROR-NEXT: ^
3616 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3617 // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12
3618 // CHECK-ERROR-NEXT: ^
3619 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3620 // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12
3621 // CHECK-ERROR-NEXT: ^
3622 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3623 // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12
3624 // CHECK-ERROR-NEXT: ^
3625 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3626 // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12
3627 // CHECK-ERROR-NEXT: ^
3628 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3629 // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12
3630 // CHECK-ERROR-NEXT: ^
3631 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3632 // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12
3633 // CHECK-ERROR-NEXT: ^
3634 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3635 // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12
3636 // CHECK-ERROR-NEXT: ^
3637 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3638 // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12
3639 // CHECK-ERROR-NEXT: ^
3640 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3641 // CHECK-ERROR-NEXT: msr ISR_EL1, x12
3642 // CHECK-ERROR-NEXT: ^
3643 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3644 // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12
3645 // CHECK-ERROR-NEXT: ^
3646 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3647 // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12
3648 // CHECK-ERROR-NEXT: ^
3649 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3650 // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12
3651 // CHECK-ERROR-NEXT: ^
3652 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3653 // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12
3654 // CHECK-ERROR-NEXT: ^
3656 mrs x9, DBGDTRTX_EL0
3659 mrs x9, PMEVCNTR31_EL0
3660 mrs x9, PMEVTYPER31_EL0
3661 // CHECK-ERROR: error: expected readable system register
3662 // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0
3663 // CHECK-ERROR-NEXT: ^
3664 // CHECK-ERROR-NEXT: error: expected readable system register
3665 // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1
3666 // CHECK-ERROR-NEXT: ^
3667 // CHECK-ERROR-NEXT: error: expected readable system register
3668 // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0
3669 // CHECK-ERROR-NEXT: ^
3670 // CHECK-ERROR-NEXT: error: expected readable system register
3671 // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0
3672 // CHECK-ERROR-NEXT: ^
3673 // CHECK-ERROR-NEXT: error: expected readable system register
3674 // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0
3675 // CHECK-ERROR-NEXT: ^
3677 // Now check some invalid generic names
3678 mrs xzr, s2_5_c11_c13_2
3679 mrs x12, s3_8_c11_c13_2
3680 mrs x13, s3_3_c12_c13_2
3681 mrs x19, s3_2_c15_c16_2
3682 mrs x30, s3_2_c15_c1_8
3683 // CHECK-ERROR-NEXT: error: expected readable system register
3684 // CHECK-ERROR-NEXT: mrs xzr, s2_5_c11_c13_2
3685 // CHECK-ERROR-NEXT: ^
3686 // CHECK-ERROR-NEXT: error: expected readable system register
3687 // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2
3688 // CHECK-ERROR-NEXT: ^
3689 // CHECK-ERROR-NEXT: error: expected readable system register
3690 // CHECK-ERROR-NEXT: mrs x13, s3_3_c12_c13_2
3691 // CHECK-ERROR-NEXT: ^
3692 // CHECK-ERROR-NEXT: error: expected readable system register
3693 // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2
3694 // CHECK-ERROR-NEXT: ^
3695 // CHECK-ERROR-NEXT: error: expected readable system register
3696 // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8
3697 // CHECK-ERROR-NEXT: ^
3699 //------------------------------------------------------------------------------
3700 // Test and branch (immediate)
3701 //------------------------------------------------------------------------------
3704 tbz w3, #32, nowhere
3707 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
3708 // CHECK-ERROR-NEXT: tbz w3, #-1, addr
3709 // CHECK-ERROR-NEXT: ^
3710 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3711 // CHECK-ERROR-NEXT: tbz w3, #32, nowhere
3712 // CHECK-ERROR-NEXT: ^
3713 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3714 // CHECK-ERROR-NEXT: tbz x9, #-1, there
3715 // CHECK-ERROR-NEXT: ^
3716 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3717 // CHECK-ERROR-NEXT: tbz x20, #64, dont
3718 // CHECK-ERROR-NEXT: ^
3721 tbnz w3, #32, nowhere
3724 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3725 // CHECK-ERROR-NEXT: tbnz w3, #-1, addr
3726 // CHECK-ERROR-NEXT: ^
3727 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3728 // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere
3729 // CHECK-ERROR-NEXT: ^
3730 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3731 // CHECK-ERROR-NEXT: tbnz x9, #-1, there
3732 // CHECK-ERROR-NEXT: ^
3733 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3734 // CHECK-ERROR-NEXT: tbnz x20, #64, dont
3736 //------------------------------------------------------------------------------
3737 // Unconditional branch (immediate)
3738 //------------------------------------------------------------------------------
3743 // CHECK-ERROR: error: expected label or encodable integer pc offset
3744 // CHECK-ERROR-NEXT: b #134217728
3745 // CHECK-ERROR-NEXT: ^
3746 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3747 // CHECK-ERROR-NEXT: b #-134217732
3748 // CHECK-ERROR-NEXT: ^
3749 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3750 // CHECK-ERROR-NEXT: b #1
3751 // CHECK-ERROR-NEXT: ^
3753 //------------------------------------------------------------------------------
3754 // Unconditional branch (register)
3755 //------------------------------------------------------------------------------
3759 // CHECK-ERROR: error: invalid operand for instruction
3760 // CHECK-ERROR-NEXT: br w2
3761 // CHECK-ERROR-NEXT: ^
3762 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3763 // CHECK-ERROR-NEXT: br sp
3764 // CHECK-ERROR-NEXT: ^
3766 //// These ones shouldn't allow any registers
3769 // CHECK-ERROR: error: invalid operand for instruction
3770 // CHECK-ERROR-NEXT: eret x2
3771 // CHECK-ERROR-NEXT: ^
3772 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3773 // CHECK-ERROR-NEXT: drps x2
3774 // CHECK-ERROR-NEXT: ^