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