[ARM] Allow SP in rGPR, starting from ARMv8
[oota-llvm.git] / test / MC / ARM / diagnostics.s
1 @ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t
2 @ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V7 < %t %s
3 @ RUN: not llvm-mc -triple=armv8 < %s 2> %t
4 @ RUN: FileCheck --check-prefix=CHECK-ERRORS --check-prefix=CHECK-ERRORS-V8 < %t %s
5
6 @ Check for various assembly diagnostic messages on invalid input.
7
8 @ 's' bit on an instruction that can't accept it.
9         mlss r1, r2, r3, r4
10 @ CHECK-ERRORS: error: instruction 'mls' can not set flags,
11 @ CHECK-ERRORS: but 's' suffix specified
12
13
14         @ Out of range shift immediate values.
15         adc r1, r2, r3, lsl #invalid
16         adc r4, r5, r6, lsl #-1
17         adc r4, r5, r6, lsl #32
18         adc r4, r5, r6, lsr #-1
19         adc r4, r5, r6, lsr #33
20         adc r4, r5, r6, asr #-1
21         adc r4, r5, r6, asr #33
22         adc r4, r5, r6, ror #-1
23         adc r4, r5, r6, ror #32
24
25 @ CHECK-ERRORS: error: invalid immediate shift value
26 @ CHECK-ERRORS:         adc r1, r2, r3, lsl #invalid
27 @ CHECK-ERRORS:                              ^
28 @ CHECK-ERRORS: error: immediate shift value out of range
29 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #-1
30 @ CHECK-ERRORS:                              ^
31 @ CHECK-ERRORS: error: immediate shift value out of range
32 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #32
33 @ CHECK-ERRORS:                              ^
34 @ CHECK-ERRORS: error: immediate shift value out of range
35 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #-1
36 @ CHECK-ERRORS:                              ^
37 @ CHECK-ERRORS: error: immediate shift value out of range
38 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #33
39 @ CHECK-ERRORS:                              ^
40 @ CHECK-ERRORS: error: immediate shift value out of range
41 @ CHECK-ERRORS:         adc r4, r5, r6, asr #-1
42 @ CHECK-ERRORS:                              ^
43 @ CHECK-ERRORS: error: immediate shift value out of range
44 @ CHECK-ERRORS:         adc r4, r5, r6, asr #33
45 @ CHECK-ERRORS:                              ^
46 @ CHECK-ERRORS: error: immediate shift value out of range
47 @ CHECK-ERRORS:         adc r4, r5, r6, ror #-1
48 @ CHECK-ERRORS:                              ^
49 @ CHECK-ERRORS: error: immediate shift value out of range
50 @ CHECK-ERRORS:         adc r4, r5, r6, ror #32
51
52         @ Out of range shift immediate values for load/store.
53         str r1, [r2, r3, lsl #invalid]
54         ldr r4, [r5], r6, lsl #-1
55         pld r4, [r5, r6, lsl #32]
56         str r4, [r5], r6, lsr #-1
57         ldr r4, [r5, r6, lsr #33]
58         pld r4, [r5, r6, asr #-1]
59         str r4, [r5, r6, asr #33]
60         ldr r4, [r5, r6, ror #-1]
61         pld r4, [r5, r6, ror #32]
62         pld r4, [r5, r6, rrx #0]
63
64 @ CHECK-ERRORS: error: shift amount must be an immediate
65 @ CHECK-ERRORS:         str r1, [r2, r3, lsl #invalid]
66 @ CHECK-ERRORS:                              ^
67 @ CHECK-ERRORS: error: immediate shift value out of range
68 @ CHECK-ERRORS:         ldr r4, [r5], r6, lsl #-1
69 @ CHECK-ERRORS:                              ^
70 @ CHECK-ERRORS: error: immediate shift value out of range
71 @ CHECK-ERRORS:         pld r4, [r5, r6, lsl #32]
72 @ CHECK-ERRORS:                              ^
73 @ CHECK-ERRORS: error: immediate shift value out of range
74 @ CHECK-ERRORS:         str r4, [r5], r6, lsr #-1
75 @ CHECK-ERRORS:                              ^
76 @ CHECK-ERRORS: error: immediate shift value out of range
77 @ CHECK-ERRORS:         ldr r4, [r5, r6, lsr #33]
78 @ CHECK-ERRORS:                              ^
79 @ CHECK-ERRORS: error: immediate shift value out of range
80 @ CHECK-ERRORS:         pld r4, [r5, r6, asr #-1]
81 @ CHECK-ERRORS:                              ^
82 @ CHECK-ERRORS: error: immediate shift value out of range
83 @ CHECK-ERRORS:         str r4, [r5, r6, asr #33]
84 @ CHECK-ERRORS:                              ^
85 @ CHECK-ERRORS: error: immediate shift value out of range
86 @ CHECK-ERRORS:         ldr r4, [r5, r6, ror #-1]
87 @ CHECK-ERRORS:                              ^
88 @ CHECK-ERRORS: error: immediate shift value out of range
89 @ CHECK-ERRORS:         pld r4, [r5, r6, ror #32]
90 @ CHECK-ERRORS: error: ']' expected
91 @ CHECK-ERRORS:         pld r4, [r5, r6, rrx #0]
92         
93         @ Out of range 16-bit immediate on BKPT
94         bkpt #65536
95
96 @ CHECK-ERRORS: error: invalid operand for instruction
97
98         @ Out of range immediates for v8 HLT instruction.
99         hlt #65536
100         hlt #-1
101 @CHECK-ERRORS: error: invalid operand for instruction
102 @CHECK-ERRORS:         hlt #65536
103 @CHECK-ERRORS:              ^
104 @CHECK-ERRORS: error: invalid operand for instruction
105 @CHECK-ERRORS:         hlt #-1
106 @CHECK-ERRORS:              ^
107
108         @ Illegal condition code for v8 HLT instruction.
109         hlteq #2
110         hltlt #23
111 @CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified
112 @CHECK-ERRORS:        hlteq #2
113 @CHECK-ERRORS:        ^
114 @CHECK-ERRORS: error: instruction 'hlt' is not predicable, but condition code specified
115 @CHECK-ERRORS:        hltlt #23
116 @CHECK-ERRORS:        ^
117
118         @ Out of range 4 and 3 bit immediates on CDP[2]
119
120         @ Out of range immediates for CDP/CDP2
121         cdp  p7, #2, c1, c1, c1, #8
122         cdp  p7, #1, c1, c1, c1, #8
123         cdp2  p7, #2, c1, c1, c1, #8
124         cdp2  p7, #1, c1, c1, c1, #8
125
126 @ CHECK-ERRORS: error: invalid operand for instruction
127 @ CHECK-ERRORS: error: invalid operand for instruction
128 @ CHECK-ERRORS: error: invalid operand for instruction
129 @ CHECK-ERRORS: error: invalid operand for instruction
130
131         @ Out of range immediates for DBG
132         dbg #-1
133         dbg #16
134
135 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
136 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
137 @  Double-check that we're synced up with the right diagnostics.
138 @ CHECK-ERRORS: dbg #16
139
140         @ Out of range immediate for MCR/MCR2/MCRR/MCRR2
141         mcr  p7, #8, r5, c1, c1, #4
142         mcr  p7, #2, r5, c1, c1, #8
143         mcr2  p7, #8, r5, c1, c1, #4
144         mcr2  p7, #1, r5, c1, c1, #8
145         mcrr  p7, #16, r5, r4, c1
146         mcrr2  p7, #16, r5, r4, c1
147 @ CHECK-ERRORS: error: invalid operand for instruction
148 @ CHECK-ERRORS: error: invalid operand for instruction
149 @ CHECK-ERRORS: error: invalid operand for instruction
150 @ CHECK-ERRORS: error: invalid operand for instruction
151 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
152 @ CHECK-ERRORS-V7: error: immediate operand must be in the range [0,15]
153 @ CHECK-ERRORS-V8: error: invalid operand for instruction
154
155         @ p10 and p11 are reserved for NEON
156         mcr p10, #2, r5, c1, c1, #4
157         mcrr p11, #8, r5, r4, c1
158 @ CHECK-ERRORS: error: invalid operand for instruction
159 @ CHECK-ERRORS: error: invalid operand for instruction
160
161         @ Out of range immediate for MOV
162         movw r9, 0x10000
163 @ CHECK-ERRORS: error: invalid operand for instruction
164
165         @ Invalid 's' bit usage for MOVW
166         movs r6, #0xffff
167         movwseq r9, #0xffff
168 @ CHECK-ERRORS: error: invalid operand for instruction
169 @ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
170
171         @ Out of range immediate for MOVT
172         movt r9, 0x10000
173 @ CHECK-ERRORS: error: invalid operand for instruction
174
175         @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
176         mrc  p14, #8, r1, c1, c2, #4
177         mrc  p14, #1, r1, c1, c2, #8
178         mrc2  p14, #8, r1, c1, c2, #4
179         mrc2  p14, #0, r1, c1, c2, #9
180         mrrc  p7, #16, r5, r4, c1
181         mrrc2  p7, #17, r5, r4, c1
182 @ CHECK-ERRORS: error: invalid operand for instruction
183 @ CHECK-ERRORS: error: invalid operand for instruction
184 @ CHECK-ERRORS: error: invalid operand for instruction
185 @ CHECK-ERRORS: error: invalid operand for instruction
186 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
187 @ CHECK-ERRORS-V7: error: immediate operand must be in the range [0,15]
188 @ CHECK-ERRORS-V8: error: invalid operand for instruction
189
190         @ Shifter operand validation for PKH instructions.
191         pkhbt r2, r2, r3, lsl #-1
192         pkhbt r2, r2, r3, lsl #32
193         pkhtb r2, r2, r3, asr #0
194         pkhtb r2, r2, r3, asr #33
195         pkhbt r2, r2, r3, asr #3
196         pkhtb r2, r2, r3, lsl #3
197
198 @ CHECK-ERRORS: error: immediate value out of range
199 @ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #-1
200 @ CHECK-ERRORS:                                ^
201 @ CHECK-ERRORS: error: immediate value out of range
202 @ CHECK-ERRORS:         pkhbt r2, r2, r3, lsl #32
203 @ CHECK-ERRORS:                                ^
204 @ CHECK-ERRORS: error: immediate value out of range
205 @ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #0
206 @ CHECK-ERRORS:                                ^
207 @ CHECK-ERRORS: error: immediate value out of range
208 @ CHECK-ERRORS:         pkhtb r2, r2, r3, asr #33
209 @ CHECK-ERRORS:                                ^
210 @ CHECK-ERRORS: error: lsl operand expected.
211 @ CHECK-ERRORS:         pkhbt r2, r2, r3, asr #3
212 @ CHECK-ERRORS:                           ^
213 @ CHECK-ERRORS: error: asr operand expected.
214 @ CHECK-ERRORS:         pkhtb r2, r2, r3, lsl #3
215 @ CHECK-ERRORS:                           ^
216
217
218         @ bad values for SETEND
219         setendne be
220         setend me
221         setend 1
222
223 @ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
224 @ CHECK-ERRORS:         setendne be
225 @ CHECK-ERRORS:         ^
226 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
227 @ CHECK-ERRORS:         setend me
228 @ CHECK-ERRORS:                  ^
229 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
230 @ CHECK-ERRORS:         setend 1
231 @ CHECK-ERRORS:                ^
232
233
234         @ Out of range immediates and bad shift types for SSAT
235         ssat    r8, #0, r10, lsl #8
236         ssat    r8, #33, r10, lsl #8
237         ssat    r8, #1, r10, lsl #-1
238         ssat    r8, #1, r10, lsl #32
239         ssat    r8, #1, r10, asr #0
240         ssat    r8, #1, r10, asr #33
241         ssat    r8, #1, r10, lsr #5
242         ssat    r8, #1, r10, lsl fred
243         ssat    r8, #1, r10, lsl #fred
244
245 @ CHECK-ERRORS: error: invalid operand for instruction
246 @ CHECK-ERRORS:         ssat    r8, #0, r10, lsl #8
247 @ CHECK-ERRORS:                     ^
248 @ CHECK-ERRORS: error: invalid operand for instruction
249 @ CHECK-ERRORS:         ssat    r8, #33, r10, lsl #8
250 @ CHECK-ERRORS:                     ^
251 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
252 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl #-1
253 @ CHECK-ERRORS:                                   ^
254 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
255 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl #32
256 @ CHECK-ERRORS:                                   ^
257 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
258 @ CHECK-ERRORS:         ssat    r8, #1, r10, asr #0
259 @ CHECK-ERRORS:                                   ^
260 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
261 @ CHECK-ERRORS:         ssat    r8, #1, r10, asr #33
262 @ CHECK-ERRORS:                                   ^
263 @ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
264 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsr #5
265 @ CHECK-ERRORS:                              ^
266 @ CHECK-ERRORS: error: '#' expected
267 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl fred
268 @ CHECK-ERRORS:                                  ^
269 @ CHECK-ERRORS: error: shift amount must be an immediate
270 @ CHECK-ERRORS:         ssat    r8, #1, r10, lsl #fred
271 @ CHECK-ERRORS:                                   ^
272
273         @ Out of range immediates for SSAT16
274         ssat16  r2, #0, r7
275         ssat16  r3, #17, r5
276
277 @ CHECK-ERRORS: error: invalid operand for instruction
278 @ CHECK-ERRORS:         ssat16  r2, #0, r7
279 @ CHECK-ERRORS:                     ^
280 @ CHECK-ERRORS: error: invalid operand for instruction
281 @ CHECK-ERRORS:         ssat16  r3, #17, r5
282 @ CHECK-ERRORS:                     ^
283
284
285         @ Out of order STM registers
286         stmda sp!, {r5, r2}
287
288 @ CHECK-ERRORS: warning: register list not in ascending order
289 @ CHECK-ERRORS:         stmda     sp!, {r5, r2}
290 @ CHECK-ERRORS:                            ^
291
292
293         @ Out of range immediate on SVC
294         svc #0x1000000
295 @ CHECK-ERRORS: error: invalid operand for instruction
296 @ CHECK-ERRORS:   svc #0x1000000
297 @ CHECK-ERRORS:       ^
298
299
300         @ Out of order Rt/Rt2 operands for ldrexd/strexd
301         ldrexd  r4, r3, [r8]
302         strexd  r6, r5, r3, [r8]
303
304 @ CHECK-ERRORS: error: destination operands must be sequential
305 @ CHECK-ERRORS:         ldrexd  r4, r3, [r8]
306 @ CHECK-ERRORS:                     ^
307 @ CHECK-ERRORS: error: source operands must be sequential
308 @ CHECK-ERRORS:         strexd  r6, r5, r3, [r8]
309 @ CHECK-ERRORS:                         ^
310
311         @ Illegal rotate operators for extend instructions
312         sxtb r8, r3, #8
313         sxtb r8, r3, ror 24
314         sxtb r8, r3, ror #8 -
315         sxtab r3, r8, r3, ror #(fred - wilma)
316         sxtab r7, r8, r3, ror #25
317         sxtah r9, r3, r3, ror #-8
318         sxtb16ge r2, r3, lsr #24
319
320 @ CHECK-ERRORS: error: invalid operand for instruction
321 @ CHECK-ERRORS:         sxtb r8, r3, #8
322 @ CHECK-ERRORS:                      ^
323 @ CHECK-ERRORS: error: '#' expected
324 @ CHECK-ERRORS:         sxtb r8, r3, ror 24
325 @ CHECK-ERRORS:                          ^
326 @ CHECK-ERRORS: error: unknown token in expression
327 @ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
328 @ CHECK-ERRORS:                              ^
329 @ CHECK-ERRORS: error: malformed rotate expression
330 @ CHECK-ERRORS:         sxtb r8, r3, ror #8 -
331 @ CHECK-ERRORS:                           ^
332 @ CHECK-ERRORS: error: rotate amount must be an immediate
333 @ CHECK-ERRORS:         sxtab r3, r8, r3, ror #(fred - wilma)
334 @ CHECK-ERRORS:                                ^
335 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
336 @ CHECK-ERRORS:         sxtab r7, r8, r3, ror #25
337 @ CHECK-ERRORS:                                ^
338 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
339 @ CHECK-ERRORS:         sxtah r9, r3, r3, ror #-8
340 @ CHECK-ERRORS:                                ^
341 @ CHECK-ERRORS: error: invalid operand for instruction
342 @ CHECK-ERRORS:         sxtb16ge r2, r3, lsr #24
343 @ CHECK-ERRORS:                          ^
344
345         @ Out of range width for SBFX/UBFX
346         sbfx r4, r5, #31, #2
347         ubfxgt r4, r5, #16, #17
348
349 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
350 @ CHECK-ERRORS:         sbfx r4, r5, #31, #2
351 @ CHECK-ERRORS:                           ^
352 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
353 @ CHECK-ERRORS:         ubfxgt r4, r5, #16, #17
354 @ CHECK-ERRORS:                             ^
355
356         @ Using pc for SBFX/UBFX
357         sbfx pc, r2, #1, #3
358         sbfx sp, pc, #4, #5
359         ubfx pc, r0, #0, #31
360         ubfx r14, pc, #1, #2
361 @ CHECK-ERRORS: error: invalid operand for instruction
362 @ CHECK-ERRORS:         sbfx pc, r2, #1, #3
363 @ CHECK-ERRORS:              ^
364 @ CHECK-ERRORS: error: invalid operand for instruction
365 @ CHECK-ERRORS:         sbfx sp, pc, #4, #5
366 @ CHECK-ERRORS:                  ^
367 @ CHECK-ERRORS: error: invalid operand for instruction
368 @ CHECK-ERRORS:         ubfx pc, r0, #0, #31
369 @ CHECK-ERRORS:              ^
370 @ CHECK-ERRORS: error: invalid operand for instruction
371 @ CHECK-ERRORS:         ubfx r14, pc, #1, #2
372 @ CHECK-ERRORS:                   ^
373
374         @ Out of order Rt/Rt2 operands for ldrd
375         ldrd  r4, r3, [r8]
376         ldrd  r4, r3, [r8, #8]!
377         ldrd  r4, r3, [r8], #8
378 @ CHECK-ERRORS: error: destination operands must be sequential
379 @ CHECK-ERRORS:         ldrd  r4, r3, [r8]
380 @ CHECK-ERRORS:                   ^
381 @ CHECK-ERRORS: error: destination operands must be sequential
382 @ CHECK-ERRORS:         ldrd  r4, r3, [r8, #8]!
383 @ CHECK-ERRORS:                   ^
384 @ CHECK-ERRORS: error: destination operands must be sequential
385 @ CHECK-ERRORS:         ldrd  r4, r3, [r8], #8
386 @ CHECK-ERRORS:                   ^
387
388
389         @ Bad register lists for VFP.
390         vpush {s0, s3}
391 @ CHECK-ERRORS: error: non-contiguous register range
392 @ CHECK-ERRORS:         vpush {s0, s3}
393 @ CHECK-ERRORS:                    ^
394
395         @ Out of range coprocessor option immediate.
396         ldc2 p2, c8, [r1], { 256 }
397         ldc2 p2, c8, [r1], { -1 }
398
399 @ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255]
400 @ CHECK-ERRORS-V7:         ldc2 p2, c8, [r1], { 256 }
401 @ CHECK-ERRORS-V7:                              ^
402 @ CHECK-ERRORS-V8: error: register expected
403 @ CHECK-ERRORS-V7: error: coprocessor option must be an immediate in range [0, 255]
404 @ CHECK-ERRORS-V7:         ldc2 p2, c8, [r1], { -1 }
405 @ CHECK-ERRORS-V7:                              ^
406 @ CHECK-ERRORS-V8: error: register expected
407
408         @ Bad CPS instruction format.
409         cps f,#1
410 @ CHECK-ERRORS: error: invalid operand for instruction
411 @ CHECK-ERRORS:         cps f,#1
412 @ CHECK-ERRORS:               ^
413
414         @ Bad operands for msr
415         msr #0, #0
416         msr foo, #0
417 @ CHECK-ERRORS: error: invalid operand for instruction
418 @ CHECK-ERRORS:         msr #0, #0
419 @ CHECK-ERRORS:             ^
420 @ CHECK-ERRORS: error: invalid operand for instruction
421 @ CHECK-ERRORS:         msr foo, #0
422 @ CHECK-ERRORS:             ^
423
424         isb #-1
425         isb #16
426 @ CHECK-ERRORS: error: immediate value out of range
427 @ CHECK-ERRORS: error: immediate value out of range
428
429         nop.n
430 @ CHECK-ERRORS: error: instruction with .n (narrow) qualifier not allowed in arm mode
431
432         dmbeq #5
433         dsble #15
434         isblo #7
435 @ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
436 @ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
437 @ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
438
439         dmblt
440         dsbne
441         isbeq
442 @ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
443 @ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
444 @ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
445
446         mcr2le  p7, #1, r5, c1, c1, #4
447         mcrr2ne p7, #15, r5, r4, c1
448         mrc2lo  p14, #0, r1, c1, c2, #4
449         mrrc2lo  p7, #1, r5, r4, c1
450         cdp2hi   p10, #0, c6, c12, c0, #7
451 @ CHECK-ERRORS: error: instruction 'mcr2' is not predicable, but condition code specified
452 @ CHECK-ERRORS: error: instruction 'mcrr2' is not predicable, but condition code specified
453 @ CHECK-ERRORS: error: instruction 'mrc2' is not predicable, but condition code specified
454 @ CHECK-ERRORS: error: instruction 'mrrc2' is not predicable, but condition code specified
455 @ CHECK-ERRORS: error: instruction 'cdp2' is not predicable, but condition code specified
456
457         bkpteq #7
458 @ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified
459
460         ldm r2!, {r2, r3}
461         ldmdb r2!, {r2, r3}
462         ldmda r2!, {r2, r3}
463         popeq {sp}
464 @ CHECK-ERRORS: error: writeback register not allowed in register list
465 @ CHECK-ERRORS: error: writeback register not allowed in register list
466 @ CHECK-ERRORS: error: writeback register not allowed in register list
467 @ CHECK-ERRORS: error: writeback register not allowed in register list
468
469         vrintz.f32.f32 s0, s1
470         vrintr.f32 s0, s1
471         vrintx.f64.f64 d2, d5
472         vrintz.f64 d10, d9
473         vrinta.f32.f32 s6, s7
474         vrintn.f32 s8, s9
475         vrintp.f64.f64 d10, d11
476         vrintm.f64 d12, d13
477 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
478 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
479 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
480 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
481 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
482 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
483 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
484 @ CHECK-ERRORS-V7: error: instruction requires: FPARMv8
485
486         stm sp!, {r0, pc}^
487         ldm sp!, {r0}^
488 @ CHECK-ERRORS: error: system STM cannot have writeback register
489 @ CHECK-ERRORS: error: writeback register only allowed on system LDM if PC in register-list
490
491 foo2:
492         mov r0, foo2
493         movw r0, foo2
494 @ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
495 @ CHECK-ERRORS:                 ^
496 @ CHECK-ERRORS: error: immediate expression for mov requires :lower16: or :upper16
497 @ CHECK-ERRORS:                  ^
498
499         str r0, [r0, #4]!
500         str r0, [r0, r1]!
501         str r0, [r0], #4
502         str r0, [r0], r1
503         strh r0, [r0, #2]!
504         strh r0, [r0, r1]!
505         strh r0, [r0], #2
506         strh r0, [r0], r1
507         strb r0, [r0, #1]!
508         strb r0, [r0, r1]!
509         strb r0, [r0], #1
510         strb r0, [r0], r1
511 @ CHECK-ERRORS: error: source register and base register can't be identical
512 @ CHECK-ERRORS: str r0, [r0, #4]!
513 @ CHECK-ERRORS:         ^
514 @ CHECK-ERRORS: error: source register and base register can't be identical
515 @ CHECK-ERRORS: str r0, [r0, r1]!
516 @ CHECK-ERRORS:         ^
517 @ CHECK-ERRORS: error: source register and base register can't be identical
518 @ CHECK-ERRORS: str r0, [r0], #4
519 @ CHECK-ERRORS:         ^
520 @ CHECK-ERRORS: error: source register and base register can't be identical
521 @ CHECK-ERRORS: str r0, [r0], r1
522 @ CHECK-ERRORS:         ^
523 @ CHECK-ERRORS: error: source register and base register can't be identical
524 @ CHECK-ERRORS: strh r0, [r0, #2]!
525 @ CHECK-ERRORS:          ^
526 @ CHECK-ERRORS: error: source register and base register can't be identical
527 @ CHECK-ERRORS: strh r0, [r0, r1]!
528 @ CHECK-ERRORS:          ^
529 @ CHECK-ERRORS: error: source register and base register can't be identical
530 @ CHECK-ERRORS: strh r0, [r0], #2
531 @ CHECK-ERRORS:          ^
532 @ CHECK-ERRORS: error: source register and base register can't be identical
533 @ CHECK-ERRORS: strh r0, [r0], r1
534 @ CHECK-ERRORS:          ^
535 @ CHECK-ERRORS: error: source register and base register can't be identical
536 @ CHECK-ERRORS: strb r0, [r0, #1]!
537 @ CHECK-ERRORS:          ^
538 @ CHECK-ERRORS: error: source register and base register can't be identical
539 @ CHECK-ERRORS: strb r0, [r0, r1]!
540 @ CHECK-ERRORS:          ^
541 @ CHECK-ERRORS: error: source register and base register can't be identical
542 @ CHECK-ERRORS: strb r0, [r0], #1
543 @ CHECK-ERRORS:          ^
544 @ CHECK-ERRORS: error: source register and base register can't be identical
545 @ CHECK-ERRORS: strb r0, [r0], r1
546 @ CHECK-ERRORS:          ^
547
548         ldr r0, [r0, #4]!
549         ldr r0, [r0, r1]!
550         ldr r0, [r0], #4
551         ldr r0, [r0], r1
552         ldrh r0, [r0, #2]!
553         ldrh r0, [r0, r1]!
554         ldrh r0, [r0], #2
555         ldrh r0, [r0], r1
556         ldrsh r0, [r0, #2]!
557         ldrsh r0, [r0, r1]!
558         ldrsh r0, [r0], #2
559         ldrsh r0, [r0], r1
560         ldrb r0, [r0, #1]!
561         ldrb r0, [r0, r1]!
562         ldrb r0, [r0], #1
563         ldrb r0, [r0], r1
564         ldrsb r0, [r0, #1]!
565         ldrsb r0, [r0, r1]!
566         ldrsb r0, [r0], #1
567         ldrsb r0, [r0], r1
568 @ CHECK-ERRORS: error: destination register and base register can't be identical
569 @ CHECK-ERRORS: ldr r0, [r0, #4]!
570 @ CHECK-ERRORS:         ^
571 @ CHECK-ERRORS: error: destination register and base register can't be identical
572 @ CHECK-ERRORS: ldr r0, [r0, r1]!
573 @ CHECK-ERRORS:         ^
574 @ CHECK-ERRORS: error: destination register and base register can't be identical
575 @ CHECK-ERRORS: ldr r0, [r0], #4
576 @ CHECK-ERRORS:         ^
577 @ CHECK-ERRORS: error: destination register and base register can't be identical
578 @ CHECK-ERRORS: ldr r0, [r0], r1
579 @ CHECK-ERRORS:         ^
580 @ CHECK-ERRORS: error: destination register and base register can't be identical
581 @ CHECK-ERRORS: ldrh r0, [r0, #2]!
582 @ CHECK-ERRORS:          ^
583 @ CHECK-ERRORS: error: destination register and base register can't be identical
584 @ CHECK-ERRORS: ldrh r0, [r0, r1]!
585 @ CHECK-ERRORS:          ^
586 @ CHECK-ERRORS: error: destination register and base register can't be identical
587 @ CHECK-ERRORS: ldrh r0, [r0], #2
588 @ CHECK-ERRORS:          ^
589 @ CHECK-ERRORS: error: destination register and base register can't be identical
590 @ CHECK-ERRORS: ldrh r0, [r0], r1
591 @ CHECK-ERRORS:          ^
592 @ CHECK-ERRORS: error: destination register and base register can't be identical
593 @ CHECK-ERRORS: ldrsh r0, [r0, #2]!
594 @ CHECK-ERRORS:           ^
595 @ CHECK-ERRORS: error: destination register and base register can't be identical
596 @ CHECK-ERRORS: ldrsh r0, [r0, r1]!
597 @ CHECK-ERRORS:           ^
598 @ CHECK-ERRORS: error: destination register and base register can't be identical
599 @ CHECK-ERRORS: ldrsh r0, [r0], #2
600 @ CHECK-ERRORS:           ^
601 @ CHECK-ERRORS: error: destination register and base register can't be identical
602 @ CHECK-ERRORS: ldrsh r0, [r0], r1
603 @ CHECK-ERRORS:           ^
604 @ CHECK-ERRORS: error: destination register and base register can't be identical
605 @ CHECK-ERRORS: ldrb r0, [r0, #1]!
606 @ CHECK-ERRORS:          ^
607 @ CHECK-ERRORS: error: destination register and base register can't be identical
608 @ CHECK-ERRORS: ldrb r0, [r0, r1]!
609 @ CHECK-ERRORS:          ^
610 @ CHECK-ERRORS: error: destination register and base register can't be identical
611 @ CHECK-ERRORS: ldrb r0, [r0], #1
612 @ CHECK-ERRORS:          ^
613 @ CHECK-ERRORS: error: destination register and base register can't be identical
614 @ CHECK-ERRORS: ldrb r0, [r0], r1
615 @ CHECK-ERRORS:          ^
616 @ CHECK-ERRORS: error: destination register and base register can't be identical
617 @ CHECK-ERRORS: ldrsb r0, [r0, #1]!
618 @ CHECK-ERRORS:           ^
619 @ CHECK-ERRORS: error: destination register and base register can't be identical
620 @ CHECK-ERRORS: ldrsb r0, [r0, r1]!
621 @ CHECK-ERRORS:           ^
622 @ CHECK-ERRORS: error: destination register and base register can't be identical
623 @ CHECK-ERRORS: ldrsb r0, [r0], #1
624 @ CHECK-ERRORS:           ^
625 @ CHECK-ERRORS: error: destination register and base register can't be identical
626 @ CHECK-ERRORS: ldrsb r0, [r0], r1
627 @ CHECK-ERRORS:           ^
628
629         @ Out of range modified immediate values
630         mov  r5, #-256, #6
631         mov  r6, #42, #7
632         mvn  r5, #256, #6
633         mvn  r6, #42, #298
634         cmp  r5, #65535, #6
635         cmp  r6, #42, #31
636         cmn  r5, #-1, #6
637         cmn  r6, #42, #32
638         msr  APSR_nzcvq, #-128, #2
639         msr  apsr_nzcvqg, #0, #1
640         adc  r7, r8, #-256, #2
641         adc  r7, r8, #128, #1
642         sbc  r7, r8, #-256, #2
643         sbc  r7, r8, #128, #1
644         add  r7, r8, #-2149, #0
645         add  r7, r8, #100, #1
646         sub  r7, r8, #-2149, #0
647         sub  r7, r8, #100, #1
648         and  r7, r8, #-2149, #0
649         and  r7, r8, #100, #1
650         orr  r7, r8, #-2149, #0
651         orr  r7, r8, #100, #1
652         eor  r7, r8, #-2149, #0
653         eor  r7, r8, #100, #1
654         bic  r7, r8, #-2149, #0
655         bic  r7, r8, #100, #1
656         rsb  r7, r8, #-2149, #0
657         rsb  r7, r8, #100, #1
658         adds r7, r8, #-2149, #0
659         adds r7, r8, #100, #1
660         subs r7, r8, #-2149, #0
661         subs r7, r8, #100, #1
662         rsbs r7, r8, #-2149, #0
663         rsbs r7, r8, #100, #1
664         rsc r7, r8, #-2149, #0
665         rsc r7, r8, #100, #1
666         TST r7, #-2149, #0
667         TST r7, #100, #1
668         TEQ r7, #-2149, #0
669         TEQ r7, #100, #1
670 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
671 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
672 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
673 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
674 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
675 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
676 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
677 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
678 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
679 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
680 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
681 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
682 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
683 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
684 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
685 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
686 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
687 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
688 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
689 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
690 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
691 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
692 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
693 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
694 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
695 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
696 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
697 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
698 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
699 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
700 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
701 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
702 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
703 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
704 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
705 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
706 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
707 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]