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