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