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