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