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