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