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