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