1 @ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t
2 @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
4 @ Check for various assembly diagnostic messages on invalid input.
6 @ 's' bit on an instruction that can't accept it.
8 @ CHECK-ERRORS: error: instruction 'mls' can not set flags,
9 @ CHECK-ERRORS: but 's' suffix specified
12 @ Out of range shift immediate values.
13 adc r1, r2, r3, lsl #invalid
14 adc r4, r5, r6, lsl #-1
15 adc r4, r5, r6, lsl #32
16 adc r4, r5, r6, lsr #-1
17 adc r4, r5, r6, lsr #33
18 adc r4, r5, r6, asr #-1
19 adc r4, r5, r6, asr #33
20 adc r4, r5, r6, ror #-1
21 adc r4, r5, r6, ror #32
23 @ CHECK-ERRORS: error: invalid immediate shift value
24 @ CHECK-ERRORS: adc r1, r2, r3, lsl #invalid
26 @ CHECK-ERRORS: error: immediate shift value out of range
27 @ CHECK-ERRORS: adc r4, r5, r6, lsl #-1
29 @ CHECK-ERRORS: error: immediate shift value out of range
30 @ CHECK-ERRORS: adc r4, r5, r6, lsl #32
32 @ CHECK-ERRORS: error: immediate shift value out of range
33 @ CHECK-ERRORS: adc r4, r5, r6, lsr #-1
35 @ CHECK-ERRORS: error: immediate shift value out of range
36 @ CHECK-ERRORS: adc r4, r5, r6, lsr #33
38 @ CHECK-ERRORS: error: immediate shift value out of range
39 @ CHECK-ERRORS: adc r4, r5, r6, asr #-1
41 @ CHECK-ERRORS: error: immediate shift value out of range
42 @ CHECK-ERRORS: adc r4, r5, r6, asr #33
44 @ CHECK-ERRORS: error: immediate shift value out of range
45 @ CHECK-ERRORS: adc r4, r5, r6, ror #-1
47 @ CHECK-ERRORS: error: immediate shift value out of range
48 @ CHECK-ERRORS: adc r4, r5, r6, ror #32
51 @ Out of range 16-bit immediate on BKPT
54 @ CHECK-ERRORS: error: invalid operand for instruction
56 @ Out of range 4 and 3 bit immediates on CDP[2]
58 @ Out of range immediates for CDP/CDP2
59 cdp p7, #2, c1, c1, c1, #8
60 cdp p7, #1, c1, c1, c1, #8
61 cdp2 p7, #2, c1, c1, c1, #8
62 cdp2 p7, #1, c1, c1, c1, #8
64 @ CHECK-ERRORS: error: invalid operand for instruction
65 @ CHECK-ERRORS: error: invalid operand for instruction
66 @ CHECK-ERRORS: error: invalid operand for instruction
67 @ CHECK-ERRORS: error: invalid operand for instruction
69 @ Out of range immediates for DBG
73 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
74 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
75 @ Double-check that we're synced up with the right diagnostics.
76 @ CHECK-ERRORS: dbg #16
78 @ Out of range immediate for MCR/MCR2/MCRR/MCRR2
79 mcr p7, #8, r5, c1, c1, #4
80 mcr p7, #2, r5, c1, c1, #8
81 mcr2 p7, #8, r5, c1, c1, #4
82 mcr2 p7, #1, r5, c1, c1, #8
83 mcrr p7, #16, r5, r4, c1
84 mcrr2 p7, #16, r5, r4, c1
85 @ CHECK-ERRORS: error: invalid operand for instruction
86 @ CHECK-ERRORS: error: invalid operand for instruction
87 @ CHECK-ERRORS: error: invalid operand for instruction
88 @ CHECK-ERRORS: error: invalid operand for instruction
89 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
90 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
93 @ Out of range immediate for MOV
95 @ CHECK-ERRORS: error: invalid operand for instruction
97 @ Invalid 's' bit usage for MOVW
100 @ CHECK-ERRORS: error: invalid operand for instruction
101 @ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
103 @ Out of range immediate for MOVT
105 @ CHECK-ERRORS: error: invalid operand for instruction
107 @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
108 mrc p14, #8, r1, c1, c2, #4
109 mrc p14, #1, r1, c1, c2, #8
110 mrc2 p14, #8, r1, c1, c2, #4
111 mrc2 p14, #0, r1, c1, c2, #9
112 mrrc p7, #16, r5, r4, c1
113 mrrc2 p7, #17, r5, r4, c1
114 @ CHECK-ERRORS: error: invalid operand for instruction
115 @ CHECK-ERRORS: error: invalid operand for instruction
116 @ CHECK-ERRORS: error: invalid operand for instruction
117 @ CHECK-ERRORS: error: invalid operand for instruction
118 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
119 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
121 @ Shifter operand validation for PKH instructions.
122 pkhbt r2, r2, r3, lsl #-1
123 pkhbt r2, r2, r3, lsl #32
124 pkhtb r2, r2, r3, asr #0
125 pkhtb r2, r2, r3, asr #33
126 pkhbt r2, r2, r3, asr #3
127 pkhtb r2, r2, r3, lsl #3
129 @ CHECK-ERRORS: error: immediate value out of range
130 @ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #-1
132 @ CHECK-ERRORS: error: immediate value out of range
133 @ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #32
135 @ CHECK-ERRORS: error: immediate value out of range
136 @ CHECK-ERRORS: pkhtb r2, r2, r3, asr #0
138 @ CHECK-ERRORS: error: immediate value out of range
139 @ CHECK-ERRORS: pkhtb r2, r2, r3, asr #33
141 @ CHECK-ERRORS: error: lsl operand expected.
142 @ CHECK-ERRORS: pkhbt r2, r2, r3, asr #3
144 @ CHECK-ERRORS: error: asr operand expected.
145 @ CHECK-ERRORS: pkhtb r2, r2, r3, lsl #3
149 @ bad values for SETEND
154 @ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
155 @ CHECK-ERRORS: setendne be
157 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
158 @ CHECK-ERRORS: setend me
160 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
161 @ CHECK-ERRORS: setend 1
165 @ Out of range immediates and bad shift types for SSAT
166 ssat r8, #0, r10, lsl #8
167 ssat r8, #33, r10, lsl #8
168 ssat r8, #1, r10, lsl #-1
169 ssat r8, #1, r10, lsl #32
170 ssat r8, #1, r10, asr #0
171 ssat r8, #1, r10, asr #33
172 ssat r8, #1, r10, lsr #5
173 ssat r8, #1, r10, lsl fred
174 ssat r8, #1, r10, lsl #fred
176 @ CHECK-ERRORS: error: invalid operand for instruction
177 @ CHECK-ERRORS: ssat r8, #0, r10, lsl #8
179 @ CHECK-ERRORS: error: invalid operand for instruction
180 @ CHECK-ERRORS: ssat r8, #33, r10, lsl #8
182 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
183 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #-1
185 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
186 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #32
188 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
189 @ CHECK-ERRORS: ssat r8, #1, r10, asr #0
191 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
192 @ CHECK-ERRORS: ssat r8, #1, r10, asr #33
194 @ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
195 @ CHECK-ERRORS: ssat r8, #1, r10, lsr #5
197 @ CHECK-ERRORS: error: '#' expected
198 @ CHECK-ERRORS: ssat r8, #1, r10, lsl fred
200 @ CHECK-ERRORS: error: shift amount must be an immediate
201 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #fred
204 @ Out of range immediates for SSAT16
208 @ CHECK-ERRORS: error: invalid operand for instruction
209 @ CHECK-ERRORS: ssat16 r2, #0, r7
211 @ CHECK-ERRORS: error: invalid operand for instruction
212 @ CHECK-ERRORS: ssat16 r3, #17, r5
216 @ Out of order STM registers
219 @ CHECK-ERRORS: warning: register list not in ascending order
220 @ CHECK-ERRORS: stmda sp!, {r5, r2}
224 @ Out of range immediate on SVC
226 @ CHECK-ERRORS: error: invalid operand for instruction
227 @ CHECK-ERRORS: svc #0x1000000
231 @ Out of order Rt/Rt2 operands for ldrexd/strexd
233 strexd r6, r5, r3, [r8]
235 @ CHECK-ERRORS: error: destination operands must be sequential
236 @ CHECK-ERRORS: ldrexd r4, r3, [r8]
238 @ CHECK-ERRORS: error: source operands must be sequential
239 @ CHECK-ERRORS: strexd r6, r5, r3, [r8]
242 @ Illegal rotate operators for extend instructions
245 sxtb r8, r3, ror #8 -
246 sxtab r3, r8, r3, ror #(fred - wilma)
247 sxtab r7, r8, r3, ror #25
248 sxtah r9, r3, r3, ror #-8
249 sxtb16ge r2, r3, lsr #24
251 @ CHECK-ERRORS: error: invalid operand for instruction
252 @ CHECK-ERRORS: sxtb r8, r3, #8
254 @ CHECK-ERRORS: error: '#' expected
255 @ CHECK-ERRORS: sxtb r8, r3, ror 24
257 @ CHECK-ERRORS: error: unknown token in expression
258 @ CHECK-ERRORS: sxtb r8, r3, ror #8 -
260 @ CHECK-ERRORS: error: malformed rotate expression
261 @ CHECK-ERRORS: sxtb r8, r3, ror #8 -
263 @ CHECK-ERRORS: error: rotate amount must be an immediate
264 @ CHECK-ERRORS: sxtab r3, r8, r3, ror #(fred - wilma)
266 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
267 @ CHECK-ERRORS: sxtab r7, r8, r3, ror #25
269 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
270 @ CHECK-ERRORS: sxtah r9, r3, r3, ror #-8
272 @ CHECK-ERRORS: error: invalid operand for instruction
273 @ CHECK-ERRORS: sxtb16ge r2, r3, lsr #24
276 @ Out of range width for SBFX/UBFX
278 ubfxgt r4, r5, #16, #17
280 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
281 @ CHECK-ERRORS: sbfx r4, r5, #31, #2
283 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
284 @ CHECK-ERRORS: ubfxgt r4, r5, #16, #17
287 @ Out of order Rt/Rt2 operands for ldrd
289 ldrd r4, r3, [r8, #8]!
290 ldrd r4, r3, [r8], #8
291 @ CHECK-ERRORS: error: destination operands must be sequential
292 @ CHECK-ERRORS: ldrd r4, r3, [r8]
294 @ CHECK-ERRORS: error: destination operands must be sequential
295 @ CHECK-ERRORS: ldrd r4, r3, [r8, #8]!
297 @ CHECK-ERRORS: error: destination operands must be sequential
298 @ CHECK-ERRORS: ldrd r4, r3, [r8], #8
302 @ Bad register lists for VFP.
304 @ CHECK-ERRORS: error: non-contiguous register range
305 @ CHECK-ERRORS: vpush {s0, s3}
308 @ Out of range coprocessor option immediate.
309 ldc2 p2, c8, [r1], { 256 }
310 ldc2 p2, c8, [r1], { -1 }
312 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
313 @ CHECK-ERRORS: ldc2 p2, c8, [r1], { 256 }
315 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
316 @ CHECK-ERRORS: ldc2 p2, c8, [r1], { -1 }
319 @ Bad CPS instruction format.
321 @ CHECK-ERRORS: error: invalid operand for instruction
322 @ CHECK-ERRORS: cps f,#1