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