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