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
399 cmn wzr, wzr, asr #32
402 cmn x11, x12, lsr #-1
403 cmn x11, x12, lsr #64
404 cmn x19, xzr, asr #-1
405 cmn xzr, xzr, asr #64
406 // CHECK-ERROR: error: expected integer shift amount
407 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #-1
408 // CHECK-ERROR-NEXT: ^
409 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
410 // CHECK-ERROR-NEXT: cmn w9, w10, lsl #32
411 // CHECK-ERROR-NEXT: ^
412 // CHECK-ERROR-NEXT: error: expected integer shift amount
413 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #-1
414 // CHECK-ERROR-NEXT: ^
415 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
416 // CHECK-ERROR-NEXT: cmn w11, w12, lsr #32
417 // CHECK-ERROR-NEXT: ^
418 // CHECK-ERROR-NEXT: error: expected integer shift amount
419 // CHECK-ERROR-NEXT: cmn w19, wzr, asr #-1
420 // CHECK-ERROR-NEXT: ^
421 // CHECK-ERROR-NEXT: error: too few operands for instruction
422 // CHECK-ERROR-NEXT: cmn wsp, w0
423 // CHECK-ERROR-NEXT: ^
424 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
425 // CHECK-ERROR-NEXT: cmn wzr, wzr, asr #32
426 // CHECK-ERROR-NEXT: ^
427 // CHECK-ERROR-NEXT: error: expected integer shift amount
428 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #-1
429 // CHECK-ERROR-NEXT: ^
430 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
431 // CHECK-ERROR-NEXT: cmn x9, x10, lsl #64
432 // CHECK-ERROR-NEXT: ^
433 // CHECK-ERROR-NEXT: error: expected integer shift amount
434 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #-1
435 // CHECK-ERROR-NEXT: ^
436 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
437 // CHECK-ERROR-NEXT: cmn x11, x12, lsr #64
438 // CHECK-ERROR-NEXT: ^
439 // CHECK-ERROR-NEXT: error: expected integer shift amount
440 // CHECK-ERROR-NEXT: cmn x19, xzr, asr #-1
441 // CHECK-ERROR-NEXT: ^
442 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
443 // CHECK-ERROR-NEXT: cmn xzr, xzr, asr #64
444 // CHECK-ERROR-NEXT: ^
448 cmp w11, w12, lsr #-1
449 cmp w11, w12, lsr #32
450 cmp w19, wzr, asr #-1
451 cmp wzr, wzr, asr #32
454 cmp x11, x12, lsr #-1
455 cmp x11, x12, lsr #64
456 cmp x19, xzr, asr #-1
457 cmp xzr, xzr, asr #64
458 // CHECK-ERROR: error: expected integer shift amount
459 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #-1
460 // CHECK-ERROR-NEXT: ^
461 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
462 // CHECK-ERROR-NEXT: cmp w9, w10, lsl #32
463 // CHECK-ERROR-NEXT: ^
464 // CHECK-ERROR-NEXT: error: expected integer shift amount
465 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #-1
466 // CHECK-ERROR-NEXT: ^
467 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
468 // CHECK-ERROR-NEXT: cmp w11, w12, lsr #32
469 // CHECK-ERROR-NEXT: ^
470 // CHECK-ERROR-NEXT: error: expected integer shift amount
471 // CHECK-ERROR-NEXT: cmp w19, wzr, asr #-1
472 // CHECK-ERROR-NEXT: ^
473 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
474 // CHECK-ERROR-NEXT: cmp wzr, wzr, asr #32
475 // CHECK-ERROR-NEXT: ^
476 // CHECK-ERROR-NEXT: error: expected integer shift amount
477 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #-1
478 // CHECK-ERROR-NEXT: ^
479 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
480 // CHECK-ERROR-NEXT: cmp x9, x10, lsl #64
481 // CHECK-ERROR-NEXT: ^
482 // CHECK-ERROR-NEXT: error: expected integer shift amount
483 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #-1
484 // CHECK-ERROR-NEXT: ^
485 // CHECK-ERROR-NEXT: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
486 // CHECK-ERROR-NEXT: cmp x11, x12, lsr #64
487 // CHECK-ERROR-NEXT: ^
488 // CHECK-ERROR-NEXT: error: expected integer shift amount
489 // CHECK-ERROR-NEXT: cmp x19, xzr, asr #-1
490 // CHECK-ERROR-NEXT: ^
491 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
492 // CHECK-ERROR-NEXT: cmp xzr, xzr, asr #64
493 // CHECK-ERROR-NEXT: ^
497 neg w11, w12, lsr #-1
498 neg w11, w12, lsr #32
499 neg w19, wzr, asr #-1
500 neg wzr, wzr, asr #32
503 neg x11, x12, lsr #-1
504 neg x11, x12, lsr #64
505 neg x19, xzr, asr #-1
506 neg xzr, xzr, asr #64
507 // CHECK-ERROR: error: expected integer shift amount
508 // CHECK-ERROR-NEXT: neg w9, w10, lsl #-1
509 // CHECK-ERROR-NEXT: ^
510 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
511 // CHECK-ERROR-NEXT: neg w9, w10, lsl #32
512 // CHECK-ERROR-NEXT: ^
513 // CHECK-ERROR-NEXT: error: expected integer shift amount
514 // CHECK-ERROR-NEXT: neg w11, w12, lsr #-1
515 // CHECK-ERROR-NEXT: ^
516 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
517 // CHECK-ERROR-NEXT: neg w11, w12, lsr #32
518 // CHECK-ERROR-NEXT: ^
519 // CHECK-ERROR-NEXT: error: expected integer shift amount
520 // CHECK-ERROR-NEXT: neg w19, wzr, asr #-1
521 // CHECK-ERROR-NEXT: ^
522 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
523 // CHECK-ERROR-NEXT: neg wzr, wzr, asr #32
524 // CHECK-ERROR-NEXT: ^
525 // CHECK-ERROR-NEXT: error: expected integer shift amount
526 // CHECK-ERROR-NEXT: neg x9, x10, lsl #-1
527 // CHECK-ERROR-NEXT: ^
528 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
529 // CHECK-ERROR-NEXT: neg x9, x10, lsl #64
530 // CHECK-ERROR-NEXT: ^
531 // CHECK-ERROR-NEXT: error: expected integer shift amount
532 // CHECK-ERROR-NEXT: neg x11, x12, lsr #-1
533 // CHECK-ERROR-NEXT: ^
534 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
535 // CHECK-ERROR-NEXT: neg x11, x12, lsr #64
536 // CHECK-ERROR-NEXT: ^
537 // CHECK-ERROR-NEXT: error: expected integer shift amount
538 // CHECK-ERROR-NEXT: neg x19, xzr, asr #-1
539 // CHECK-ERROR-NEXT: ^
540 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
541 // CHECK-ERROR-NEXT: neg xzr, xzr, asr #64
542 // CHECK-ERROR-NEXT: ^
544 negs w9, w10, lsl #-1
545 negs w9, w10, lsl #32
546 negs w11, w12, lsr #-1
547 negs w11, w12, lsr #32
548 negs w19, wzr, asr #-1
549 negs wzr, wzr, asr #32
550 negs x9, x10, lsl #-1
551 negs x9, x10, lsl #64
552 negs x11, x12, lsr #-1
553 negs x11, x12, lsr #64
554 negs x19, xzr, asr #-1
555 negs xzr, xzr, asr #64
556 // CHECK-ERROR: error: expected integer shift amount
557 // CHECK-ERROR-NEXT: negs w9, w10, lsl #-1
558 // CHECK-ERROR-NEXT: ^
559 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
560 // CHECK-ERROR-NEXT: negs w9, w10, lsl #32
561 // CHECK-ERROR-NEXT: ^
562 // CHECK-ERROR-NEXT: error: expected integer shift amount
563 // CHECK-ERROR-NEXT: negs w11, w12, lsr #-1
564 // CHECK-ERROR-NEXT: ^
565 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
566 // CHECK-ERROR-NEXT: negs w11, w12, lsr #32
567 // CHECK-ERROR-NEXT: ^
568 // CHECK-ERROR-NEXT: error: expected integer shift amount
569 // CHECK-ERROR-NEXT: negs w19, wzr, asr #-1
570 // CHECK-ERROR-NEXT: ^
571 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
572 // CHECK-ERROR-NEXT: negs wzr, wzr, asr #32
573 // CHECK-ERROR-NEXT: ^
574 // CHECK-ERROR-NEXT: error: expected integer shift amount
575 // CHECK-ERROR-NEXT: negs x9, x10, lsl #-1
576 // CHECK-ERROR-NEXT: ^
577 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
578 // CHECK-ERROR-NEXT: negs x9, x10, lsl #64
579 // CHECK-ERROR-NEXT: ^
580 // CHECK-ERROR-NEXT: error: expected integer shift amount
581 // CHECK-ERROR-NEXT: negs x11, x12, lsr #-1
582 // CHECK-ERROR-NEXT: ^
583 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
584 // CHECK-ERROR-NEXT: negs x11, x12, lsr #64
585 // CHECK-ERROR-NEXT: ^
586 // CHECK-ERROR-NEXT: error: expected integer shift amount
587 // CHECK-ERROR-NEXT: negs x19, xzr, asr #-1
588 // CHECK-ERROR-NEXT: ^
589 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
590 // CHECK-ERROR-NEXT: negs xzr, xzr, asr #64
591 // CHECK-ERROR-NEXT: ^
593 //------------------------------------------------------------------------------
594 // Add-subtract (shifted register)
595 //------------------------------------------------------------------------------
600 // CHECK-ERROR: error: invalid operand for instruction
601 // CHECK-ERROR-NEXT: adc wsp, w3, w5
602 // CHECK-ERROR-NEXT: ^
603 // CHECK-ERROR-NEXT: error: invalid operand for instruction
604 // CHECK-ERROR-NEXT: adc w1, wsp, w2
605 // CHECK-ERROR-NEXT: ^
606 // CHECK-ERROR-NEXT: error: invalid operand for instruction
607 // CHECK-ERROR-NEXT: adc w0, w10, wsp
608 // CHECK-ERROR-NEXT: ^
613 // CHECK-ERROR: error: invalid operand for instruction
614 // CHECK-ERROR-NEXT: adc sp, x3, x5
615 // CHECK-ERROR-NEXT: ^
616 // CHECK-ERROR-NEXT: error: invalid operand for instruction
617 // CHECK-ERROR-NEXT: adc x1, sp, x2
618 // CHECK-ERROR-NEXT: ^
619 // CHECK-ERROR-NEXT: error: invalid operand for instruction
620 // CHECK-ERROR-NEXT: adc x0, x10, sp
621 // CHECK-ERROR-NEXT: ^
626 // CHECK-ERROR: error: invalid operand for instruction
627 // CHECK-ERROR-NEXT: adcs wsp, w3, w5
628 // CHECK-ERROR-NEXT: ^
629 // CHECK-ERROR-NEXT: error: invalid operand for instruction
630 // CHECK-ERROR-NEXT: adcs w1, wsp, w2
631 // CHECK-ERROR-NEXT: ^
632 // CHECK-ERROR-NEXT: error: invalid operand for instruction
633 // CHECK-ERROR-NEXT: adcs w0, w10, wsp
634 // CHECK-ERROR-NEXT: ^
639 // CHECK-ERROR: error: invalid operand for instruction
640 // CHECK-ERROR-NEXT: adcs sp, x3, x5
641 // CHECK-ERROR-NEXT: ^
642 // CHECK-ERROR-NEXT: error: invalid operand for instruction
643 // CHECK-ERROR-NEXT: adcs x1, sp, x2
644 // CHECK-ERROR-NEXT: ^
645 // CHECK-ERROR-NEXT: error: invalid operand for instruction
646 // CHECK-ERROR-NEXT: adcs x0, x10, sp
647 // CHECK-ERROR-NEXT: ^
652 // CHECK-ERROR: error: invalid operand for instruction
653 // CHECK-ERROR-NEXT: sbc wsp, w3, w5
654 // CHECK-ERROR-NEXT: ^
655 // CHECK-ERROR-NEXT: error: invalid operand for instruction
656 // CHECK-ERROR-NEXT: sbc w1, wsp, w2
657 // CHECK-ERROR-NEXT: ^
658 // CHECK-ERROR-NEXT: error: invalid operand for instruction
659 // CHECK-ERROR-NEXT: sbc w0, w10, wsp
660 // CHECK-ERROR-NEXT: ^
665 // CHECK-ERROR: error: invalid operand for instruction
666 // CHECK-ERROR-NEXT: sbc sp, x3, x5
667 // CHECK-ERROR-NEXT: ^
668 // CHECK-ERROR-NEXT: error: invalid operand for instruction
669 // CHECK-ERROR-NEXT: sbc x1, sp, x2
670 // CHECK-ERROR-NEXT: ^
671 // CHECK-ERROR-NEXT: error: invalid operand for instruction
672 // CHECK-ERROR-NEXT: sbc x0, x10, sp
673 // CHECK-ERROR-NEXT: ^
678 // CHECK-ERROR: error: invalid operand for instruction
679 // CHECK-ERROR-NEXT: sbcs wsp, w3, w5
680 // CHECK-ERROR-NEXT: ^
681 // CHECK-ERROR-NEXT: error: invalid operand for instruction
682 // CHECK-ERROR-NEXT: sbcs w1, wsp, w2
683 // CHECK-ERROR-NEXT: ^
684 // CHECK-ERROR-NEXT: error: invalid operand for instruction
685 // CHECK-ERROR-NEXT: sbcs w0, w10, wsp
686 // CHECK-ERROR-NEXT: ^
691 // CHECK-ERROR: error: invalid operand for instruction
692 // CHECK-ERROR-NEXT: sbcs sp, x3, x5
693 // CHECK-ERROR-NEXT: ^
694 // CHECK-ERROR-NEXT: error: invalid operand for instruction
695 // CHECK-ERROR-NEXT: sbcs x1, sp, x2
696 // CHECK-ERROR-NEXT: ^
697 // CHECK-ERROR-NEXT: error: invalid operand for instruction
698 // CHECK-ERROR-NEXT: sbcs x0, x10, sp
699 // CHECK-ERROR-NEXT: ^
705 // CHECK-ERROR: error: invalid operand for instruction
706 // CHECK-ERROR-NEXT: ngc wsp, w3
707 // CHECK-ERROR-NEXT: ^
708 // CHECK-ERROR-NEXT: error: invalid operand for instruction
709 // CHECK-ERROR-NEXT: ngc w9, wsp
710 // CHECK-ERROR-NEXT: ^
711 // CHECK-ERROR-NEXT: error: invalid operand for instruction
712 // CHECK-ERROR-NEXT: ngc sp, x9
713 // CHECK-ERROR-NEXT: ^
714 // CHECK-ERROR-NEXT: error: invalid operand for instruction
715 // CHECK-ERROR-NEXT: ngc x2, sp
716 // CHECK-ERROR-NEXT: ^
722 // CHECK-ERROR: error: invalid operand for instruction
723 // CHECK-ERROR-NEXT: ngcs wsp, w3
724 // CHECK-ERROR-NEXT: ^
725 // CHECK-ERROR-NEXT: error: invalid operand for instruction
726 // CHECK-ERROR-NEXT: ngcs w9, wsp
727 // CHECK-ERROR-NEXT: ^
728 // CHECK-ERROR-NEXT: error: invalid operand for instruction
729 // CHECK-ERROR-NEXT: ngcs sp, x9
730 // CHECK-ERROR-NEXT: ^
731 // CHECK-ERROR-NEXT: error: invalid operand for instruction
732 // CHECK-ERROR-NEXT: ngcs x2, sp
733 // CHECK-ERROR-NEXT: ^
735 //------------------------------------------------------------------------------
737 //------------------------------------------------------------------------------
745 // CHECK-ERROR: error: invalid operand for instruction
746 // CHECK-ERROR-NEXT: sbfm x3, w13, #0, #0
747 // CHECK-ERROR-NEXT: ^
748 // CHECK-ERROR-NEXT: error: invalid operand for instruction
749 // CHECK-ERROR-NEXT: sbfm w12, x9, #0, #0
750 // CHECK-ERROR-NEXT: ^
751 // CHECK-ERROR-NEXT: error: invalid operand for instruction
752 // CHECK-ERROR-NEXT: sbfm sp, x3, #3, #5
753 // CHECK-ERROR-NEXT: ^
754 // CHECK-ERROR-NEXT: error: invalid operand for instruction
755 // CHECK-ERROR-NEXT: sbfm w3, wsp, #1, #9
756 // CHECK-ERROR-NEXT: ^
757 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
758 // CHECK-ERROR-NEXT: sbfm x9, x5, #-1, #0
759 // CHECK-ERROR-NEXT: ^
760 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
761 // CHECK-ERROR-NEXT: sbfm x9, x5, #0, #-1
762 // CHECK-ERROR-NEXT: ^
765 sbfm w7, w11, #19, #32
766 sbfm x29, x30, #64, #0
767 sbfm x10, x20, #63, #64
768 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
769 // CHECK-ERROR-NEXT: sbfm w3, w5, #32, #1
770 // CHECK-ERROR-NEXT: ^
771 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
772 // CHECK-ERROR-NEXT: sbfm w7, w11, #19, #32
773 // CHECK-ERROR-NEXT: ^
774 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
775 // CHECK-ERROR-NEXT: sbfm x29, x30, #64, #0
776 // CHECK-ERROR-NEXT: ^
777 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
778 // CHECK-ERROR-NEXT: sbfm x10, x20, #63, #64
779 // CHECK-ERROR-NEXT: ^
782 ubfm w7, w11, #19, #32
783 ubfm x29, x30, #64, #0
784 ubfm x10, x20, #63, #64
785 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
786 // CHECK-ERROR-NEXT: ubfm w3, w5, #32, #1
787 // CHECK-ERROR-NEXT: ^
788 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
789 // CHECK-ERROR-NEXT: ubfm w7, w11, #19, #32
790 // CHECK-ERROR-NEXT: ^
791 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
792 // CHECK-ERROR-NEXT: ubfm x29, x30, #64, #0
793 // CHECK-ERROR-NEXT: ^
794 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
795 // CHECK-ERROR-NEXT: ubfm x10, x20, #63, #64
796 // CHECK-ERROR-NEXT: ^
799 bfm w7, w11, #19, #32
800 bfm x29, x30, #64, #0
801 bfm x10, x20, #63, #64
802 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
803 // CHECK-ERROR-NEXT: bfm w3, w5, #32, #1
804 // CHECK-ERROR-NEXT: ^
805 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
806 // CHECK-ERROR-NEXT: bfm w7, w11, #19, #32
807 // CHECK-ERROR-NEXT: ^
808 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
809 // CHECK-ERROR-NEXT: bfm x29, x30, #64, #0
810 // CHECK-ERROR-NEXT: ^
811 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
812 // CHECK-ERROR-NEXT: bfm x10, x20, #63, #64
813 // CHECK-ERROR-NEXT: ^
818 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
819 // CHECK-ERROR-AARCH64-NEXT: sxtb x3, x2
820 // CHECK-ERROR-AARCH64-NEXT: ^
821 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
822 // CHECK-ERROR-AARCH64-NEXT: sxth xzr, xzr
823 // CHECK-ERROR-AARCH64-NEXT: ^
824 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
825 // CHECK-ERROR-AARCH64-NEXT: sxtw x3, x5
826 // CHECK-ERROR-AARCH64-NEXT: ^
833 // CHECK-ERROR: error: invalid operand for instruction
834 // CHECK-ERROR-NEXT: uxtb x3, x12
835 // CHECK-ERROR-NEXT: ^
836 // CHECK-ERROR-NEXT: error: invalid operand for instruction
837 // CHECK-ERROR-NEXT: uxth x5, x9
838 // CHECK-ERROR-NEXT: ^
839 // CHECK-ERROR-AARCH64-NEXT: error: invalid instruction
840 // CHECK-ERROR-AARCH64-NEXT: uxtw x3, x5
841 // CHECK-ERROR-AARCH64-NEXT: ^
842 // CHECK-ERROR-NEXT: error: invalid operand for instruction
843 // CHECK-ERROR-NEXT: uxtb x2, sp
844 // CHECK-ERROR-NEXT: ^
845 // CHECK-ERROR-NEXT: error: invalid operand for instruction
846 // CHECK-ERROR-NEXT: uxtb sp, xzr
847 // CHECK-ERROR-NEXT: ^
854 // CHECK-ERROR: error: invalid operand for instruction
855 // CHECK-ERROR-NEXT: asr x3, w2, #1
856 // CHECK-ERROR-NEXT: ^
857 // CHECK-ERROR-NEXT: error: invalid operand for instruction
858 // CHECK-ERROR-NEXT: asr sp, x2, #1
859 // CHECK-ERROR-NEXT: ^
860 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
861 // CHECK-ERROR-NEXT: asr x25, x26, #-1
862 // CHECK-ERROR-NEXT: ^
863 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
864 // CHECK-ERROR-NEXT: asr x25, x26, #64
865 // CHECK-ERROR-NEXT: ^
866 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
867 // CHECK-ERROR-NEXT: asr w9, w8, #32
868 // CHECK-ERROR-NEXT: ^
871 sbfiz wsp, w9, #0, #1
872 sbfiz w9, w10, #32, #1
873 sbfiz w11, w12, #32, #0
874 sbfiz w9, w10, #10, #23
875 sbfiz x3, x5, #12, #53
877 sbfiz w3, wsp, #10, #8
878 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
879 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
880 // CHECK-ERROR-NEXT: sbfiz w1, w2, #0, #0
881 // CHECK-ERROR-NEXT: ^
882 // CHECK-ERROR-NEXT: error: invalid operand for instruction
883 // CHECK-ERROR-NEXT: sbfiz wsp, w9, #0, #1
884 // CHECK-ERROR-NEXT: ^
885 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
886 // CHECK-ERROR-NEXT: sbfiz w9, w10, #32, #1
887 // CHECK-ERROR-NEXT: ^
888 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
889 // CHECK-ERROR-NEXT: sbfiz w11, w12, #32, #0
890 // CHECK-ERROR-NEXT: ^
891 // CHECK-ERROR-NEXT: error: requested insert overflows register
892 // CHECK-ERROR-NEXT: sbfiz w9, w10, #10, #23
893 // CHECK-ERROR-NEXT: ^
894 // CHECK-ERROR-NEXT: error: requested insert overflows register
895 // CHECK-ERROR-NEXT: sbfiz x3, x5, #12, #53
896 // CHECK-ERROR-NEXT: ^
897 // CHECK-ERROR-NEXT: error: invalid operand for instruction
898 // CHECK-ERROR-NEXT: sbfiz sp, x3, #7, #6
899 // CHECK-ERROR-NEXT: ^
900 // CHECK-ERROR-NEXT: error: invalid operand for instruction
901 // CHECK-ERROR-NEXT: sbfiz w3, wsp, #10, #8
902 // CHECK-ERROR-NEXT: ^
906 sbfx w9, w10, #32, #1
907 sbfx w11, w12, #32, #0
908 sbfx w9, w10, #10, #23
909 sbfx x3, x5, #12, #53
911 sbfx w3, wsp, #10, #8
912 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
913 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
914 // CHECK-ERROR-NEXT: sbfx w1, w2, #0, #0
915 // CHECK-ERROR-NEXT: ^
916 // CHECK-ERROR-NEXT: error: invalid operand for instruction
917 // CHECK-ERROR-NEXT: sbfx wsp, w9, #0, #1
918 // CHECK-ERROR-NEXT: ^
919 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
920 // CHECK-ERROR-NEXT: sbfx w9, w10, #32, #1
921 // CHECK-ERROR-NEXT: ^
922 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
923 // CHECK-ERROR-NEXT: sbfx w11, w12, #32, #0
924 // CHECK-ERROR-NEXT: ^
925 // CHECK-ERROR-NEXT: error: requested extract overflows register
926 // CHECK-ERROR-NEXT: sbfx w9, w10, #10, #23
927 // CHECK-ERROR-NEXT: ^
928 // CHECK-ERROR-NEXT: error: requested extract overflows register
929 // CHECK-ERROR-NEXT: sbfx x3, x5, #12, #53
930 // CHECK-ERROR-NEXT: ^
931 // CHECK-ERROR-NEXT: error: invalid operand for instruction
932 // CHECK-ERROR-NEXT: sbfx sp, x3, #7, #6
933 // CHECK-ERROR-NEXT: ^
934 // CHECK-ERROR-NEXT: error: invalid operand for instruction
935 // CHECK-ERROR-NEXT: sbfx w3, wsp, #10, #8
936 // CHECK-ERROR-NEXT: ^
941 bfi w11, w12, #32, #0
942 bfi w9, w10, #10, #23
946 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
947 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
948 // CHECK-ERROR-NEXT: bfi w1, w2, #0, #0
949 // CHECK-ERROR-NEXT: ^
950 // CHECK-ERROR-NEXT: error: invalid operand for instruction
951 // CHECK-ERROR-NEXT: bfi wsp, w9, #0, #1
952 // CHECK-ERROR-NEXT: ^
953 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
954 // CHECK-ERROR-NEXT: bfi w9, w10, #32, #1
955 // CHECK-ERROR-NEXT: ^
956 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
957 // CHECK-ERROR-NEXT: bfi w11, w12, #32, #0
958 // CHECK-ERROR-NEXT: ^
959 // CHECK-ERROR-NEXT: error: requested insert overflows register
960 // CHECK-ERROR-NEXT: bfi w9, w10, #10, #23
961 // CHECK-ERROR-NEXT: ^
962 // CHECK-ERROR-NEXT: error: requested insert overflows register
963 // CHECK-ERROR-NEXT: bfi x3, x5, #12, #53
964 // CHECK-ERROR-NEXT: ^
965 // CHECK-ERROR-NEXT: error: invalid operand for instruction
966 // CHECK-ERROR-NEXT: bfi sp, x3, #7, #6
967 // CHECK-ERROR-NEXT: ^
968 // CHECK-ERROR-NEXT: error: invalid operand for instruction
969 // CHECK-ERROR-NEXT: bfi w3, wsp, #10, #8
970 // CHECK-ERROR-NEXT: ^
973 bfxil wsp, w9, #0, #1
974 bfxil w9, w10, #32, #1
975 bfxil w11, w12, #32, #0
976 bfxil w9, w10, #10, #23
977 bfxil x3, x5, #12, #53
979 bfxil w3, wsp, #10, #8
980 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
981 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
982 // CHECK-ERROR-NEXT: bfxil w1, w2, #0, #0
983 // CHECK-ERROR-NEXT: ^
984 // CHECK-ERROR-NEXT: error: invalid operand for instruction
985 // CHECK-ERROR-NEXT: bfxil wsp, w9, #0, #1
986 // CHECK-ERROR-NEXT: ^
987 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
988 // CHECK-ERROR-NEXT: bfxil w9, w10, #32, #1
989 // CHECK-ERROR-NEXT: ^
990 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
991 // CHECK-ERROR-NEXT: bfxil w11, w12, #32, #0
992 // CHECK-ERROR-NEXT: ^
993 // CHECK-ERROR-NEXT: error: requested extract overflows register
994 // CHECK-ERROR-NEXT: bfxil w9, w10, #10, #23
995 // CHECK-ERROR-NEXT: ^
996 // CHECK-ERROR-NEXT: error: requested extract overflows register
997 // CHECK-ERROR-NEXT: bfxil x3, x5, #12, #53
998 // CHECK-ERROR-NEXT: ^
999 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1000 // CHECK-ERROR-NEXT: bfxil sp, x3, #7, #6
1001 // CHECK-ERROR-NEXT: ^
1002 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1003 // CHECK-ERROR-NEXT: bfxil w3, wsp, #10, #8
1004 // CHECK-ERROR-NEXT: ^
1006 ubfiz w1, w2, #0, #0
1007 ubfiz wsp, w9, #0, #1
1008 ubfiz w9, w10, #32, #1
1009 ubfiz w11, w12, #32, #0
1010 ubfiz w9, w10, #10, #23
1011 ubfiz x3, x5, #12, #53
1012 ubfiz sp, x3, #7, #6
1013 ubfiz w3, wsp, #10, #8
1014 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1015 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1016 // CHECK-ERROR-NEXT: ubfiz w1, w2, #0, #0
1017 // CHECK-ERROR-NEXT: ^
1018 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1019 // CHECK-ERROR-NEXT: ubfiz wsp, w9, #0, #1
1020 // CHECK-ERROR-NEXT: ^
1021 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1022 // CHECK-ERROR-NEXT: ubfiz w9, w10, #32, #1
1023 // CHECK-ERROR-NEXT: ^
1024 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1025 // CHECK-ERROR-NEXT: ubfiz w11, w12, #32, #0
1026 // CHECK-ERROR-NEXT: ^
1027 // CHECK-ERROR-NEXT: error: requested insert overflows register
1028 // CHECK-ERROR-NEXT: ubfiz w9, w10, #10, #23
1029 // CHECK-ERROR-NEXT: ^
1030 // CHECK-ERROR-NEXT: error: requested insert overflows register
1031 // CHECK-ERROR-NEXT: ubfiz x3, x5, #12, #53
1032 // CHECK-ERROR-NEXT: ^
1033 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1034 // CHECK-ERROR-NEXT: ubfiz sp, x3, #7, #6
1035 // CHECK-ERROR-NEXT: ^
1036 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1037 // CHECK-ERROR-NEXT: ubfiz w3, wsp, #10, #8
1038 // CHECK-ERROR-NEXT: ^
1041 ubfx wsp, w9, #0, #1
1042 ubfx w9, w10, #32, #1
1043 ubfx w11, w12, #32, #0
1044 ubfx w9, w10, #10, #23
1045 ubfx x3, x5, #12, #53
1047 ubfx w3, wsp, #10, #8
1048 // CHECK-ERROR-AARCH64: error: expected integer in range [<lsb>, 31]
1049 // CHECK-ERROR-ARM64: error: expected integer in range [1, 32]
1050 // CHECK-ERROR-NEXT: ubfx w1, w2, #0, #0
1051 // CHECK-ERROR-NEXT: ^
1052 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1053 // CHECK-ERROR-NEXT: ubfx wsp, w9, #0, #1
1054 // CHECK-ERROR-NEXT: ^
1055 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1056 // CHECK-ERROR-NEXT: ubfx w9, w10, #32, #1
1057 // CHECK-ERROR-NEXT: ^
1058 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1059 // CHECK-ERROR-NEXT: ubfx w11, w12, #32, #0
1060 // CHECK-ERROR-NEXT: ^
1061 // CHECK-ERROR-NEXT: error: requested extract overflows register
1062 // CHECK-ERROR-NEXT: ubfx w9, w10, #10, #23
1063 // CHECK-ERROR-NEXT: ^
1064 // CHECK-ERROR-NEXT: error: requested extract overflows register
1065 // CHECK-ERROR-NEXT: ubfx x3, x5, #12, #53
1066 // CHECK-ERROR-NEXT: ^
1067 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1068 // CHECK-ERROR-NEXT: ubfx sp, x3, #7, #6
1069 // CHECK-ERROR-NEXT: ^
1070 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1071 // CHECK-ERROR-NEXT: ubfx w3, wsp, #10, #8
1072 // CHECK-ERROR-NEXT: ^
1074 //------------------------------------------------------------------------------
1075 // Compare & branch (immediate)
1076 //------------------------------------------------------------------------------
1081 // CHECK-ERROR: error: invalid operand for instruction
1082 // CHECK-ERROR-NEXT: cbnz wsp, lbl
1083 // CHECK-ERROR-NEXT: ^
1084 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1085 // CHECK-ERROR-NEXT: cbz sp, lbl
1086 // CHECK-ERROR-NEXT: ^
1087 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1088 // CHECK-ERROR-NEXT: cbz x3, x5
1089 // CHECK-ERROR-NEXT: ^
1094 // CHECK-ERROR: error: expected label or encodable integer pc offset
1095 // CHECK-ERROR-NEXT: cbz w20, #1048576
1096 // CHECK-ERROR-NEXT: ^
1097 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1098 // CHECK-ERROR-NEXT: cbnz xzr, #-1048580
1099 // CHECK-ERROR-NEXT: ^
1100 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1101 // CHECK-ERROR-NEXT: cbz x29, #1
1102 // CHECK-ERROR-NEXT: ^
1104 //------------------------------------------------------------------------------
1105 // Conditional branch (immediate)
1106 //------------------------------------------------------------------------------
1109 // CHECK-ERROR: error: invalid condition code
1110 // CHECK-ERROR-NEXT: b.zf lbl
1111 // CHECK-ERROR-NEXT: ^
1116 // CHECK-ERROR: error: expected label or encodable integer pc offset
1117 // CHECK-ERROR-NEXT: b.eq #1048576
1118 // CHECK-ERROR-NEXT: ^
1119 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1120 // CHECK-ERROR-NEXT: b.ge #-1048580
1121 // CHECK-ERROR-NEXT: ^
1122 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1123 // CHECK-ERROR-NEXT: b.cc #1
1124 // CHECK-ERROR-NEXT: ^
1126 //------------------------------------------------------------------------------
1127 // Conditional compare (immediate)
1128 //------------------------------------------------------------------------------
1130 ccmp wsp, #4, #2, ne
1131 ccmp w25, #-1, #15, hs
1132 ccmp w3, #32, #0, ge
1133 ccmp w19, #5, #-1, lt
1134 ccmp w20, #7, #16, hs
1135 // CHECK-ERROR: error: invalid operand for instruction
1136 // CHECK-ERROR-NEXT: ccmp wsp, #4, #2, ne
1137 // CHECK-ERROR-NEXT: ^
1138 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1139 // CHECK-ERROR-NEXT: ccmp w25, #-1, #15, hs
1140 // CHECK-ERROR-NEXT: ^
1141 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1142 // CHECK-ERROR-NEXT: ccmp w3, #32, #0, ge
1143 // CHECK-ERROR-NEXT: ^
1144 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1145 // CHECK-ERROR-NEXT: ccmp w19, #5, #-1, lt
1146 // CHECK-ERROR-NEXT: ^
1147 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1148 // CHECK-ERROR-NEXT: ccmp w20, #7, #16, hs
1149 // CHECK-ERROR-NEXT: ^
1152 ccmp x25, #-1, #15, hs
1153 ccmp x3, #32, #0, ge
1154 ccmp x19, #5, #-1, lt
1155 ccmp x20, #7, #16, hs
1156 // CHECK-ERROR: error: invalid operand for instruction
1157 // CHECK-ERROR-NEXT: ccmp sp, #4, #2, ne
1158 // CHECK-ERROR-NEXT: ^
1159 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1160 // CHECK-ERROR-NEXT: ccmp x25, #-1, #15, hs
1161 // CHECK-ERROR-NEXT: ^
1162 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1163 // CHECK-ERROR-NEXT: ccmp x3, #32, #0, ge
1164 // CHECK-ERROR-NEXT: ^
1165 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1166 // CHECK-ERROR-NEXT: ccmp x19, #5, #-1, lt
1167 // CHECK-ERROR-NEXT: ^
1168 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1169 // CHECK-ERROR-NEXT: ccmp x20, #7, #16, hs
1170 // CHECK-ERROR-NEXT: ^
1172 ccmn wsp, #4, #2, ne
1173 ccmn w25, #-1, #15, hs
1174 ccmn w3, #32, #0, ge
1175 ccmn w19, #5, #-1, lt
1176 ccmn w20, #7, #16, hs
1177 // CHECK-ERROR: error: invalid operand for instruction
1178 // CHECK-ERROR-NEXT: ccmn wsp, #4, #2, ne
1179 // CHECK-ERROR-NEXT: ^
1180 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1181 // CHECK-ERROR-NEXT: ccmn w25, #-1, #15, hs
1182 // CHECK-ERROR-NEXT: ^
1183 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1184 // CHECK-ERROR-NEXT: ccmn w3, #32, #0, ge
1185 // CHECK-ERROR-NEXT: ^
1186 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1187 // CHECK-ERROR-NEXT: ccmn w19, #5, #-1, lt
1188 // CHECK-ERROR-NEXT: ^
1189 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1190 // CHECK-ERROR-NEXT: ccmn w20, #7, #16, hs
1191 // CHECK-ERROR-NEXT: ^
1194 ccmn x25, #-1, #15, hs
1195 ccmn x3, #32, #0, ge
1196 ccmn x19, #5, #-1, lt
1197 ccmn x20, #7, #16, hs
1198 // CHECK-ERROR: error: invalid operand for instruction
1199 // CHECK-ERROR-NEXT: ccmn sp, #4, #2, ne
1200 // CHECK-ERROR-NEXT: ^
1201 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1202 // CHECK-ERROR-NEXT: ccmn x25, #-1, #15, hs
1203 // CHECK-ERROR-NEXT: ^
1204 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1205 // CHECK-ERROR-NEXT: ccmn x3, #32, #0, ge
1206 // CHECK-ERROR-NEXT: ^
1207 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1208 // CHECK-ERROR-NEXT: ccmn x19, #5, #-1, lt
1209 // CHECK-ERROR-NEXT: ^
1210 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1211 // CHECK-ERROR-NEXT: ccmn x20, #7, #16, hs
1212 // CHECK-ERROR-NEXT: ^
1214 //------------------------------------------------------------------------------
1215 // Conditional compare (register)
1216 //------------------------------------------------------------------------------
1218 ccmp wsp, w4, #2, ne
1219 ccmp w3, wsp, #0, ge
1220 ccmp w19, w5, #-1, lt
1221 ccmp w20, w7, #16, hs
1222 // CHECK-ERROR: error: invalid operand for instruction
1223 // CHECK-ERROR-NEXT: ccmp wsp, w4, #2, ne
1224 // CHECK-ERROR-NEXT: ^
1225 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1226 // CHECK-ERROR-NEXT: ccmp w3, wsp, #0, ge
1227 // CHECK-ERROR-NEXT: ^
1228 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1229 // CHECK-ERROR-NEXT: ccmp w19, w5, #-1, lt
1230 // CHECK-ERROR-NEXT: ^
1231 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1232 // CHECK-ERROR-NEXT: ccmp w20, w7, #16, hs
1233 // CHECK-ERROR-NEXT: ^
1236 ccmp x25, sp, #15, hs
1237 ccmp x19, x5, #-1, lt
1238 ccmp x20, x7, #16, hs
1239 // CHECK-ERROR: error: invalid operand for instruction
1240 // CHECK-ERROR-NEXT: ccmp sp, x4, #2, ne
1241 // CHECK-ERROR-NEXT: ^
1242 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1243 // CHECK-ERROR-NEXT: ccmp x25, sp, #15, hs
1244 // CHECK-ERROR-NEXT: ^
1245 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1246 // CHECK-ERROR-NEXT: ccmp x19, x5, #-1, lt
1247 // CHECK-ERROR-NEXT: ^
1248 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1249 // CHECK-ERROR-NEXT: ccmp x20, x7, #16, hs
1250 // CHECK-ERROR-NEXT: ^
1252 ccmn wsp, w4, #2, ne
1253 ccmn w25, wsp, #15, hs
1254 ccmn w19, w5, #-1, lt
1255 ccmn w20, w7, #16, hs
1256 // CHECK-ERROR: error: invalid operand for instruction
1257 // CHECK-ERROR-NEXT: ccmn wsp, w4, #2, ne
1258 // CHECK-ERROR-NEXT: ^
1259 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1260 // CHECK-ERROR-NEXT: ccmn w25, wsp, #15, hs
1261 // CHECK-ERROR-NEXT: ^
1262 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1263 // CHECK-ERROR-NEXT: ccmn w19, w5, #-1, lt
1264 // CHECK-ERROR-NEXT: ^
1265 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1266 // CHECK-ERROR-NEXT: ccmn w20, w7, #16, hs
1267 // CHECK-ERROR-NEXT: ^
1270 ccmn x25, sp, #15, hs
1271 ccmn x19, x5, #-1, lt
1272 ccmn x20, x7, #16, hs
1273 // CHECK-ERROR: error: invalid operand for instruction
1274 // CHECK-ERROR-NEXT: ccmn sp, x4, #2, ne
1275 // CHECK-ERROR-NEXT: ^
1276 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1277 // CHECK-ERROR-NEXT: ccmn x25, sp, #15, hs
1278 // CHECK-ERROR-NEXT: ^
1279 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1280 // CHECK-ERROR-NEXT: ccmn x19, x5, #-1, lt
1281 // CHECK-ERROR-NEXT: ^
1282 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1283 // CHECK-ERROR-NEXT: ccmn x20, x7, #16, hs
1284 // CHECK-ERROR-NEXT: ^
1286 //------------------------------------------------------------------------------
1287 // Conditional select
1288 //------------------------------------------------------------------------------
1290 csel w4, wsp, w9, eq
1291 csel wsp, w2, w3, ne
1292 csel w10, w11, wsp, ge
1296 csel x10, x11, sp, ge
1298 // CHECK-ERROR: error: invalid operand for instruction
1299 // CHECK-ERROR-NEXT: csel w4, wsp, w9, eq
1300 // CHECK-ERROR-NEXT: ^
1301 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1302 // CHECK-ERROR-NEXT: csel wsp, w2, w3, ne
1303 // CHECK-ERROR-NEXT: ^
1304 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1305 // CHECK-ERROR-NEXT: csel w10, w11, wsp, ge
1306 // CHECK-ERROR-NEXT: ^
1307 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1308 // CHECK-ERROR-NEXT: csel w1, w2, w3, #3
1309 // CHECK-ERROR-NEXT: ^
1310 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1311 // CHECK-ERROR-NEXT: csel x4, sp, x9, eq
1312 // CHECK-ERROR-NEXT: ^
1313 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1314 // CHECK-ERROR-NEXT: csel sp, x2, x3, ne
1315 // CHECK-ERROR-NEXT: ^
1316 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1317 // CHECK-ERROR-NEXT: csel x10, x11, sp, ge
1318 // CHECK-ERROR-NEXT: ^
1319 // CHECK-ERROR-NEXT: error: expected AArch64 condition code
1320 // CHECK-ERROR-NEXT: csel x1, x2, x3, #3
1321 // CHECK-ERROR-NEXT: ^
1323 csinc w20, w21, wsp, mi
1324 csinc sp, x30, x29, eq
1325 // CHECK-ERROR: error: invalid operand for instruction
1326 // CHECK-ERROR-NEXT: csinc w20, w21, wsp, mi
1327 // CHECK-ERROR-NEXT: ^
1328 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1329 // CHECK-ERROR-NEXT: csinc sp, x30, x29, eq
1330 // CHECK-ERROR-NEXT: ^
1332 csinv w20, wsp, wsp, mi
1333 csinv sp, x30, x29, le
1334 // CHECK-ERROR: error: invalid operand for instruction
1335 // CHECK-ERROR-NEXT: csinv w20, wsp, wsp, mi
1336 // CHECK-ERROR-NEXT: ^
1337 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1338 // CHECK-ERROR-NEXT: csinv sp, x30, x29, le
1339 // CHECK-ERROR-NEXT: ^
1341 csneg w20, w21, wsp, mi
1342 csneg x0, sp, x29, le
1343 // CHECK-ERROR: error: invalid operand for instruction
1344 // CHECK-ERROR-NEXT: csneg w20, w21, wsp, mi
1345 // CHECK-ERROR-NEXT: ^
1346 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1347 // CHECK-ERROR-NEXT: csneg x0, sp, x29, le
1348 // CHECK-ERROR-NEXT: ^
1352 // CHECK-ERROR: error: invalid operand for instruction
1353 // CHECK-ERROR-NEXT: cset wsp, lt
1354 // CHECK-ERROR-NEXT: ^
1355 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1356 // CHECK-ERROR-NEXT: csetm sp, ge
1357 // CHECK-ERROR-NEXT: ^
1361 // CHECK-ERROR: error: invalid operand for instruction
1362 // CHECK-ERROR-NEXT: cinc w3, wsp, ne
1363 // CHECK-ERROR-NEXT: ^
1364 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1365 // CHECK-ERROR-NEXT: cinc sp, x9, eq
1366 // CHECK-ERROR-NEXT: ^
1370 // CHECK-ERROR: error: invalid operand for instruction
1371 // CHECK-ERROR-NEXT: cinv w3, wsp, ne
1372 // CHECK-ERROR-NEXT: ^
1373 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1374 // CHECK-ERROR-NEXT: cinv sp, x9, eq
1375 // CHECK-ERROR-NEXT: ^
1379 // CHECK-ERROR: error: invalid operand for instruction
1380 // CHECK-ERROR-NEXT: cneg w3, wsp, ne
1381 // CHECK-ERROR-NEXT: ^
1382 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1383 // CHECK-ERROR-NEXT: cneg sp, x9, eq
1384 // CHECK-ERROR-NEXT: ^
1386 //------------------------------------------------------------------------------
1387 // Data Processing (1 source)
1388 //------------------------------------------------------------------------------
1390 //CHECK-ERROR: error: invalid operand for instruction
1391 //CHECK-ERROR-NEXT: rbit x23, w2
1394 //CHECK-ERROR: error: invalid operand for instruction
1395 //CHECK-ERROR-NEXT: cls sp, x2
1398 //CHECK-ERROR: error: invalid operand for instruction
1399 //CHECK-ERROR-NEXT: clz wsp, w3
1401 //------------------------------------------------------------------------------
1402 // Data Processing (2 sources)
1403 //------------------------------------------------------------------------------
1405 //CHECK-ERROR: error: invalid operand for instruction
1406 //CHECK-ERROR-NEXT: udiv x23, w2, x18
1409 //CHECK-ERROR: error: invalid operand for instruction
1410 //CHECK-ERROR-NEXT: lsl sp, x2, x4
1413 //CHECK-ERROR: error: invalid operand for instruction
1414 //CHECK-ERROR-NEXT: asr wsp, w3, w9
1416 //------------------------------------------------------------------------------
1417 // Data Processing (3 sources)
1418 //------------------------------------------------------------------------------
1420 madd sp, x3, x9, x10
1421 //CHECK-ERROR: error: invalid operand for instruction
1422 //CHECK-ERROR-NEXT: madd sp, x3, x9, x10
1424 //------------------------------------------------------------------------------
1425 // Exception generation
1426 //------------------------------------------------------------------------------
1431 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 65535]
1432 // CHECK-ERROR-NEXT: svc #-1
1433 // CHECK-ERROR-NEXT: ^
1434 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 65535]
1435 // CHECK-ERROR-NEXT: hlt #65536
1436 // CHECK-ERROR-NEXT: ^
1437 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1438 // CHECK-ERROR-NEXT: dcps4 #43
1439 // CHECK-ERROR-NEXT: ^
1440 // CHECK-ERROR-NEXT: error: {{invalid instruction|unrecognized instruction mnemonic}}
1441 // CHECK-ERROR-NEXT: dcps4
1442 // CHECK-ERROR-NEXT: ^
1444 //------------------------------------------------------------------------------
1445 // Extract (immediate)
1446 //------------------------------------------------------------------------------
1448 extr w2, w20, w30, #-1
1449 extr w9, w19, w20, #32
1450 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1451 // CHECK-ERROR-NEXT: extr w2, w20, w30, #-1
1452 // CHECK-ERROR-NEXT: ^
1453 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1454 // CHECK-ERROR-NEXT: extr w9, w19, w20, #32
1455 // CHECK-ERROR-NEXT: ^
1457 extr x10, x15, x20, #-1
1458 extr x20, x25, x30, #64
1459 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1460 // CHECK-ERROR-NEXT: extr x10, x15, x20, #-1
1461 // CHECK-ERROR-NEXT: ^
1462 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1463 // CHECK-ERROR-NEXT: extr x20, x25, x30, #64
1464 // CHECK-ERROR-NEXT: ^
1468 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
1469 // CHECK-ERROR-NEXT: ror w9, w10, #32
1470 // CHECK-ERROR-NEXT: ^
1471 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
1472 // CHECK-ERROR-NEXT: ror x10, x11, #64
1473 // CHECK-ERROR-NEXT: ^
1475 //------------------------------------------------------------------------------
1476 // Floating-point compare
1477 //------------------------------------------------------------------------------
1480 // CHECK-ERROR-AARCH64: error: expected floating-point constant #0.0
1481 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1482 // CHECK-ERROR-NEXT: fcmp s3, d2
1483 // CHECK-ERROR-NEXT: ^
1489 // CHECK-ERROR: error: expected floating-point constant #0.0
1490 // CHECK-ERROR-NEXT: fcmp s9, #-0.0
1491 // CHECK-ERROR-NEXT: ^
1492 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1493 // CHECK-ERROR-NEXT: fcmp d3, #-0.0
1494 // CHECK-ERROR-NEXT: ^
1495 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1496 // CHECK-ERROR-NEXT: fcmp s1, #1.0
1497 // CHECK-ERROR-NEXT: ^
1498 // CHECK-ERROR-NEXT: error: expected floating-point constant #0.0
1499 // CHECK-ERROR-NEXT: fcmpe s30, #-0.0
1500 // CHECK-ERROR-NEXT: ^
1502 //------------------------------------------------------------------------------
1503 // Floating-point conditional compare
1504 //------------------------------------------------------------------------------
1506 fccmp s19, s5, #-1, lt
1507 fccmp s20, s7, #16, hs
1508 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1509 // CHECK-ERROR-NEXT: fccmp s19, s5, #-1, lt
1510 // CHECK-ERROR-NEXT: ^
1511 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1512 // CHECK-ERROR-NEXT: fccmp s20, s7, #16, hs
1513 // CHECK-ERROR-NEXT: ^
1515 fccmp d19, d5, #-1, lt
1516 fccmp d20, d7, #16, hs
1517 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1518 // CHECK-ERROR-NEXT: fccmp d19, d5, #-1, lt
1519 // CHECK-ERROR-NEXT: ^
1520 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1521 // CHECK-ERROR-NEXT: fccmp d20, d7, #16, hs
1522 // CHECK-ERROR-NEXT: ^
1524 fccmpe s19, s5, #-1, lt
1525 fccmpe s20, s7, #16, hs
1526 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1527 // CHECK-ERROR-NEXT: fccmpe s19, s5, #-1, lt
1528 // CHECK-ERROR-NEXT: ^
1529 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1530 // CHECK-ERROR-NEXT: fccmpe s20, s7, #16, hs
1531 // CHECK-ERROR-NEXT: ^
1533 fccmpe d19, d5, #-1, lt
1534 fccmpe d20, d7, #16, hs
1535 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1536 // CHECK-ERROR-NEXT: fccmpe d19, d5, #-1, lt
1537 // CHECK-ERROR-NEXT: ^
1538 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
1539 // CHECK-ERROR-NEXT: fccmpe d20, d7, #16, hs
1540 // CHECK-ERROR-NEXT: ^
1542 //------------------------------------------------------------------------------
1543 // Floating-point conditional compare
1544 //------------------------------------------------------------------------------
1546 fcsel q3, q20, q9, pl
1547 fcsel h9, h10, h11, mi
1548 fcsel b9, b10, b11, mi
1549 // CHECK-ERROR: error: invalid operand for instruction
1550 // CHECK-ERROR-NEXT: fcsel q3, q20, q9, pl
1551 // CHECK-ERROR-NEXT: ^
1552 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1553 // CHECK-ERROR-NEXT: fcsel h9, h10, h11, mi
1554 // CHECK-ERROR-NEXT: ^
1555 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1556 // CHECK-ERROR-NEXT: fcsel b9, b10, b11, mi
1557 // CHECK-ERROR-NEXT: ^
1559 //------------------------------------------------------------------------------
1560 // Floating-point data-processing (1 source)
1561 //------------------------------------------------------------------------------
1565 // CHECK-ERROR: error: expected compatible register or floating-point constant
1566 // CHECK-ERROR-NEXT: fmov d0, s3
1567 // CHECK-ERROR-NEXT: ^
1568 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1569 // CHECK-ERROR-NEXT: fcvt d0, d1
1570 // CHECK-ERROR-NEXT: ^
1573 //------------------------------------------------------------------------------
1574 // Floating-point data-processing (2 sources)
1575 //------------------------------------------------------------------------------
1580 // CHECK-ERROR: error: invalid operand for instruction
1581 // CHECK-ERROR-NEXT: fadd s0, d3, d7
1582 // CHECK-ERROR-NEXT: ^
1583 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1584 // CHECK-ERROR-NEXT: fmaxnm d3, s19, d12
1585 // CHECK-ERROR-NEXT: ^
1586 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1587 // CHECK-ERROR-NEXT: fnmul d1, d9, s18
1588 // CHECK-ERROR-NEXT: ^
1590 //------------------------------------------------------------------------------
1591 // Floating-point data-processing (3 sources)
1592 //------------------------------------------------------------------------------
1594 fmadd b3, b4, b5, b6
1595 fmsub h1, h2, h3, h4
1596 fnmadd q3, q5, q6, q7
1597 fnmsub s2, s4, d5, h9
1598 // CHECK-ERROR: error: invalid operand for instruction
1599 // CHECK-ERROR-NEXT: fmadd b3, b4, b5, b6
1600 // CHECK-ERROR-NEXT: ^
1601 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1602 // CHECK-ERROR-NEXT: fmsub h1, h2, h3, h4
1603 // CHECK-ERROR-NEXT: ^
1604 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1605 // CHECK-ERROR-NEXT: fnmadd q3, q5, q6, q7
1606 // CHECK-ERROR-NEXT: ^
1607 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1608 // CHECK-ERROR-NEXT: fnmsub s2, s4, d5, h9
1609 // CHECK-ERROR-NEXT: ^
1611 //------------------------------------------------------------------------------
1612 // Floating-point conditional compare
1613 //------------------------------------------------------------------------------
1616 fcvtzs w19, s20, #33
1617 fcvtzs wsp, s19, #14
1618 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1619 // CHECK-ERROR-NEXT: fcvtzs w13, s31, #0
1620 // CHECK-ERROR-NEXT: ^
1621 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1622 // CHECK-ERROR-NEXT: fcvtzs w19, s20, #33
1623 // CHECK-ERROR-NEXT: ^
1624 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1625 // CHECK-ERROR-NEXT: fcvtzs wsp, s19, #14
1626 // CHECK-ERROR-NEXT: ^
1629 fcvtzs x19, s20, #65
1631 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1632 // CHECK-ERROR-NEXT: fcvtzs x13, s31, #0
1633 // CHECK-ERROR-NEXT: ^
1634 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1635 // CHECK-ERROR-NEXT: fcvtzs x19, s20, #65
1636 // CHECK-ERROR-NEXT: ^
1637 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1638 // CHECK-ERROR-NEXT: fcvtzs sp, s19, #14
1639 // CHECK-ERROR-NEXT: ^
1642 fcvtzu w19, s20, #33
1643 fcvtzu wsp, s19, #14
1644 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1645 // CHECK-ERROR-NEXT: fcvtzu w13, s31, #0
1646 // CHECK-ERROR-NEXT: ^
1647 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 32]
1648 // CHECK-ERROR-NEXT: fcvtzu w19, s20, #33
1649 // CHECK-ERROR-NEXT: ^
1650 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1651 // CHECK-ERROR-NEXT: fcvtzu wsp, s19, #14
1652 // CHECK-ERROR-NEXT: ^
1655 fcvtzu x19, s20, #65
1657 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1658 // CHECK-ERROR-NEXT: fcvtzu x13, s31, #0
1659 // CHECK-ERROR-NEXT: ^
1660 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [1, 64]
1661 // CHECK-ERROR-NEXT: fcvtzu x19, s20, #65
1662 // CHECK-ERROR-NEXT: ^
1663 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1664 // CHECK-ERROR-NEXT: fcvtzu sp, s19, #14
1665 // CHECK-ERROR-NEXT: ^
1670 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1671 // CHECK-ERROR-NEXT: scvtf w13, s31, #0
1672 // CHECK-ERROR-NEXT: ^
1673 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1674 // CHECK-ERROR-NEXT: scvtf w19, s20, #33
1675 // CHECK-ERROR-NEXT: ^
1676 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1677 // CHECK-ERROR-NEXT: scvtf wsp, s19, #14
1678 // CHECK-ERROR-NEXT: ^
1683 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1684 // CHECK-ERROR-NEXT: scvtf x13, s31, #0
1685 // CHECK-ERROR-NEXT: ^
1686 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1687 // CHECK-ERROR-NEXT: scvtf x19, s20, #65
1688 // CHECK-ERROR-NEXT: ^
1689 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1690 // CHECK-ERROR-NEXT: scvtf sp, s19, #14
1691 // CHECK-ERROR-NEXT: ^
1696 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1697 // CHECK-ERROR-NEXT: ucvtf w13, s31, #0
1698 // CHECK-ERROR-NEXT: ^
1699 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1700 // CHECK-ERROR-NEXT: ucvtf w19, s20, #33
1701 // CHECK-ERROR-NEXT: ^
1702 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1703 // CHECK-ERROR-NEXT: ucvtf wsp, s19, #14
1704 // CHECK-ERROR-NEXT: ^
1709 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1710 // CHECK-ERROR-NEXT: ucvtf x13, s31, #0
1711 // CHECK-ERROR-NEXT: ^
1712 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1713 // CHECK-ERROR-NEXT: ucvtf x19, s20, #65
1714 // CHECK-ERROR-NEXT: ^
1715 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1716 // CHECK-ERROR-NEXT: ucvtf sp, s19, #14
1717 // CHECK-ERROR-NEXT: ^
1719 //------------------------------------------------------------------------------
1720 // Floating-point immediate
1721 //------------------------------------------------------------------------------
1722 ;; Exponent too large
1725 // CHECK-ERROR: error: expected compatible register or floating-point constant
1726 // CHECK-ERROR-NEXT: fmov d3, #0.0625
1727 // CHECK-ERROR-NEXT: ^
1728 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1729 // CHECK-ERROR-NEXT: fmov s2, #32.0
1730 // CHECK-ERROR-NEXT: ^
1732 ;; Fraction too precise
1735 // CHECK-ERROR: error: expected compatible register or floating-point constant
1736 // CHECK-ERROR-NEXT: fmov s9, #1.03125
1737 // CHECK-ERROR-NEXT: ^
1738 // CHECK-ERROR-NEXT: error: expected compatible register or floating-point constant
1739 // CHECK-ERROR-NEXT: fmov s28, #1.96875
1740 // CHECK-ERROR-NEXT: ^
1742 ;; No particular reason, but a striking omission
1744 // CHECK-ERROR-AARCH64: error: expected compatible register or floating-point constant
1745 // CHECK-ERROR-AARCH64-NEXT: fmov d0, #0.0
1746 // CHECK-ERROR-AARCH64-NEXT: ^
1748 //------------------------------------------------------------------------------
1749 // Floating-point <-> integer conversion
1750 //------------------------------------------------------------------------------
1757 // CHECK-ERROR: error: expected lane specifier '[1]'
1758 // CHECK-ERROR-NEXT: fmov x3, v0.d[0]
1759 // CHECK-ERROR-NEXT: ^
1760 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1761 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for instruction
1762 // CHECK-ERROR-NEXT: fmov v29.1d[1], x2
1763 // CHECK-ERROR-NEXT: ^
1764 // CHECK-ERROR-AARCH64-NEXT: error: lane number incompatible with layout
1765 // CHECK-ERROR-ARM64-NEXT: error: expected lane specifier '[1]'
1766 // CHECK-ERROR-NEXT: fmov x7, v0.d[2]
1767 // CHECK-ERROR-NEXT: ^
1768 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1769 // CHECK-ERROR-NEXT: fcvtns sp, s5
1770 // CHECK-ERROR-NEXT: ^
1771 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1772 // CHECK-ERROR-NEXT: scvtf s6, wsp
1773 // CHECK-ERROR-NEXT: ^
1775 //------------------------------------------------------------------------------
1776 // Load-register (literal)
1777 //------------------------------------------------------------------------------
1781 // CHECK-ERROR: error: invalid operand for instruction
1782 // CHECK-ERROR-NEXT: ldr sp, some_label
1783 // CHECK-ERROR-NEXT: ^
1784 // CHECK-ERROR-NEXT: error: invalid operand for instruction
1785 // CHECK-ERROR-NEXT: ldrsw w3, somewhere
1786 // CHECK-ERROR-NEXT: ^
1791 // CHECK-ERROR: error: expected label or encodable integer pc offset
1792 // CHECK-ERROR-NEXT: ldrsw x2, #1048576
1793 // CHECK-ERROR-NEXT: ^
1794 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1795 // CHECK-ERROR-NEXT: ldr q0, #-1048580
1796 // CHECK-ERROR-NEXT: ^
1797 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
1798 // CHECK-ERROR-NEXT: ldr x0, #2
1799 // CHECK-ERROR-NEXT: ^
1801 //------------------------------------------------------------------------------
1802 // Load/store exclusive
1803 //------------------------------------------------------------------------------
1805 stxrb w2, w3, [x4, #20]
1806 stlxrh w10, w11, [w2]
1807 // CHECK-ERROR-AARCH64: error: expected '#0'
1808 // CHECK-ERROR-ARM64: error: index must be absent or #0
1809 // CHECK-ERROR-NEXT: stxrb w2, w3, [x4, #20]
1810 // CHECK-ERROR-NEXT: ^
1811 // CHECK-ERROR: error: invalid operand for instruction
1812 // CHECK-ERROR-NEXT: stlxrh w10, w11, [w2]
1813 // CHECK-ERROR-NEXT: ^
1815 stlxr x20, w21, [sp]
1816 // CHECK-ERROR: error: invalid operand for instruction
1817 // CHECK-ERROR-NEXT: stlxr x20, w21, [sp]
1818 // CHECK-ERROR-NEXT: ^
1821 // CHECK-ERROR: error: invalid operand for instruction
1822 // CHECK-ERROR-NEXT: ldxr sp, [sp]
1823 // CHECK-ERROR-NEXT: ^
1825 stxp x1, x2, x3, [x4]
1826 // CHECK-ERROR: error: invalid operand for instruction
1827 // CHECK-ERROR-NEXT: stxp x1, x2, x3, [x4]
1828 // CHECK-ERROR-NEXT: ^
1830 stlxp w5, x1, w4, [x5]
1831 // CHECK-ERROR: error: invalid operand for instruction
1832 // CHECK-ERROR-NEXT: stlxp w5, x1, w4, [x5]
1833 // CHECK-ERROR-NEXT: ^
1835 stlxp w17, w6, x7, [x22]
1836 // CHECK-ERROR: error: invalid operand for instruction
1837 // CHECK-ERROR-NEXT: stlxp w17, w6, x7, [x22]
1838 // CHECK-ERROR-NEXT: ^
1840 //------------------------------------------------------------------------------
1841 // Load/store (unscaled immediate)
1842 //------------------------------------------------------------------------------
1844 ldurb w2, [sp, #256]
1845 sturh w17, [x1, #256]
1846 ldursw x20, [x1, #256]
1847 ldur x12, [sp, #256]
1848 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1849 // CHECK-ERROR-NEXT: ldurb w2, [sp, #256]
1850 // CHECK-ERROR-NEXT: ^
1851 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1852 // CHECK-ERROR-NEXT: sturh w17, [x1, #256]
1853 // CHECK-ERROR-NEXT: ^
1854 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1855 // CHECK-ERROR-NEXT: ldursw x20, [x1, #256]
1856 // CHECK-ERROR-NEXT: ^
1857 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1858 // CHECK-ERROR-NEXT: ldur x12, [sp, #256]
1859 // CHECK-ERROR-NEXT: ^
1861 stur h2, [x2, #-257]
1862 stur b2, [x2, #-257]
1863 ldursb x9, [sp, #-257]
1864 ldur w2, [x30, #-257]
1865 stur q9, [x20, #-257]
1866 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1867 // CHECK-ERROR-NEXT: stur h2, [x2, #-257]
1868 // CHECK-ERROR-NEXT: ^
1869 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1870 // CHECK-ERROR-NEXT: stur b2, [x2, #-257]
1871 // CHECK-ERROR-NEXT: ^
1872 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1873 // CHECK-ERROR-NEXT: ldursb x9, [sp, #-257]
1874 // CHECK-ERROR-NEXT: ^
1875 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1876 // CHECK-ERROR-NEXT: ldur w2, [x30, #-257]
1877 // CHECK-ERROR-NEXT: ^
1878 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1879 // CHECK-ERROR-NEXT: stur q9, [x20, #-257]
1880 // CHECK-ERROR-NEXT: ^
1882 prfum pstl3strm, [xzr]
1883 // CHECK-ERROR: error: invalid operand for instruction
1884 // CHECK-ERROR-NEXT: prfum pstl3strm, [xzr]
1885 // CHECK-ERROR-NEXT: ^
1887 //------------------------------------------------------------------------------
1888 // Load-store register (immediate post-indexed)
1889 //------------------------------------------------------------------------------
1890 ldr x3, [x4, #25], #0
1891 ldr x4, [x9, #0], #4
1892 // CHECK-ERROR-AARCH64: error: {{expected symbolic reference or integer|index must be a multiple of 8}} in range [0, 32760]
1893 // CHECK-ERROR-ARM64: error: invalid operand for instruction
1894 // CHECK-ERROR-NEXT: ldr x3, [x4, #25], #0
1895 // CHECK-ERROR-NEXT: ^
1896 // CHECK-ERROR-AARCH64-NEXT: error: invalid operand for instruction
1897 // CHECK-ERROR-AARCH64-NEXT: ldr x4, [x9, #0], #4
1898 // CHECK-ERROR-AARCH64-NEXT: ^
1900 strb w1, [x19], #256
1901 strb w9, [sp], #-257
1902 strh w1, [x19], #256
1903 strh w9, [sp], #-257
1906 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1907 // CHECK-ERROR-NEXT: strb w1, [x19], #256
1908 // CHECK-ERROR-NEXT: ^
1909 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1910 // CHECK-ERROR-NEXT: strb w9, [sp], #-257
1911 // CHECK-ERROR-NEXT: ^
1912 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1913 // CHECK-ERROR-NEXT: strh w1, [x19], #256
1914 // CHECK-ERROR-NEXT: ^
1915 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1916 // CHECK-ERROR-NEXT: strh w9, [sp], #-257
1917 // CHECK-ERROR-NEXT: ^
1918 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1919 // CHECK-ERROR-NEXT: str w1, [x19], #256
1920 // CHECK-ERROR-NEXT: ^
1921 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1922 // CHECK-ERROR-NEXT: str w9, [sp], #-257
1923 // CHECK-ERROR-NEXT: ^
1925 ldrb w1, [x19], #256
1926 ldrb w9, [sp], #-257
1927 ldrh w1, [x19], #256
1928 ldrh w9, [sp], #-257
1931 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1932 // CHECK-ERROR-NEXT: ldrb w1, [x19], #256
1933 // CHECK-ERROR-NEXT: ^
1934 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1935 // CHECK-ERROR-NEXT: ldrb w9, [sp], #-257
1936 // CHECK-ERROR-NEXT: ^
1937 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1938 // CHECK-ERROR-NEXT: ldrh w1, [x19], #256
1939 // CHECK-ERROR-NEXT: ^
1940 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1941 // CHECK-ERROR-NEXT: ldrh w9, [sp], #-257
1942 // CHECK-ERROR-NEXT: ^
1943 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1944 // CHECK-ERROR-NEXT: ldr w1, [x19], #256
1945 // CHECK-ERROR-NEXT: ^
1946 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1947 // CHECK-ERROR-NEXT: ldr w9, [sp], #-257
1948 // CHECK-ERROR-NEXT: ^
1950 ldrsb x2, [x3], #256
1951 ldrsb x22, [x13], #-257
1952 ldrsh x2, [x3], #256
1953 ldrsh x22, [x13], #-257
1954 ldrsw x2, [x3], #256
1955 ldrsw x22, [x13], #-257
1956 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1957 // CHECK-ERROR-NEXT: ldrsb x2, [x3], #256
1958 // CHECK-ERROR-NEXT: ^
1959 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1960 // CHECK-ERROR-NEXT: ldrsb x22, [x13], #-257
1961 // CHECK-ERROR-NEXT: ^
1962 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1963 // CHECK-ERROR-NEXT: ldrsh x2, [x3], #256
1964 // CHECK-ERROR-NEXT: ^
1965 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1966 // CHECK-ERROR-NEXT: ldrsh x22, [x13], #-257
1967 // CHECK-ERROR-NEXT: ^
1968 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1969 // CHECK-ERROR-NEXT: ldrsw x2, [x3], #256
1970 // CHECK-ERROR-NEXT: ^
1971 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1972 // CHECK-ERROR-NEXT: ldrsw x22, [x13], #-257
1973 // CHECK-ERROR-NEXT: ^
1975 ldrsb w2, [x3], #256
1976 ldrsb w22, [x13], #-257
1977 ldrsh w2, [x3], #256
1978 ldrsh w22, [x13], #-257
1979 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
1980 // CHECK-ERROR-NEXT: ldrsb w2, [x3], #256
1981 // CHECK-ERROR-NEXT: ^
1982 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1983 // CHECK-ERROR-NEXT: ldrsb w22, [x13], #-257
1984 // CHECK-ERROR-NEXT: ^
1985 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1986 // CHECK-ERROR-NEXT: ldrsh w2, [x3], #256
1987 // CHECK-ERROR-NEXT: ^
1988 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
1989 // CHECK-ERROR-NEXT: ldrsh w22, [x13], #-257
1990 // CHECK-ERROR-NEXT: ^
1993 str b3, [x13], #-257
1995 str h3, [x13], #-257
1997 str s3, [x13], #-257
1999 str d3, [x13], #-257
2001 str q3, [x13], #-257
2002 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2003 // CHECK-ERROR-NEXT: str b3, [x3], #256
2004 // CHECK-ERROR-NEXT: ^
2005 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2006 // CHECK-ERROR-NEXT: str b3, [x13], #-257
2007 // CHECK-ERROR-NEXT: ^
2008 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2009 // CHECK-ERROR-NEXT: str h3, [x3], #256
2010 // CHECK-ERROR-NEXT: ^
2011 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2012 // CHECK-ERROR-NEXT: str h3, [x13], #-257
2013 // CHECK-ERROR-NEXT: ^
2014 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2015 // CHECK-ERROR-NEXT: str s3, [x3], #256
2016 // CHECK-ERROR-NEXT: ^
2017 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2018 // CHECK-ERROR-NEXT: str s3, [x13], #-257
2019 // CHECK-ERROR-NEXT: ^
2020 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2021 // CHECK-ERROR-NEXT: str d3, [x3], #256
2022 // CHECK-ERROR-NEXT: ^
2023 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2024 // CHECK-ERROR-NEXT: str d3, [x13], #-257
2025 // CHECK-ERROR-NEXT: ^
2026 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2027 // CHECK-ERROR-NEXT: str q3, [x3], #256
2028 // CHECK-ERROR-NEXT: ^
2029 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2030 // CHECK-ERROR-NEXT: str q3, [x13], #-257
2031 // CHECK-ERROR-NEXT: ^
2034 ldr b3, [x13], #-257
2036 ldr h3, [x13], #-257
2038 ldr s3, [x13], #-257
2040 ldr d3, [x13], #-257
2042 ldr q3, [x13], #-257
2043 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2044 // CHECK-ERROR-NEXT: ldr b3, [x3], #256
2045 // CHECK-ERROR-NEXT: ^
2046 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2047 // CHECK-ERROR-NEXT: ldr b3, [x13], #-257
2048 // CHECK-ERROR-NEXT: ^
2049 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2050 // CHECK-ERROR-NEXT: ldr h3, [x3], #256
2051 // CHECK-ERROR-NEXT: ^
2052 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2053 // CHECK-ERROR-NEXT: ldr h3, [x13], #-257
2054 // CHECK-ERROR-NEXT: ^
2055 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2056 // CHECK-ERROR-NEXT: ldr s3, [x3], #256
2057 // CHECK-ERROR-NEXT: ^
2058 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2059 // CHECK-ERROR-NEXT: ldr s3, [x13], #-257
2060 // CHECK-ERROR-NEXT: ^
2061 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2062 // CHECK-ERROR-NEXT: ldr d3, [x3], #256
2063 // CHECK-ERROR-NEXT: ^
2064 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2065 // CHECK-ERROR-NEXT: ldr d3, [x13], #-257
2066 // CHECK-ERROR-NEXT: ^
2067 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2068 // CHECK-ERROR-NEXT: ldr q3, [x3], #256
2069 // CHECK-ERROR-NEXT: ^
2070 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2071 // CHECK-ERROR-NEXT: ldr q3, [x13], #-257
2072 // CHECK-ERROR-NEXT: ^
2074 //------------------------------------------------------------------------------
2075 // Load-store register (immediate pre-indexed)
2076 //------------------------------------------------------------------------------
2079 // CHECK-ERROR: error:
2080 // CHECK-ERROR-NEXT: ldr x3, [x4]!
2081 // CHECK-ERROR-NEXT: ^
2083 strb w1, [x19, #256]!
2084 strb w9, [sp, #-257]!
2085 strh w1, [x19, #256]!
2086 strh w9, [sp, #-257]!
2087 str w1, [x19, #256]!
2088 str w9, [sp, #-257]!
2089 // CHECK-ERROR: error: invalid operand for instruction
2090 // CHECK-ERROR-NEXT: strb w1, [x19, #256]!
2091 // CHECK-ERROR-NEXT: ^
2092 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2093 // CHECK-ERROR-NEXT: strb w9, [sp, #-257]!
2094 // CHECK-ERROR-NEXT: ^
2095 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2096 // CHECK-ERROR-NEXT: strh w1, [x19, #256]!
2097 // CHECK-ERROR-NEXT: ^
2098 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2099 // CHECK-ERROR-NEXT: strh w9, [sp, #-257]!
2100 // CHECK-ERROR-NEXT: ^
2101 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2102 // CHECK-ERROR-NEXT: str w1, [x19, #256]!
2103 // CHECK-ERROR-NEXT: ^
2104 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2105 // CHECK-ERROR-NEXT: str w9, [sp, #-257]!
2106 // CHECK-ERROR-NEXT: ^
2108 ldrb w1, [x19, #256]!
2109 ldrb w9, [sp, #-257]!
2110 ldrh w1, [x19, #256]!
2111 ldrh w9, [sp, #-257]!
2112 ldr w1, [x19, #256]!
2113 ldr w9, [sp, #-257]!
2114 // CHECK-ERROR: error: invalid operand for instruction
2115 // CHECK-ERROR-NEXT: ldrb w1, [x19, #256]!
2116 // CHECK-ERROR-NEXT: ^
2117 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2118 // CHECK-ERROR-NEXT: ldrb w9, [sp, #-257]!
2119 // CHECK-ERROR-NEXT: ^
2120 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2121 // CHECK-ERROR-NEXT: ldrh w1, [x19, #256]!
2122 // CHECK-ERROR-NEXT: ^
2123 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2124 // CHECK-ERROR-NEXT: ldrh w9, [sp, #-257]!
2125 // CHECK-ERROR-NEXT: ^
2126 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2127 // CHECK-ERROR-NEXT: ldr w1, [x19, #256]!
2128 // CHECK-ERROR-NEXT: ^
2129 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2130 // CHECK-ERROR-NEXT: ldr w9, [sp, #-257]!
2131 // CHECK-ERROR-NEXT: ^
2133 ldrsb x2, [x3, #256]!
2134 ldrsb x22, [x13, #-257]!
2135 ldrsh x2, [x3, #256]!
2136 ldrsh x22, [x13, #-257]!
2137 ldrsw x2, [x3, #256]!
2138 ldrsw x22, [x13, #-257]!
2139 // CHECK-ERROR: error: invalid operand for instruction
2140 // CHECK-ERROR-NEXT: ldrsb x2, [x3, #256]!
2141 // CHECK-ERROR-NEXT: ^
2142 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2143 // CHECK-ERROR-NEXT: ldrsb x22, [x13, #-257]!
2144 // CHECK-ERROR-NEXT: ^
2145 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2146 // CHECK-ERROR-NEXT: ldrsh x2, [x3, #256]!
2147 // CHECK-ERROR-NEXT: ^
2148 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2149 // CHECK-ERROR-NEXT: ldrsh x22, [x13, #-257]!
2150 // CHECK-ERROR-NEXT: ^
2151 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2152 // CHECK-ERROR-NEXT: ldrsw x2, [x3, #256]!
2153 // CHECK-ERROR-NEXT: ^
2154 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2155 // CHECK-ERROR-NEXT: ldrsw x22, [x13, #-257]!
2156 // CHECK-ERROR-NEXT: ^
2158 ldrsb w2, [x3, #256]!
2159 ldrsb w22, [x13, #-257]!
2160 ldrsh w2, [x3, #256]!
2161 ldrsh w22, [x13, #-257]!
2162 // CHECK-ERROR: error: invalid operand for instruction
2163 // CHECK-ERROR-NEXT: ldrsb w2, [x3, #256]!
2164 // CHECK-ERROR-NEXT: ^
2165 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2166 // CHECK-ERROR-NEXT: ldrsb w22, [x13, #-257]!
2167 // CHECK-ERROR-NEXT: ^
2168 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2169 // CHECK-ERROR-NEXT: ldrsh w2, [x3, #256]!
2170 // CHECK-ERROR-NEXT: ^
2171 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2172 // CHECK-ERROR-NEXT: ldrsh w22, [x13, #-257]!
2173 // CHECK-ERROR-NEXT: ^
2176 str b3, [x13, #-257]!
2178 str h3, [x13, #-257]!
2180 str s3, [x13, #-257]!
2182 str d3, [x13, #-257]!
2183 // CHECK-ERROR: error: invalid operand for instruction
2184 // CHECK-ERROR-NEXT: str b3, [x3, #256]!
2185 // CHECK-ERROR-NEXT: ^
2186 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2187 // CHECK-ERROR-NEXT: str b3, [x13, #-257]!
2188 // CHECK-ERROR-NEXT: ^
2189 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2190 // CHECK-ERROR-NEXT: str h3, [x3, #256]!
2191 // CHECK-ERROR-NEXT: ^
2192 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2193 // CHECK-ERROR-NEXT: str h3, [x13, #-257]!
2194 // CHECK-ERROR-NEXT: ^
2195 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2196 // CHECK-ERROR-NEXT: str s3, [x3, #256]!
2197 // CHECK-ERROR-NEXT: ^
2198 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2199 // CHECK-ERROR-NEXT: str s3, [x13, #-257]!
2200 // CHECK-ERROR-NEXT: ^
2201 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2202 // CHECK-ERROR-NEXT: str d3, [x3, #256]!
2203 // CHECK-ERROR-NEXT: ^
2204 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2205 // CHECK-ERROR-NEXT: str d3, [x13, #-257]!
2206 // CHECK-ERROR-NEXT: ^
2209 ldr b3, [x13, #-257]!
2211 ldr h3, [x13, #-257]!
2213 ldr s3, [x13, #-257]!
2215 ldr d3, [x13, #-257]!
2216 // CHECK-ERROR: error: invalid operand for instruction
2217 // CHECK-ERROR-NEXT: ldr b3, [x3, #256]!
2218 // CHECK-ERROR-NEXT: ^
2219 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2220 // CHECK-ERROR-NEXT: ldr b3, [x13, #-257]!
2221 // CHECK-ERROR-NEXT: ^
2222 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2223 // CHECK-ERROR-NEXT: ldr h3, [x3, #256]!
2224 // CHECK-ERROR-NEXT: ^
2225 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2226 // CHECK-ERROR-NEXT: ldr h3, [x13, #-257]!
2227 // CHECK-ERROR-NEXT: ^
2228 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2229 // CHECK-ERROR-NEXT: ldr s3, [x3, #256]!
2230 // CHECK-ERROR-NEXT: ^
2231 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2232 // CHECK-ERROR-NEXT: ldr s3, [x13, #-257]!
2233 // CHECK-ERROR-NEXT: ^
2234 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2235 // CHECK-ERROR-NEXT: ldr d3, [x3, #256]!
2236 // CHECK-ERROR-NEXT: ^
2237 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2238 // CHECK-ERROR-NEXT: ldr d3, [x13, #-257]!
2239 // CHECK-ERROR-NEXT: ^
2241 //------------------------------------------------------------------------------
2242 // Load/store (unprivileged)
2243 //------------------------------------------------------------------------------
2245 ldtrb w2, [sp, #256]
2246 sttrh w17, [x1, #256]
2247 ldtrsw x20, [x1, #256]
2248 ldtr x12, [sp, #256]
2249 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2250 // CHECK-ERROR-NEXT: ldtrb w2, [sp, #256]
2251 // CHECK-ERROR-NEXT: ^
2252 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2253 // CHECK-ERROR-NEXT: sttrh w17, [x1, #256]
2254 // CHECK-ERROR-NEXT: ^
2255 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2256 // CHECK-ERROR-NEXT: ldtrsw x20, [x1, #256]
2257 // CHECK-ERROR-NEXT: ^
2258 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2259 // CHECK-ERROR-NEXT: ldtr x12, [sp, #256]
2260 // CHECK-ERROR-NEXT: ^
2262 sttr h2, [x2, #-257]
2263 sttr b2, [x2, #-257]
2264 ldtrsb x9, [sp, #-257]
2265 ldtr w2, [x30, #-257]
2266 sttr q9, [x20, #-257]
2267 // CHECK-ERROR: error: invalid operand for instruction
2268 // CHECK-ERROR-NEXT: sttr h2, [x2, #-257]
2269 // CHECK-ERROR-NEXT: ^
2270 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2271 // CHECK-ERROR-NEXT: sttr b2, [x2, #-257]
2272 // CHECK-ERROR-NEXT: ^
2273 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2274 // CHECK-ERROR-NEXT: ldtrsb x9, [sp, #-257]
2275 // CHECK-ERROR-NEXT: ^
2276 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2277 // CHECK-ERROR-NEXT: ldtr w2, [x30, #-257]
2278 // CHECK-ERROR-NEXT: ^
2279 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2280 // CHECK-ERROR-NEXT: sttr q9, [x20, #-257]
2281 // CHECK-ERROR-NEXT: ^
2284 //------------------------------------------------------------------------------
2285 // Load/store (unsigned immediate)
2286 //------------------------------------------------------------------------------
2288 //// Out of range immediates
2289 ldr q0, [x11, #65536]
2290 ldr x0, [sp, #32768]
2291 ldr w0, [x4, #16384]
2292 ldrh w2, [x21, #8192]
2293 ldrb w3, [x12, #4096]
2294 // CHECK-ERROR: error: {{expected|index must be an}} integer in range [-256, 255]
2295 // CHECK-ERROR-NEXT: ldr q0, [x11, #65536]
2296 // CHECK-ERROR-NEXT: ^
2297 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2298 // CHECK-ERROR-NEXT: ldr x0, [sp, #32768]
2299 // CHECK-ERROR-NEXT: ^
2300 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2301 // CHECK-ERROR-NEXT: ldr w0, [x4, #16384]
2302 // CHECK-ERROR-NEXT: ^
2303 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2304 // CHECK-ERROR-NEXT: ldrh w2, [x21, #8192]
2305 // CHECK-ERROR-NEXT: ^
2306 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2307 // CHECK-ERROR-NEXT: ldrb w3, [x12, #4096]
2308 // CHECK-ERROR-NEXT: ^
2310 //// Misaligned addresses
2312 ldrsh w2, [x0, #123]
2314 // CHECK-ERROR-AARCH64: error: too few operands for instruction
2315 // CHECK-ERROR-AARCH64-NEXT: ldr w0, [x0, #2]
2316 // CHECK-ERROR-AARCH64-NEXT: ^
2317 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2318 // CHECK-ERROR-AARCH64-NEXT: ldrsh w2, [x0, #123]
2319 // CHECK-ERROR-AARCH64-NEXT: ^
2320 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2321 // CHECK-ERROR-AARCH64-NEXT: str q0, [x0, #8]
2322 // CHECK-ERROR-AARCH64-NEXT: ^
2324 //// 32-bit addresses
2327 // CHECK-ERROR: error: invalid operand for instruction
2328 // CHECK-ERROR-NEXT: ldr w0, [w20]
2329 // CHECK-ERROR-NEXT: ^
2330 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2331 // CHECK-ERROR-NEXT: ldrsh x3, [wsp]
2332 // CHECK-ERROR-NEXT: ^
2338 str w7, [x12, #16384]
2339 // CHECK-ERROR: error: invalid operand for instruction
2340 // CHECK-ERROR-NEXT: strb w0, [wsp]
2341 // CHECK-ERROR-NEXT: ^
2342 // CHECK-ERROR-AARCH64: error: invalid operand for instruction
2343 // CHECK-ERROR-AARCH64-NEXT: strh w31, [x23, #1]
2344 // CHECK-ERROR-AARCH64-NEXT: ^
2345 // CHECK-ERROR-AARCH64-NEXT: error: too few operands for instruction
2346 // CHECK-ERROR-AARCH64-NEXT: str x5, [x22, #12]
2347 // CHECK-ERROR-AARCH64-NEXT: ^
2348 // CHECK-ERROR-NEXT: error: {{expected|index must be an}} integer in range [-256, 255]
2349 // CHECK-ERROR-NEXT: str w7, [x12, #16384]
2350 // CHECK-ERROR-NEXT: ^
2355 prfm pldl1strm, [w3, #8]
2357 // CHECK-ERROR-AARCH64: error: Invalid immediate for instruction
2358 // CHECK-ERROR-ARM64: error: prefetch operand out of range, [0,31] expected
2359 // CHECK-ERROR-NEXT: prfm #-1, [sp]
2360 // CHECK-ERROR-NEXT: ^
2361 // CHECK-ERROR-AARCH64-NEXT: error: Invalid immediate for instruction
2362 // CHECK-ERROR-ARM64-NEXT: error: prefetch operand out of range, [0,31] expected
2363 // CHECK-ERROR-NEXT: prfm #32, [sp, #8]
2364 // CHECK-ERROR-NEXT: ^
2365 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2366 // CHECK-ERROR-NEXT: prfm pldl1strm, [w3, #8]
2367 // CHECK-ERROR-NEXT: ^
2368 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
2369 // CHECK-ERROR-ARM64-NEXT: error: pre-fetch hint expected
2370 // CHECK-ERROR-NEXT: prfm wibble, [sp]
2371 // CHECK-ERROR-NEXT: ^
2373 //------------------------------------------------------------------------------
2374 // Load/store register (register offset)
2375 //------------------------------------------------------------------------------
2378 ldr w4, [x0, x4, lsl]
2379 ldr w9, [x5, x5, uxtw]
2380 ldr w10, [x6, x9, sxtw #2]
2381 ldr w11, [x7, w2, lsl #2]
2382 ldr w12, [x8, w1, sxtx]
2383 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2384 // CHECK-ERROR-NEXT: ldr w3, [xzr, x3]
2385 // CHECK-ERROR-NEXT: ^
2386 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2387 // CHECK-ERROR-NEXT: ldr w4, [x0, x4, lsl]
2388 // CHECK-ERROR-NEXT: ^
2389 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2390 // CHECK-ERROR-NEXT: ldr w9, [x5, x5, uxtw]
2391 // CHECK-ERROR-NEXT: ^
2392 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2393 // CHECK-ERROR-NEXT: ldr w10, [x6, x9, sxtw #2]
2394 // CHECK-ERROR-NEXT: ^
2395 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2396 // CHECK-ERROR-NEXT: ldr w11, [x7, w2, lsl #2]
2397 // CHECK-ERROR-NEXT: ^
2398 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2399 // CHECK-ERROR-NEXT: ldr w12, [x8, w1, sxtx]
2400 // CHECK-ERROR-NEXT: ^
2402 ldrsb w9, [x4, x2, lsl #-1]
2403 strb w9, [x4, x2, lsl #1]
2404 // CHECK-ERROR-NEXT: error: expected integer shift amount
2405 // CHECK-ERROR-NEXT: ldrsb w9, [x4, x2, lsl #-1]
2406 // CHECK-ERROR-NEXT: ^
2407 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0
2408 // CHECK-ERROR-NEXT: strb w9, [x4, x2, lsl #1]
2409 // CHECK-ERROR-NEXT: ^
2411 ldrsh w9, [x4, x2, lsl #-1]
2412 ldr h13, [x4, w2, uxtw #2]
2413 // CHECK-ERROR-NEXT: error: expected integer shift amount
2414 // CHECK-ERROR-NEXT: ldrsh w9, [x4, x2, lsl #-1]
2415 // CHECK-ERROR-NEXT: ^
2416 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #1
2417 // CHECK-ERROR-NEXT: ldr h13, [x4, w2, uxtw #2]
2418 // CHECK-ERROR-NEXT: ^
2420 str w9, [x5, w9, sxtw #-1]
2421 str s3, [sp, w9, uxtw #1]
2422 ldrsw x9, [x15, x4, sxtx #3]
2423 // CHECK-ERROR-NEXT: error: expected integer shift amount
2424 // CHECK-ERROR-NEXT: str w9, [x5, w9, sxtw #-1]
2425 // CHECK-ERROR-NEXT: ^
2426 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #2
2427 // CHECK-ERROR-NEXT: str s3, [sp, w9, uxtw #1]
2428 // CHECK-ERROR-NEXT: ^
2429 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #2
2430 // CHECK-ERROR-NEXT: ldrsw x9, [x15, x4, sxtx #3]
2431 // CHECK-ERROR-NEXT: ^
2433 str xzr, [x5, x9, sxtx #-1]
2434 prfm pldl3keep, [sp, x20, lsl #2]
2435 ldr d3, [x20, wzr, uxtw #4]
2436 // CHECK-ERROR-NEXT: error: expected integer shift amount
2437 // CHECK-ERROR-NEXT: str xzr, [x5, x9, sxtx #-1]
2438 // CHECK-ERROR-NEXT: ^
2439 // CHECK-ERROR-NEXT: error: expected 'lsl' or 'sxtx' with optional shift of #0 or #3
2440 // CHECK-ERROR-NEXT: prfm pldl3keep, [sp, x20, lsl #2]
2441 // CHECK-ERROR-NEXT: ^
2442 // CHECK-ERROR-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #3
2443 // CHECK-ERROR-NEXT: ldr d3, [x20, wzr, uxtw #4]
2444 // CHECK-ERROR-NEXT: ^
2446 ldr q5, [sp, x2, lsl #-1]
2447 ldr q10, [x20, w4, uxtw #2]
2448 str q21, [x20, w4, uxtw #5]
2449 // CHECK-ERROR-NEXT: error: expected integer shift amount
2450 // CHECK-ERROR-NEXT: ldr q5, [sp, x2, lsl #-1]
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: ldr q10, [x20, w4, uxtw #2]
2455 // CHECK-ERROR-NEXT: ^
2456 // CHECK-ERROR-AARCH64-NEXT: error: expected 'lsl' or 'sxtw' with optional shift of #0 or #4
2457 // CHECK-ERROR-ARM64-NEXT: error: expected 'uxtw' or 'sxtw' with optional shift of #0 or #4
2458 // CHECK-ERROR-NEXT: str q21, [x20, w4, uxtw #5]
2459 // CHECK-ERROR-NEXT: ^
2461 //------------------------------------------------------------------------------
2462 // Load/store register pair (offset)
2463 //------------------------------------------------------------------------------
2464 ldp w3, w2, [x4, #1]
2465 stp w1, w2, [x3, #253]
2466 stp w9, w10, [x5, #256]
2467 ldp w11, w12, [x9, #-260]
2469 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2470 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]
2471 // CHECK-ERROR-NEXT: ^
2472 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2473 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]
2474 // CHECK-ERROR-NEXT: ^
2475 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2476 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]
2477 // CHECK-ERROR-NEXT: ^
2478 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2479 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]
2480 // CHECK-ERROR-NEXT: ^
2481 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2482 // CHECK-ERROR-NEXT: stp wsp, w9, [sp]
2483 // CHECK-ERROR-NEXT: ^
2485 ldpsw x9, x2, [sp, #2]
2486 ldpsw x1, x2, [x10, #256]
2487 ldpsw x3, x4, [x11, #-260]
2488 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2489 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]
2490 // CHECK-ERROR-NEXT: ^
2491 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2492 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]
2493 // CHECK-ERROR-NEXT: ^
2494 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2495 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]
2496 // CHECK-ERROR-NEXT: ^
2498 ldp x2, x5, [sp, #4]
2499 ldp x5, x6, [x9, #512]
2500 stp x7, x8, [x10, #-520]
2501 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2502 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]
2503 // CHECK-ERROR-NEXT: ^
2504 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2505 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]
2506 // CHECK-ERROR-NEXT: ^
2507 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2508 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]
2509 // CHECK-ERROR-NEXT: ^
2513 // CHECK-ERROR: error: invalid operand for instruction
2514 // CHECK-ERROR-NEXT: ldp sp, x3, [x10]
2515 // CHECK-ERROR-NEXT: ^
2516 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2517 // CHECK-ERROR-NEXT: stp x3, sp, [x9]
2518 // CHECK-ERROR-NEXT: ^
2520 stp s3, s5, [sp, #-2]
2521 ldp s6, s26, [x4, #-260]
2522 stp s13, s19, [x5, #256]
2523 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2524 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]
2525 // CHECK-ERROR-NEXT: ^
2526 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2527 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]
2528 // CHECK-ERROR-NEXT: ^
2529 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2530 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]
2531 // CHECK-ERROR-NEXT: ^
2534 ldp d5, d6, [x0, #512]
2535 stp d7, d8, [x0, #-520]
2536 // CHECK-ERROR: error: invalid operand for instruction
2537 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr]
2538 // CHECK-ERROR-NEXT: ^
2539 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2540 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]
2541 // CHECK-ERROR-NEXT: ^
2542 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2543 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]
2544 // CHECK-ERROR-NEXT: ^
2547 ldp q3, q5, [sp, #8]
2548 stp q20, q25, [x5, #1024]
2549 ldp q30, q15, [x23, #-1040]
2550 // CHECK-ERROR: error: invalid operand for instruction
2551 // CHECK-ERROR-NEXT: ldp d3, q2, [sp]
2552 // CHECK-ERROR-NEXT: ^
2553 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2554 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]
2555 // CHECK-ERROR-NEXT: ^
2556 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2557 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]
2558 // CHECK-ERROR-NEXT: ^
2559 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2560 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]
2561 // CHECK-ERROR-NEXT: ^
2563 //------------------------------------------------------------------------------
2564 // Load/store register pair (post-indexed)
2565 //------------------------------------------------------------------------------
2567 ldp w3, w2, [x4], #1
2568 stp w1, w2, [x3], #253
2569 stp w9, w10, [x5], #256
2570 ldp w11, w12, [x9], #-260
2571 stp wsp, w9, [sp], #0
2572 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2573 // CHECK-ERROR-NEXT: ldp w3, w2, [x4], #1
2574 // CHECK-ERROR-NEXT: ^
2575 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2576 // CHECK-ERROR-NEXT: stp w1, w2, [x3], #253
2577 // CHECK-ERROR-NEXT: ^
2578 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2579 // CHECK-ERROR-NEXT: stp w9, w10, [x5], #256
2580 // CHECK-ERROR-NEXT: ^
2581 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2582 // CHECK-ERROR-NEXT: ldp w11, w12, [x9], #-260
2583 // CHECK-ERROR-NEXT: ^
2584 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2585 // CHECK-ERROR-NEXT: stp wsp, w9, [sp], #0
2586 // CHECK-ERROR-NEXT: ^
2588 ldpsw x9, x2, [sp], #2
2589 ldpsw x1, x2, [x10], #256
2590 ldpsw x3, x4, [x11], #-260
2591 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2592 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp], #2
2593 // CHECK-ERROR-NEXT: ^
2594 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2595 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10], #256
2596 // CHECK-ERROR-NEXT: ^
2597 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2598 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11], #-260
2599 // CHECK-ERROR-NEXT: ^
2601 ldp x2, x5, [sp], #4
2602 ldp x5, x6, [x9], #512
2603 stp x7, x8, [x10], #-520
2604 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2605 // CHECK-ERROR-NEXT: ldp x2, x5, [sp], #4
2606 // CHECK-ERROR-NEXT: ^
2607 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2608 // CHECK-ERROR-NEXT: ldp x5, x6, [x9], #512
2609 // CHECK-ERROR-NEXT: ^
2610 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2611 // CHECK-ERROR-NEXT: stp x7, x8, [x10], #-520
2612 // CHECK-ERROR-NEXT: ^
2614 ldp sp, x3, [x10], #0
2615 stp x3, sp, [x9], #0
2616 // CHECK-ERROR: error: invalid operand for instruction
2617 // CHECK-ERROR-NEXT: ldp sp, x3, [x10], #0
2618 // CHECK-ERROR-NEXT: ^
2619 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2620 // CHECK-ERROR-NEXT: stp x3, sp, [x9], #0
2621 // CHECK-ERROR-NEXT: ^
2623 stp s3, s5, [sp], #-2
2624 ldp s6, s26, [x4], #-260
2625 stp s13, s19, [x5], #256
2626 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2627 // CHECK-ERROR-NEXT: stp s3, s5, [sp], #-2
2628 // CHECK-ERROR-NEXT: ^
2629 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2630 // CHECK-ERROR-NEXT: ldp s6, s26, [x4], #-260
2631 // CHECK-ERROR-NEXT: ^
2632 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2633 // CHECK-ERROR-NEXT: stp s13, s19, [x5], #256
2634 // CHECK-ERROR-NEXT: ^
2636 ldp d3, d4, [xzr], #0
2637 ldp d5, d6, [x0], #512
2638 stp d7, d8, [x0], #-520
2639 // CHECK-ERROR: error: invalid operand for instruction
2640 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr], #0
2641 // CHECK-ERROR-NEXT: ^
2642 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2643 // CHECK-ERROR-NEXT: ldp d5, d6, [x0], #512
2644 // CHECK-ERROR-NEXT: ^
2645 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2646 // CHECK-ERROR-NEXT: stp d7, d8, [x0], #-520
2647 // CHECK-ERROR-NEXT: ^
2649 ldp d3, q2, [sp], #0
2650 ldp q3, q5, [sp], #8
2651 stp q20, q25, [x5], #1024
2652 ldp q30, q15, [x23], #-1040
2653 // CHECK-ERROR: error: invalid operand for instruction
2654 // CHECK-ERROR-NEXT: ldp d3, q2, [sp], #0
2655 // CHECK-ERROR-NEXT: ^
2656 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2657 // CHECK-ERROR-NEXT: ldp q3, q5, [sp], #8
2658 // CHECK-ERROR-NEXT: ^
2659 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2660 // CHECK-ERROR-NEXT: stp q20, q25, [x5], #1024
2661 // CHECK-ERROR-NEXT: ^
2662 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2663 // CHECK-ERROR-NEXT: ldp q30, q15, [x23], #-1040
2664 // CHECK-ERROR-NEXT: ^
2666 //------------------------------------------------------------------------------
2667 // Load/store register pair (pre-indexed)
2668 //------------------------------------------------------------------------------
2670 ldp w3, w2, [x4, #1]!
2671 stp w1, w2, [x3, #253]!
2672 stp w9, w10, [x5, #256]!
2673 ldp w11, w12, [x9, #-260]!
2674 stp wsp, w9, [sp, #0]!
2675 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2676 // CHECK-ERROR-NEXT: ldp w3, w2, [x4, #1]!
2677 // CHECK-ERROR-NEXT: ^
2678 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2679 // CHECK-ERROR-NEXT: stp w1, w2, [x3, #253]!
2680 // CHECK-ERROR-NEXT: ^
2681 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2682 // CHECK-ERROR-NEXT: stp w9, w10, [x5, #256]!
2683 // CHECK-ERROR-NEXT: ^
2684 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2685 // CHECK-ERROR-NEXT: ldp w11, w12, [x9, #-260]!
2686 // CHECK-ERROR-NEXT: ^
2687 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2688 // CHECK-ERROR-NEXT: stp wsp, w9, [sp, #0]!
2689 // CHECK-ERROR-NEXT: ^
2691 ldpsw x9, x2, [sp, #2]!
2692 ldpsw x1, x2, [x10, #256]!
2693 ldpsw x3, x4, [x11, #-260]!
2694 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2695 // CHECK-ERROR-NEXT: ldpsw x9, x2, [sp, #2]!
2696 // CHECK-ERROR-NEXT: ^
2697 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2698 // CHECK-ERROR-NEXT: ldpsw x1, x2, [x10, #256]!
2699 // CHECK-ERROR-NEXT: ^
2700 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2701 // CHECK-ERROR-NEXT: ldpsw x3, x4, [x11, #-260]!
2702 // CHECK-ERROR-NEXT: ^
2704 ldp x2, x5, [sp, #4]!
2705 ldp x5, x6, [x9, #512]!
2706 stp x7, x8, [x10, #-520]!
2707 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2708 // CHECK-ERROR-NEXT: ldp x2, x5, [sp, #4]!
2709 // CHECK-ERROR-NEXT: ^
2710 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2711 // CHECK-ERROR-NEXT: ldp x5, x6, [x9, #512]!
2712 // CHECK-ERROR-NEXT: ^
2713 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2714 // CHECK-ERROR-NEXT: stp x7, x8, [x10, #-520]!
2715 // CHECK-ERROR-NEXT: ^
2717 ldp sp, x3, [x10, #0]!
2718 stp x3, sp, [x9, #0]!
2719 // CHECK-ERROR: error: invalid operand for instruction
2720 // CHECK-ERROR-NEXT: ldp sp, x3, [x10, #0]!
2721 // CHECK-ERROR-NEXT: ^
2722 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2723 // CHECK-ERROR-NEXT: stp x3, sp, [x9, #0]!
2724 // CHECK-ERROR-NEXT: ^
2726 stp s3, s5, [sp, #-2]!
2727 ldp s6, s26, [x4, #-260]!
2728 stp s13, s19, [x5, #256]!
2729 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2730 // CHECK-ERROR-NEXT: stp s3, s5, [sp, #-2]!
2731 // CHECK-ERROR-NEXT: ^
2732 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2733 // CHECK-ERROR-NEXT: ldp s6, s26, [x4, #-260]!
2734 // CHECK-ERROR-NEXT: ^
2735 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2736 // CHECK-ERROR-NEXT: stp s13, s19, [x5, #256]!
2737 // CHECK-ERROR-NEXT: ^
2739 ldp d3, d4, [xzr, #0]!
2740 ldp d5, d6, [x0, #512]!
2741 stp d7, d8, [x0, #-520]!
2742 // CHECK-ERROR: error: invalid operand for instruction
2743 // CHECK-ERROR-NEXT: ldp d3, d4, [xzr, #0]!
2744 // CHECK-ERROR-NEXT: ^
2745 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2746 // CHECK-ERROR-NEXT: ldp d5, d6, [x0, #512]!
2747 // CHECK-ERROR-NEXT: ^
2748 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2749 // CHECK-ERROR-NEXT: stp d7, d8, [x0, #-520]!
2750 // CHECK-ERROR-NEXT: ^
2752 ldp d3, q2, [sp, #0]!
2753 ldp q3, q5, [sp, #8]!
2754 stp q20, q25, [x5, #1024]!
2755 ldp q30, q15, [x23, #-1040]!
2756 // CHECK-ERROR: error: invalid operand for instruction
2757 // CHECK-ERROR-NEXT: ldp d3, q2, [sp, #0]!
2758 // CHECK-ERROR-NEXT: ^
2759 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2760 // CHECK-ERROR-NEXT: ldp q3, q5, [sp, #8]!
2761 // CHECK-ERROR-NEXT: ^
2762 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2763 // CHECK-ERROR-NEXT: stp q20, q25, [x5, #1024]!
2764 // CHECK-ERROR-NEXT: ^
2765 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2766 // CHECK-ERROR-NEXT: ldp q30, q15, [x23, #-1040]!
2767 // CHECK-ERROR-NEXT: ^
2769 //------------------------------------------------------------------------------
2770 // Load/store register pair (offset)
2771 //------------------------------------------------------------------------------
2772 ldnp w3, w2, [x4, #1]
2773 stnp w1, w2, [x3, #253]
2774 stnp w9, w10, [x5, #256]
2775 ldnp w11, w12, [x9, #-260]
2777 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2778 // CHECK-ERROR-NEXT: ldnp w3, w2, [x4, #1]
2779 // CHECK-ERROR-NEXT: ^
2780 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2781 // CHECK-ERROR-NEXT: stnp w1, w2, [x3, #253]
2782 // CHECK-ERROR-NEXT: ^
2783 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2784 // CHECK-ERROR-NEXT: stnp w9, w10, [x5, #256]
2785 // CHECK-ERROR-NEXT: ^
2786 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2787 // CHECK-ERROR-NEXT: ldnp w11, w12, [x9, #-260]
2788 // CHECK-ERROR-NEXT: ^
2789 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2790 // CHECK-ERROR-NEXT: stnp wsp, w9, [sp]
2791 // CHECK-ERROR-NEXT: ^
2793 ldnp x2, x5, [sp, #4]
2794 ldnp x5, x6, [x9, #512]
2795 stnp x7, x8, [x10, #-520]
2796 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2797 // CHECK-ERROR-NEXT: ldnp x2, x5, [sp, #4]
2798 // CHECK-ERROR-NEXT: ^
2799 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2800 // CHECK-ERROR-NEXT: ldnp x5, x6, [x9, #512]
2801 // CHECK-ERROR-NEXT: ^
2802 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2803 // CHECK-ERROR-NEXT: stnp x7, x8, [x10, #-520]
2804 // CHECK-ERROR-NEXT: ^
2808 // CHECK-ERROR: error: invalid operand for instruction
2809 // CHECK-ERROR-NEXT: ldnp sp, x3, [x10]
2810 // CHECK-ERROR-NEXT: ^
2811 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2812 // CHECK-ERROR-NEXT: stnp x3, sp, [x9]
2813 // CHECK-ERROR-NEXT: ^
2815 stnp s3, s5, [sp, #-2]
2816 ldnp s6, s26, [x4, #-260]
2817 stnp s13, s19, [x5, #256]
2818 // CHECK-ERROR: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2819 // CHECK-ERROR-NEXT: stnp s3, s5, [sp, #-2]
2820 // CHECK-ERROR-NEXT: ^
2821 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2822 // CHECK-ERROR-NEXT: ldnp s6, s26, [x4, #-260]
2823 // CHECK-ERROR-NEXT: ^
2824 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 4 in range [-256, 252]
2825 // CHECK-ERROR-NEXT: stnp s13, s19, [x5, #256]
2826 // CHECK-ERROR-NEXT: ^
2829 ldnp d5, d6, [x0, #512]
2830 stnp d7, d8, [x0, #-520]
2831 // CHECK-ERROR: error: invalid operand for instruction
2832 // CHECK-ERROR-NEXT: ldnp d3, d4, [xzr]
2833 // CHECK-ERROR-NEXT: ^
2834 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2835 // CHECK-ERROR-NEXT: ldnp d5, d6, [x0, #512]
2836 // CHECK-ERROR-NEXT: ^
2837 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 8 in range [-512, 504]
2838 // CHECK-ERROR-NEXT: stnp d7, d8, [x0, #-520]
2839 // CHECK-ERROR-NEXT: ^
2842 ldnp q3, q5, [sp, #8]
2843 stnp q20, q25, [x5, #1024]
2844 ldnp q30, q15, [x23, #-1040]
2845 // CHECK-ERROR: error: invalid operand for instruction
2846 // CHECK-ERROR-NEXT: ldnp d3, q2, [sp]
2847 // CHECK-ERROR-NEXT: ^
2848 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2849 // CHECK-ERROR-NEXT: ldnp q3, q5, [sp, #8]
2850 // CHECK-ERROR-NEXT: ^
2851 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2852 // CHECK-ERROR-NEXT: stnp q20, q25, [x5, #1024]
2853 // CHECK-ERROR-NEXT: ^
2854 // CHECK-ERROR-NEXT: error: {{expected integer|index must be a}} multiple of 16 in range [-1024, 1008]
2855 // CHECK-ERROR-NEXT: ldnp q30, q15, [x23, #-1040]
2856 // CHECK-ERROR-NEXT: ^
2858 //------------------------------------------------------------------------------
2859 // Logical (shifted register)
2860 //------------------------------------------------------------------------------
2861 orr w0, w1, #0xffffffff
2862 and x3, x5, #0xffffffffffffffff
2863 // CHECK-ERROR: error: expected compatible register or logical immediate
2864 // CHECK-ERROR-NEXT: orr w0, w1, #0xffffffff
2865 // CHECK-ERROR-NEXT: ^
2866 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2867 // CHECK-ERROR-NEXT: and x3, x5, #0xffffffffffffffff
2868 // CHECK-ERROR-NEXT: ^
2872 // CHECK-ERROR: error: expected compatible register or logical immediate
2873 // CHECK-ERROR-NEXT: ands w3, w9, #0x0
2874 // CHECK-ERROR-NEXT: ^
2875 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2876 // CHECK-ERROR-NEXT: eor x2, x0, #0x0
2877 // CHECK-ERROR-NEXT: ^
2880 eor x9, x20, #0x1234
2881 // CHECK-ERROR: error: expected compatible register or logical immediate
2882 // CHECK-ERROR-NEXT: eor w3, w5, #0x83
2883 // CHECK-ERROR-NEXT: ^
2884 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2885 // CHECK-ERROR-NEXT: eor x9, x20, #0x1234
2886 // CHECK-ERROR-NEXT: ^
2888 and wzr, w4, 0xffff0000
2889 eor xzr, x9, #0xffff0000ffff0000
2890 // CHECK-ERROR: error: invalid operand for instruction
2891 // CHECK-ERROR-NEXT: and wzr, w4, 0xffff0000
2892 // CHECK-ERROR-NEXT: ^
2893 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2894 // CHECK-ERROR-NEXT: eor xzr, x9, #0xffff0000ffff0000
2895 // CHECK-ERROR-NEXT: ^
2897 orr w3, wsp, #0xf0f0f0f0
2898 ands x3, sp, #0xaaaaaaaaaaaaaaaa
2899 // CHECK-ERROR: error: invalid operand for instruction
2900 // CHECK-ERROR-NEXT: orr w3, wsp, #0xf0f0f0f0
2901 // CHECK-ERROR-NEXT: ^
2902 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2903 // CHECK-ERROR-NEXT: ands x3, sp, #0xaaaaaaaaaaaaaaaa
2904 // CHECK-ERROR-NEXT: ^
2906 tst sp, #0xe0e0e0e0e0e0e0e0
2907 // CHECK-ERROR: error: invalid operand for instruction
2908 // CHECK-ERROR-NEXT: tst sp, #0xe0e0e0e0e0e0e0e0
2909 // CHECK-ERROR-NEXT: ^
2911 // movi has been removed from the specification. Make sure it's really gone.
2912 movi wzr, #0x44444444
2914 movi x9, #0x0000ffff00000000
2915 // CHECK-ERROR: error: invalid operand for instruction
2916 // CHECK-ERROR-NEXT: movi wzr, #0x44444444
2917 // CHECK-ERROR-NEXT: ^
2918 // CHECK-ERROR: error: invalid operand for instruction
2919 // CHECK-ERROR-NEXT: movi w3, #0xffff
2920 // CHECK-ERROR-NEXT: ^
2921 // CHECK-ERROR: error: invalid operand for instruction
2922 // CHECK-ERROR-NEXT: movi x9, #0x0000ffff00000000
2923 // CHECK-ERROR-NEXT: ^
2925 //------------------------------------------------------------------------------
2926 // Logical (shifted register)
2927 //------------------------------------------------------------------------------
2929 //// Out of range shifts
2930 and w2, w24, w6, lsl #-1
2931 and w4, w6, w12, lsl #32
2932 and x4, x6, x12, lsl #64
2933 and x2, x5, x11, asr
2934 // CHECK-ERROR: error: expected integer shift amount
2935 // CHECK-ERROR-NEXT: and w2, w24, w6, lsl #-1
2936 // CHECK-ERROR-NEXT: ^
2937 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
2938 // CHECK-ERROR-NEXT: and w4, w6, w12, lsl #32
2939 // CHECK-ERROR-NEXT: ^
2940 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 63]
2941 // CHECK-ERROR-NEXT: and x4, x6, x12, lsl #64
2942 // CHECK-ERROR-NEXT: ^
2943 // CHECK-ERROR-NEXT: error: expected #imm after shift specifier
2944 // CHECK-ERROR-NEXT: and x2, x5, x11, asr
2945 // CHECK-ERROR-NEXT: ^
2949 bics x20, sp, x9, lsr #0
2950 orn x2, x6, sp, lsl #3
2951 // CHECK-ERROR: error: invalid operand for instruction
2952 // CHECK-ERROR-NEXT: orn wsp, w3, w5
2953 // CHECK-ERROR-NEXT: ^
2954 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2955 // CHECK-ERROR-NEXT: bics x20, sp, x9, lsr #0
2956 // CHECK-ERROR-NEXT: ^
2957 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2958 // CHECK-ERROR-NEXT: orn x2, x6, sp, lsl #3
2959 // CHECK-ERROR-NEXT: ^
2961 //// Mismatched registers
2964 and x4, x5, w6, lsl #12
2965 orr w2, w5, x7, asr #0
2966 // CHECK-ERROR: error: invalid operand for instruction
2967 // CHECK-ERROR-NEXT: and x3, w2, w1
2968 // CHECK-ERROR-NEXT: ^
2969 // CHECK-ERROR-NEXT: error: invalid operand for instruction
2970 // CHECK-ERROR-NEXT: ands w1, x12, w2
2971 // CHECK-ERROR-NEXT: ^
2972 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2973 // CHECK-ERROR-NEXT: and x4, x5, w6, lsl #12
2974 // CHECK-ERROR-NEXT: ^
2975 // CHECK-ERROR-NEXT: error: expected compatible register or logical immediate
2976 // CHECK-ERROR-NEXT: orr w2, w5, x7, asr #0
2977 // CHECK-ERROR-NEXT: ^
2979 //// Shifts should not be allowed on mov
2981 // CHECK-ERROR: error: invalid operand for instruction
2982 // CHECK-ERROR-NEXT: mov w3, w7, lsl #13
2983 // CHECK-ERROR-NEXT: ^
2985 //------------------------------------------------------------------------------
2986 // Move wide (immediate)
2987 //------------------------------------------------------------------------------
2989 movz w3, #65536, lsl #0
2992 movk w3, #0, lsl #-1
2993 movn w2, #-1, lsl #0
2995 movk w3, #1, lsl #32
2996 movn x2, #12, lsl #64
2997 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
2998 // CHECK-ERROR-NEXT: movz w3, #65536, lsl #0
2999 // CHECK-ERROR-NEXT: ^
3000 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3001 // CHECK-ERROR-NEXT: movz w4, #65536
3002 // CHECK-ERROR-NEXT: ^
3003 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3004 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0 or 16
3005 // CHECK-ERROR-NEXT: movn w1, #2, lsl #1
3006 // CHECK-ERROR-NEXT: ^
3007 // CHECK-ERROR-AARCH64-NEXT: error: only 'lsl #+N' valid after immediate
3008 // CHECK-ERROR-ARM64-NEXT: error: expected integer shift amount
3009 // CHECK-ERROR-NEXT: movk w3, #0, lsl #-1
3010 // CHECK-ERROR-NEXT: ^
3011 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3012 // CHECK-ERROR-NEXT: movn w2, #-1, lsl #0
3013 // CHECK-ERROR-NEXT: ^
3014 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3015 // CHECK-ERROR-NEXT: movz x3, #-1
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 or 16
3019 // CHECK-ERROR-NEXT: movk w3, #1, lsl #32
3020 // CHECK-ERROR-NEXT: ^
3021 // CHECK-ERROR-AARCH64-NEXT: error: expected relocated symbol or integer in range [0, 65535]
3022 // CHECK-ERROR-ARM64-NEXT: error: expected 'lsl' with optional integer 0, 16, 32 or 48
3023 // CHECK-ERROR-NEXT: movn x2, #12, lsl #64
3024 // CHECK-ERROR-NEXT: ^
3026 movz x12, #:abs_g0:sym, lsl #16
3027 movz x12, #:abs_g0:sym, lsl #0
3028 movn x2, #:abs_g0:sym
3029 movk w3, #:abs_g0:sym
3030 movz x3, #:abs_g0_nc:sym
3031 movn x4, #:abs_g0_nc:sym
3032 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3033 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #16
3034 // CHECK-ERROR-NEXT: ^
3035 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3036 // CHECK-ERROR-NEXT: movz x12, #:abs_g0:sym, lsl #0
3037 // CHECK-ERROR-NEXT: ^
3038 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3039 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g0:sym
3040 // CHECK-ERROR-AARCH64-NEXT: ^
3041 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3042 // CHECK-ERROR-NEXT: movk w3, #:abs_g0:sym
3043 // CHECK-ERROR-NEXT: ^
3044 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3045 // CHECK-ERROR-NEXT: movz x3, #:abs_g0_nc:sym
3046 // CHECK-ERROR-NEXT: ^
3047 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3048 // CHECK-ERROR-NEXT: movn x4, #:abs_g0_nc:sym
3049 // CHECK-ERROR-NEXT: ^
3051 movn x2, #:abs_g1:sym
3052 movk w3, #:abs_g1:sym
3053 movz x3, #:abs_g1_nc:sym
3054 movn x4, #:abs_g1_nc:sym
3055 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3056 // CHECK-ERROR-AARCH64-NEXT: movn x2, #:abs_g1:sym
3057 // CHECK-ERROR-AARCH64-NEXT: ^
3058 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3059 // CHECK-ERROR-NEXT: movk w3, #:abs_g1:sym
3060 // CHECK-ERROR-NEXT: ^
3061 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3062 // CHECK-ERROR-NEXT: movz x3, #:abs_g1_nc:sym
3063 // CHECK-ERROR-NEXT: ^
3064 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3065 // CHECK-ERROR-NEXT: movn x4, #:abs_g1_nc:sym
3066 // CHECK-ERROR-NEXT: ^
3068 movz w12, #:abs_g2:sym
3069 movn x12, #:abs_g2:sym
3070 movk x13, #:abs_g2:sym
3071 movk w3, #:abs_g2_nc:sym
3072 movz x13, #:abs_g2_nc:sym
3073 movn x24, #:abs_g2_nc:sym
3074 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3075 // CHECK-ERROR-NEXT: movz w12, #:abs_g2:sym
3076 // CHECK-ERROR-NEXT: ^
3077 // CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3078 // CHECK-ERROR-AARCH64-NEXT: movn x12, #:abs_g2:sym
3079 // CHECK-ERROR-AARCH64-NEXT: ^
3080 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3081 // CHECK-ERROR-NEXT: movk x13, #:abs_g2:sym
3082 // CHECK-ERROR-NEXT: ^
3083 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3084 // CHECK-ERROR-NEXT: movk w3, #:abs_g2_nc:sym
3085 // CHECK-ERROR-NEXT: ^
3086 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3087 // CHECK-ERROR-NEXT: movz x13, #:abs_g2_nc:sym
3088 // CHECK-ERROR-NEXT: ^
3089 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3090 // CHECK-ERROR-NEXT: movn x24, #:abs_g2_nc:sym
3091 // CHECK-ERROR-NEXT: ^
3093 movn x19, #:abs_g3:sym
3094 movz w20, #:abs_g3:sym
3095 movk w21, #:abs_g3:sym
3096 // CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3097 // CHECK-ERROR-AARCH64-NEXT: movn x19, #:abs_g3:sym
3098 // CHECK-ERROR-AARCH64-NEXT: ^
3099 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3100 // CHECK-ERROR-NEXT: movz w20, #:abs_g3:sym
3101 // CHECK-ERROR-NEXT: ^
3102 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3103 // CHECK-ERROR-NEXT: movk w21, #:abs_g3:sym
3104 // CHECK-ERROR-NEXT: ^
3106 movk x19, #:abs_g0_s:sym
3107 movk w23, #:abs_g0_s:sym
3108 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3109 // CHECK-ERROR-NEXT: movk x19, #:abs_g0_s:sym
3110 // CHECK-ERROR-NEXT: ^
3111 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3112 // CHECK-ERROR-NEXT: movk w23, #:abs_g0_s:sym
3113 // CHECK-ERROR-NEXT: ^
3115 movk x19, #:abs_g1_s:sym
3116 movk w23, #:abs_g1_s:sym
3117 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3118 // CHECK-ERROR-NEXT: movk x19, #:abs_g1_s:sym
3119 // CHECK-ERROR-NEXT: ^
3120 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3121 // CHECK-ERROR-NEXT: movk w23, #:abs_g1_s:sym
3122 // CHECK-ERROR-NEXT: ^
3124 movz w2, #:abs_g2_s:sym
3125 movn w29, #:abs_g2_s:sym
3126 movk x19, #:abs_g2_s:sym
3127 movk w23, #:abs_g2_s:sym
3128 // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3129 // CHECK-ERROR-NEXT: movz w2, #:abs_g2_s:sym
3130 // CHECK-ERROR-NEXT: ^
3131 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3132 // CHECK-ERROR-NEXT: movn w29, #:abs_g2_s:sym
3133 // CHECK-ERROR-NEXT: ^
3134 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3135 // CHECK-ERROR-NEXT: movk x19, #:abs_g2_s:sym
3136 // CHECK-ERROR-NEXT: ^
3137 // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]
3138 // CHECK-ERROR-NEXT: movk w23, #:abs_g2_s:sym
3139 // CHECK-ERROR-NEXT: ^
3141 //------------------------------------------------------------------------------
3142 // PC-relative addressing
3143 //------------------------------------------------------------------------------
3145 adr sp, loc // expects xzr
3146 adrp x3, #20 // Immediate unaligned
3147 adrp w2, loc // 64-bit register needed
3148 // CHECK-ERROR: error: invalid operand for instruction
3149 // CHECK-ERROR-NEXT: adr sp, loc
3150 // CHECK-ERROR-NEXT: ^
3151 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3152 // CHECK-ERROR-NEXT: adrp x3, #20
3153 // CHECK-ERROR-NEXT: ^
3154 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3155 // CHECK-ERROR-NEXT: adrp w2, loc
3156 // CHECK-ERROR-NEXT: ^
3160 adrp x9, #4294967296
3161 adrp x20, #-4294971392
3162 // CHECK-ERROR: error: expected label or encodable integer pc offset
3163 // CHECK-ERROR-NEXT: adr x9, #1048576
3164 // CHECK-ERROR-NEXT: ^
3165 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3166 // CHECK-ERROR-NEXT: adr x2, #-1048577
3167 // CHECK-ERROR-NEXT: ^
3168 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3169 // CHECK-ERROR-NEXT: adrp x9, #4294967296
3170 // CHECK-ERROR-NEXT: ^
3171 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3172 // CHECK-ERROR-NEXT: adrp x20, #-4294971392
3173 // CHECK-ERROR-NEXT: ^
3175 //------------------------------------------------------------------------------
3177 //------------------------------------------------------------------------------
3181 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 127]
3182 // CHECK-ERROR-NEXT: hint #-1
3183 // CHECK-ERROR-NEXT: ^
3184 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 127]
3185 // CHECK-ERROR-NEXT: hint #128
3186 // CHECK-ERROR-NEXT: ^
3190 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3191 // CHECK-ERROR-NEXT: clrex #-1
3192 // CHECK-ERROR-NEXT: ^
3193 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3194 // CHECK-ERROR-NEXT: clrex #16
3195 // CHECK-ERROR-NEXT: ^
3201 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3202 // CHECK-ERROR-NEXT: dsb #-1
3203 // CHECK-ERROR-NEXT: ^
3204 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3205 // CHECK-ERROR-NEXT: dsb #16
3206 // CHECK-ERROR-NEXT: ^
3207 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3208 // CHECK-ERROR-NEXT: dmb #-1
3209 // CHECK-ERROR-NEXT: ^
3210 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3211 // CHECK-ERROR-NEXT: dmb #16
3212 // CHECK-ERROR-NEXT: ^
3216 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3217 // CHECK-ERROR-NEXT: isb #-1
3218 // CHECK-ERROR-NEXT: ^
3219 // CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
3220 // CHECK-ERROR-NEXT: isb #16
3221 // CHECK-ERROR-NEXT: ^
3227 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3228 // CHECK-ERROR-NEXT: msr daifset, x4
3229 // CHECK-ERROR-NEXT: ^
3230 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3231 // CHECK-ERROR-NEXT: msr spsel, #-1
3232 // CHECK-ERROR-NEXT: ^
3233 // CHECK-ERROR-NEXT: error: {{expected comma before next operand|unexpected token in argument list}}
3234 // CHECK-ERROR-NEXT: msr spsel #-1
3235 // CHECK-ERROR-NEXT: ^
3236 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 15]
3237 // CHECK-ERROR-NEXT: msr daifclr, #16
3238 // CHECK-ERROR-NEXT: ^
3240 sys #8, c1, c2, #7, x9
3241 sys #3, c16, c2, #3, x10
3242 sys #2, c11, c16, #5
3243 sys #4, c9, c8, #8, xzr
3244 sysl x11, #8, c1, c2, #7
3245 sysl x13, #3, c16, c2, #3
3246 sysl x9, #2, c11, c16, #5
3247 sysl x4, #4, c9, c8, #8
3248 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3249 // CHECK-ERROR-NEXT: sys #8, c1, c2, #7, x9
3250 // CHECK-ERROR-NEXT: ^
3251 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3252 // CHECK-ERROR-NEXT: sys #3, c16, c2, #3, x10
3253 // CHECK-ERROR-NEXT: ^
3254 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3255 // CHECK-ERROR-NEXT: sys #2, c11, c16, #5
3256 // CHECK-ERROR-NEXT: ^
3257 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3258 // CHECK-ERROR-NEXT: sys #4, c9, c8, #8, xzr
3259 // CHECK-ERROR-NEXT: ^
3260 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3261 // CHECK-ERROR-NEXT: sysl x11, #8, c1, c2, #7
3262 // CHECK-ERROR-NEXT: ^
3263 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3264 // CHECK-ERROR-NEXT: sysl x13, #3, c16, c2, #3
3265 // CHECK-ERROR-NEXT: ^
3266 // CHECK-ERROR-NEXT: error: Expected cN operand where 0 <= N <= 15
3267 // CHECK-ERROR-NEXT: sysl x9, #2, c11, c16, #5
3268 // CHECK-ERROR-NEXT: ^
3269 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 7]
3270 // CHECK-ERROR-NEXT: sysl x4, #4, c9, c8, #8
3271 // CHECK-ERROR-NEXT: ^
3276 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op does not use a register
3277 // CHECK-ERROR-NEXT: ic ialluis, x2
3278 // CHECK-ERROR-NEXT: ^
3279 // CHECK-ERROR-AARCH64-NEXT: error: operand specifier not recognised
3280 // CHECK-ERROR-ARM64-NEXT: error: invalid operand for IC instruction
3281 // CHECK-ERROR-NEXT: ic allu, x7
3282 // CHECK-ERROR-NEXT: ^
3283 // CHECK-ERROR-NEXT: error: specified {{IC|ic}} op requires a register
3284 // CHECK-ERROR-NEXT: ic ivau
3285 // CHECK-ERROR-NEXT: ^
3301 tlbi VMALLS12E1IS, xzr
3317 tlbi VMALLS12E1, x15
3319 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3320 // CHECK-ERROR-NEXT: tlbi IPAS2E1IS
3321 // CHECK-ERROR-NEXT: ^
3322 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3323 // CHECK-ERROR-NEXT: tlbi IPAS2LE1IS
3324 // CHECK-ERROR-NEXT: ^
3325 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3326 // CHECK-ERROR-NEXT: tlbi VMALLE1IS, x12
3327 // CHECK-ERROR-NEXT: ^
3328 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3329 // CHECK-ERROR-NEXT: tlbi ALLE2IS, x11
3330 // CHECK-ERROR-NEXT: ^
3331 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3332 // CHECK-ERROR-NEXT: tlbi ALLE3IS, x20
3333 // CHECK-ERROR-NEXT: ^
3334 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3335 // CHECK-ERROR-NEXT: tlbi VAE1IS
3336 // CHECK-ERROR-NEXT: ^
3337 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3338 // CHECK-ERROR-NEXT: tlbi VAE2IS
3339 // CHECK-ERROR-NEXT: ^
3340 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3341 // CHECK-ERROR-NEXT: tlbi VAE3IS
3342 // CHECK-ERROR-NEXT: ^
3343 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3344 // CHECK-ERROR-NEXT: tlbi ASIDE1IS
3345 // CHECK-ERROR-NEXT: ^
3346 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3347 // CHECK-ERROR-NEXT: tlbi VAAE1IS
3348 // CHECK-ERROR-NEXT: ^
3349 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3350 // CHECK-ERROR-NEXT: tlbi ALLE1IS, x0
3351 // CHECK-ERROR-NEXT: ^
3352 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3353 // CHECK-ERROR-NEXT: tlbi VALE1IS
3354 // CHECK-ERROR-NEXT: ^
3355 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3356 // CHECK-ERROR-NEXT: tlbi VALE2IS
3357 // CHECK-ERROR-NEXT: ^
3358 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3359 // CHECK-ERROR-NEXT: tlbi VALE3IS
3360 // CHECK-ERROR-NEXT: ^
3361 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3362 // CHECK-ERROR-NEXT: tlbi VMALLS12E1IS, xzr
3363 // CHECK-ERROR-NEXT: ^
3364 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3365 // CHECK-ERROR-NEXT: tlbi VAALE1IS
3366 // CHECK-ERROR-NEXT: ^
3367 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3368 // CHECK-ERROR-NEXT: tlbi IPAS2E1
3369 // CHECK-ERROR-NEXT: ^
3370 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3371 // CHECK-ERROR-NEXT: tlbi IPAS2LE1
3372 // CHECK-ERROR-NEXT: ^
3373 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3374 // CHECK-ERROR-NEXT: tlbi VMALLE1, x9
3375 // CHECK-ERROR-NEXT: ^
3376 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3377 // CHECK-ERROR-NEXT: tlbi ALLE2, x10
3378 // CHECK-ERROR-NEXT: ^
3379 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3380 // CHECK-ERROR-NEXT: tlbi ALLE3, x11
3381 // CHECK-ERROR-NEXT: ^
3382 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3383 // CHECK-ERROR-NEXT: tlbi VAE1
3384 // CHECK-ERROR-NEXT: ^
3385 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3386 // CHECK-ERROR-NEXT: tlbi VAE2
3387 // CHECK-ERROR-NEXT: ^
3388 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3389 // CHECK-ERROR-NEXT: tlbi VAE3
3390 // CHECK-ERROR-NEXT: ^
3391 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3392 // CHECK-ERROR-NEXT: tlbi ASIDE1
3393 // CHECK-ERROR-NEXT: ^
3394 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3395 // CHECK-ERROR-NEXT: tlbi VAAE1
3396 // CHECK-ERROR-NEXT: ^
3397 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3398 // CHECK-ERROR-NEXT: tlbi ALLE1, x25
3399 // CHECK-ERROR-NEXT: ^
3400 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3401 // CHECK-ERROR-NEXT: tlbi VALE1
3402 // CHECK-ERROR-NEXT: ^
3403 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3404 // CHECK-ERROR-NEXT: tlbi VALE2
3405 // CHECK-ERROR-NEXT: ^
3406 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3407 // CHECK-ERROR-NEXT: tlbi VALE3
3408 // CHECK-ERROR-NEXT: ^
3409 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op does not use a register
3410 // CHECK-ERROR-NEXT: tlbi VMALLS12E1, x15
3411 // CHECK-ERROR-NEXT: ^
3412 // CHECK-ERROR-NEXT: error: specified {{TLBI|tlbi}} op requires a register
3413 // CHECK-ERROR-NEXT: tlbi VAALE1
3414 // CHECK-ERROR-NEXT: ^
3416 // For the MSR/MRS instructions, first make sure read-only and
3417 // write-only registers actually are.
3419 msr DBGDTRRX_EL0, x12
3422 msr DBGAUTHSTATUS_EL1, x12
3431 msr ID_PFR0_EL1, x12
3432 msr ID_PFR1_EL1, x12
3433 msr ID_DFR0_EL1, x12
3434 msr ID_AFR0_EL1, x12
3435 msr ID_MMFR0_EL1, x12
3436 msr ID_MMFR1_EL1, x12
3437 msr ID_MMFR2_EL1, x12
3438 msr ID_MMFR3_EL1, x12
3439 msr ID_ISAR0_EL1, x12
3440 msr ID_ISAR1_EL1, x12
3441 msr ID_ISAR2_EL1, x12
3442 msr ID_ISAR3_EL1, x12
3443 msr ID_ISAR4_EL1, x12
3444 msr ID_ISAR5_EL1, x12
3448 msr ID_AA64PFR0_EL1, x12
3449 msr ID_AA64PFR1_EL1, x12
3450 msr ID_AA64DFR0_EL1, x12
3451 msr ID_AA64DFR1_EL1, x12
3452 msr ID_AA64AFR0_EL1, x12
3453 msr ID_AA64AFR1_EL1, x12
3454 msr ID_AA64ISAR0_EL1, x12
3455 msr ID_AA64ISAR1_EL1, x12
3456 msr ID_AA64MMFR0_EL1, x12
3457 msr ID_AA64MMFR1_EL1, x12
3458 msr PMCEID0_EL0, x12
3459 msr PMCEID1_EL0, x12
3466 msr PMEVCNTR31_EL0, x12
3467 msr PMEVTYPER31_EL0, x12
3468 // CHECK-ERROR: error: expected writable system register or pstate
3469 // CHECK-ERROR-NEXT: msr MDCCSR_EL0, x12
3470 // CHECK-ERROR-NEXT: ^
3471 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3472 // CHECK-ERROR-NEXT: msr DBGDTRRX_EL0, x12
3473 // CHECK-ERROR-NEXT: ^
3474 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3475 // CHECK-ERROR-NEXT: msr MDRAR_EL1, x12
3476 // CHECK-ERROR-NEXT: ^
3477 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3478 // CHECK-ERROR-NEXT: msr OSLSR_EL1, x12
3479 // CHECK-ERROR-NEXT: ^
3480 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3481 // CHECK-ERROR-NEXT: msr DBGAUTHSTATUS_EL1, x12
3482 // CHECK-ERROR-NEXT: ^
3483 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3484 // CHECK-ERROR-NEXT: msr MIDR_EL1, x12
3485 // CHECK-ERROR-NEXT: ^
3486 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3487 // CHECK-ERROR-NEXT: msr CCSIDR_EL1, x12
3488 // CHECK-ERROR-NEXT: ^
3489 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3490 // CHECK-ERROR-NEXT: msr CLIDR_EL1, x12
3491 // CHECK-ERROR-NEXT: ^
3492 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3493 // CHECK-ERROR-NEXT: msr CTR_EL0, x12
3494 // CHECK-ERROR-NEXT: ^
3495 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3496 // CHECK-ERROR-NEXT: msr MPIDR_EL1, x12
3497 // CHECK-ERROR-NEXT: ^
3498 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3499 // CHECK-ERROR-NEXT: msr REVIDR_EL1, x12
3500 // CHECK-ERROR-NEXT: ^
3501 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3502 // CHECK-ERROR-NEXT: msr AIDR_EL1, x12
3503 // CHECK-ERROR-NEXT: ^
3504 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3505 // CHECK-ERROR-NEXT: msr DCZID_EL0, x12
3506 // CHECK-ERROR-NEXT: ^
3507 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3508 // CHECK-ERROR-NEXT: msr ID_PFR0_EL1, x12
3509 // CHECK-ERROR-NEXT: ^
3510 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3511 // CHECK-ERROR-NEXT: msr ID_PFR1_EL1, x12
3512 // CHECK-ERROR-NEXT: ^
3513 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3514 // CHECK-ERROR-NEXT: msr ID_DFR0_EL1, x12
3515 // CHECK-ERROR-NEXT: ^
3516 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3517 // CHECK-ERROR-NEXT: msr ID_AFR0_EL1, x12
3518 // CHECK-ERROR-NEXT: ^
3519 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3520 // CHECK-ERROR-NEXT: msr ID_MMFR0_EL1, x12
3521 // CHECK-ERROR-NEXT: ^
3522 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3523 // CHECK-ERROR-NEXT: msr ID_MMFR1_EL1, x12
3524 // CHECK-ERROR-NEXT: ^
3525 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3526 // CHECK-ERROR-NEXT: msr ID_MMFR2_EL1, x12
3527 // CHECK-ERROR-NEXT: ^
3528 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3529 // CHECK-ERROR-NEXT: msr ID_MMFR3_EL1, x12
3530 // CHECK-ERROR-NEXT: ^
3531 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3532 // CHECK-ERROR-NEXT: msr ID_ISAR0_EL1, x12
3533 // CHECK-ERROR-NEXT: ^
3534 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3535 // CHECK-ERROR-NEXT: msr ID_ISAR1_EL1, x12
3536 // CHECK-ERROR-NEXT: ^
3537 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3538 // CHECK-ERROR-NEXT: msr ID_ISAR2_EL1, x12
3539 // CHECK-ERROR-NEXT: ^
3540 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3541 // CHECK-ERROR-NEXT: msr ID_ISAR3_EL1, x12
3542 // CHECK-ERROR-NEXT: ^
3543 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3544 // CHECK-ERROR-NEXT: msr ID_ISAR4_EL1, x12
3545 // CHECK-ERROR-NEXT: ^
3546 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3547 // CHECK-ERROR-NEXT: msr ID_ISAR5_EL1, x12
3548 // CHECK-ERROR-NEXT: ^
3549 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3550 // CHECK-ERROR-NEXT: msr MVFR0_EL1, x12
3551 // CHECK-ERROR-NEXT: ^
3552 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3553 // CHECK-ERROR-NEXT: msr MVFR1_EL1, x12
3554 // CHECK-ERROR-NEXT: ^
3555 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3556 // CHECK-ERROR-NEXT: msr MVFR2_EL1, x12
3557 // CHECK-ERROR-NEXT: ^
3558 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3559 // CHECK-ERROR-NEXT: msr ID_AA64PFR0_EL1, x12
3560 // CHECK-ERROR-NEXT: ^
3561 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3562 // CHECK-ERROR-NEXT: msr ID_AA64PFR1_EL1, x12
3563 // CHECK-ERROR-NEXT: ^
3564 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3565 // CHECK-ERROR-NEXT: msr ID_AA64DFR0_EL1, x12
3566 // CHECK-ERROR-NEXT: ^
3567 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3568 // CHECK-ERROR-NEXT: msr ID_AA64DFR1_EL1, x12
3569 // CHECK-ERROR-NEXT: ^
3570 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3571 // CHECK-ERROR-NEXT: msr ID_AA64AFR0_EL1, x12
3572 // CHECK-ERROR-NEXT: ^
3573 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3574 // CHECK-ERROR-NEXT: msr ID_AA64AFR1_EL1, x12
3575 // CHECK-ERROR-NEXT: ^
3576 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3577 // CHECK-ERROR-NEXT: msr ID_AA64ISAR0_EL1, x12
3578 // CHECK-ERROR-NEXT: ^
3579 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3580 // CHECK-ERROR-NEXT: msr ID_AA64ISAR1_EL1, x12
3581 // CHECK-ERROR-NEXT: ^
3582 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3583 // CHECK-ERROR-NEXT: msr ID_AA64MMFR0_EL1, x12
3584 // CHECK-ERROR-NEXT: ^
3585 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3586 // CHECK-ERROR-NEXT: msr ID_AA64MMFR1_EL1, x12
3587 // CHECK-ERROR-NEXT: ^
3588 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3589 // CHECK-ERROR-NEXT: msr PMCEID0_EL0, x12
3590 // CHECK-ERROR-NEXT: ^
3591 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3592 // CHECK-ERROR-NEXT: msr PMCEID1_EL0, x12
3593 // CHECK-ERROR-NEXT: ^
3594 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3595 // CHECK-ERROR-NEXT: msr RVBAR_EL1, x12
3596 // CHECK-ERROR-NEXT: ^
3597 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3598 // CHECK-ERROR-NEXT: msr RVBAR_EL2, x12
3599 // CHECK-ERROR-NEXT: ^
3600 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3601 // CHECK-ERROR-NEXT: msr RVBAR_EL3, x12
3602 // CHECK-ERROR-NEXT: ^
3603 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3604 // CHECK-ERROR-NEXT: msr ISR_EL1, x12
3605 // CHECK-ERROR-NEXT: ^
3606 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3607 // CHECK-ERROR-NEXT: msr CNTPCT_EL0, x12
3608 // CHECK-ERROR-NEXT: ^
3609 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3610 // CHECK-ERROR-NEXT: msr CNTVCT_EL0, x12
3611 // CHECK-ERROR-NEXT: ^
3612 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3613 // CHECK-ERROR-NEXT: msr PMEVCNTR31_EL0, x12
3614 // CHECK-ERROR-NEXT: ^
3615 // CHECK-ERROR-NEXT: error: expected writable system register or pstate
3616 // CHECK-ERROR-NEXT: msr PMEVTYPER31_EL0, x12
3617 // CHECK-ERROR-NEXT: ^
3619 mrs x9, DBGDTRTX_EL0
3622 mrs x9, PMEVCNTR31_EL0
3623 mrs x9, PMEVTYPER31_EL0
3624 // CHECK-ERROR: error: expected readable system register
3625 // CHECK-ERROR-NEXT: mrs x9, DBGDTRTX_EL0
3626 // CHECK-ERROR-NEXT: ^
3627 // CHECK-ERROR-NEXT: error: expected readable system register
3628 // CHECK-ERROR-NEXT: mrs x9, OSLAR_EL1
3629 // CHECK-ERROR-NEXT: ^
3630 // CHECK-ERROR-NEXT: error: expected readable system register
3631 // CHECK-ERROR-NEXT: mrs x9, PMSWINC_EL0
3632 // CHECK-ERROR-NEXT: ^
3633 // CHECK-ERROR-NEXT: error: expected readable system register
3634 // CHECK-ERROR-NEXT: mrs x9, PMEVCNTR31_EL0
3635 // CHECK-ERROR-NEXT: ^
3636 // CHECK-ERROR-NEXT: error: expected readable system register
3637 // CHECK-ERROR-NEXT: mrs x9, PMEVTYPER31_EL0
3638 // CHECK-ERROR-NEXT: ^
3640 // Now check some invalid generic names
3641 mrs xzr, s2_5_c11_c13_2
3642 mrs x12, s3_8_c11_c13_2
3643 mrs x13, s3_3_c12_c13_2
3644 mrs x19, s3_2_c15_c16_2
3645 mrs x30, s3_2_c15_c1_8
3646 // CHECK-ERROR-NEXT: error: expected readable system register
3647 // CHECK-ERROR-NEXT: mrs xzr, s2_5_c11_c13_2
3648 // CHECK-ERROR-NEXT: ^
3649 // CHECK-ERROR-NEXT: error: expected readable system register
3650 // CHECK-ERROR-NEXT: mrs x12, s3_8_c11_c13_2
3651 // CHECK-ERROR-NEXT: ^
3652 // CHECK-ERROR-NEXT: error: expected readable system register
3653 // CHECK-ERROR-NEXT: mrs x13, s3_3_c12_c13_2
3654 // CHECK-ERROR-NEXT: ^
3655 // CHECK-ERROR-NEXT: error: expected readable system register
3656 // CHECK-ERROR-NEXT: mrs x19, s3_2_c15_c16_2
3657 // CHECK-ERROR-NEXT: ^
3658 // CHECK-ERROR-NEXT: error: expected readable system register
3659 // CHECK-ERROR-NEXT: mrs x30, s3_2_c15_c1_8
3660 // CHECK-ERROR-NEXT: ^
3662 //------------------------------------------------------------------------------
3663 // Test and branch (immediate)
3664 //------------------------------------------------------------------------------
3667 tbz w3, #32, nowhere
3670 // CHECK-ERROR: error: {{expected|immediate must be an}} integer in range [0, 31]
3671 // CHECK-ERROR-NEXT: tbz w3, #-1, addr
3672 // CHECK-ERROR-NEXT: ^
3673 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3674 // CHECK-ERROR-NEXT: tbz w3, #32, nowhere
3675 // CHECK-ERROR-NEXT: ^
3676 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3677 // CHECK-ERROR-NEXT: tbz x9, #-1, there
3678 // CHECK-ERROR-NEXT: ^
3679 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3680 // CHECK-ERROR-NEXT: tbz x20, #64, dont
3681 // CHECK-ERROR-NEXT: ^
3684 tbnz w3, #32, nowhere
3687 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3688 // CHECK-ERROR-NEXT: tbnz w3, #-1, addr
3689 // CHECK-ERROR-NEXT: ^
3690 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 31]
3691 // CHECK-ERROR-NEXT: tbnz w3, #32, nowhere
3692 // CHECK-ERROR-NEXT: ^
3693 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3694 // CHECK-ERROR-NEXT: tbnz x9, #-1, there
3695 // CHECK-ERROR-NEXT: ^
3696 // CHECK-ERROR-NEXT: error: {{expected|immediate must be an}} integer in range [0, 63]
3697 // CHECK-ERROR-NEXT: tbnz x20, #64, dont
3699 //------------------------------------------------------------------------------
3700 // Unconditional branch (immediate)
3701 //------------------------------------------------------------------------------
3706 // CHECK-ERROR: error: expected label or encodable integer pc offset
3707 // CHECK-ERROR-NEXT: b #134217728
3708 // CHECK-ERROR-NEXT: ^
3709 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3710 // CHECK-ERROR-NEXT: b #-134217732
3711 // CHECK-ERROR-NEXT: ^
3712 // CHECK-ERROR-NEXT: error: expected label or encodable integer pc offset
3713 // CHECK-ERROR-NEXT: b #1
3714 // CHECK-ERROR-NEXT: ^
3716 //------------------------------------------------------------------------------
3717 // Unconditional branch (register)
3718 //------------------------------------------------------------------------------
3722 // CHECK-ERROR: error: invalid operand for instruction
3723 // CHECK-ERROR-NEXT: br w2
3724 // CHECK-ERROR-NEXT: ^
3725 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3726 // CHECK-ERROR-NEXT: br sp
3727 // CHECK-ERROR-NEXT: ^
3729 //// These ones shouldn't allow any registers
3732 // CHECK-ERROR: error: invalid operand for instruction
3733 // CHECK-ERROR-NEXT: eret x2
3734 // CHECK-ERROR-NEXT: ^
3735 // CHECK-ERROR-NEXT: error: invalid operand for instruction
3736 // CHECK-ERROR-NEXT: drps x2
3737 // CHECK-ERROR-NEXT: ^