1 @ RUN: not llvm-mc -triple=armv7-apple-darwin < %s 2> %t
2 @ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
3 @ RUN: not llvm-mc -triple=armv8 < %s 2> %t
4 @ RUN: FileCheck --check-prefix=CHECK-ERRORS-V8 < %t %s
6 @ Check for various assembly diagnostic messages on invalid input.
8 @ 's' bit on an instruction that can't accept it.
10 @ CHECK-ERRORS: error: instruction 'mls' can not set flags,
11 @ CHECK-ERRORS: but 's' suffix specified
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
25 @ CHECK-ERRORS: error: invalid immediate shift value
26 @ CHECK-ERRORS: adc r1, r2, r3, lsl #invalid
28 @ CHECK-ERRORS: error: immediate shift value out of range
29 @ CHECK-ERRORS: adc r4, r5, r6, lsl #-1
31 @ CHECK-ERRORS: error: immediate shift value out of range
32 @ CHECK-ERRORS: adc r4, r5, r6, lsl #32
34 @ CHECK-ERRORS: error: immediate shift value out of range
35 @ CHECK-ERRORS: adc r4, r5, r6, lsr #-1
37 @ CHECK-ERRORS: error: immediate shift value out of range
38 @ CHECK-ERRORS: adc r4, r5, r6, lsr #33
40 @ CHECK-ERRORS: error: immediate shift value out of range
41 @ CHECK-ERRORS: adc r4, r5, r6, asr #-1
43 @ CHECK-ERRORS: error: immediate shift value out of range
44 @ CHECK-ERRORS: adc r4, r5, r6, asr #33
46 @ CHECK-ERRORS: error: immediate shift value out of range
47 @ CHECK-ERRORS: adc r4, r5, r6, ror #-1
49 @ CHECK-ERRORS: error: immediate shift value out of range
50 @ CHECK-ERRORS: adc r4, r5, r6, ror #32
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]
64 @ CHECK-ERRORS: error: shift amount must be an immediate
65 @ CHECK-ERRORS: str r1, [r2, r3, lsl #invalid]
67 @ CHECK-ERRORS: error: immediate shift value out of range
68 @ CHECK-ERRORS: ldr r4, [r5], r6, lsl #-1
70 @ CHECK-ERRORS: error: immediate shift value out of range
71 @ CHECK-ERRORS: pld r4, [r5, r6, lsl #32]
73 @ CHECK-ERRORS: error: immediate shift value out of range
74 @ CHECK-ERRORS: str r4, [r5], r6, lsr #-1
76 @ CHECK-ERRORS: error: immediate shift value out of range
77 @ CHECK-ERRORS: ldr r4, [r5, r6, lsr #33]
79 @ CHECK-ERRORS: error: immediate shift value out of range
80 @ CHECK-ERRORS: pld r4, [r5, r6, asr #-1]
82 @ CHECK-ERRORS: error: immediate shift value out of range
83 @ CHECK-ERRORS: str r4, [r5, r6, asr #33]
85 @ CHECK-ERRORS: error: immediate shift value out of range
86 @ CHECK-ERRORS: ldr r4, [r5, r6, ror #-1]
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]
93 @ Out of range 16-bit immediate on BKPT
96 @ CHECK-ERRORS: error: invalid operand for instruction
98 @ Out of range immediates for v8 HLT instruction.
101 @CHECK-ERRORS-V8: error: invalid operand for instruction
102 @CHECK-ERRORS-V8: hlt #65536
104 @CHECK-ERRORS-V8: error: invalid operand for instruction
105 @CHECK-ERRORS-V8: hlt #-1
108 @ Illegal condition code for v8 HLT instruction.
111 @CHECK-ERRORS-V8: error: instruction 'hlt' is not predicable, but condition code specified
112 @CHECK-ERRORS-V8: hlteq #2
114 @CHECK-ERRORS-V8: error: instruction 'hlt' is not predicable, but condition code specified
115 @CHECK-ERRORS-V8: hltlt #23
118 @ Out of range 4 and 3 bit immediates on CDP[2]
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
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
131 @ Out of range immediates for DBG
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
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: error: immediate operand must be in the range [0,15]
154 @ p10 and p11 are reserved for NEON
155 mcr p10, #2, r5, c1, c1, #4
156 mcrr p11, #8, r5, r4, c1
157 @ CHECK-ERRORS: error: invalid operand for instruction
158 @ CHECK-ERRORS: error: invalid operand for instruction
160 @ Out of range immediate for MOV
162 @ CHECK-ERRORS: error: invalid operand for instruction
164 @ Invalid 's' bit usage for MOVW
167 @ CHECK-ERRORS: error: invalid operand for instruction
168 @ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
170 @ Out of range immediate for MOVT
172 @ CHECK-ERRORS: error: invalid operand for instruction
174 @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
175 mrc p14, #8, r1, c1, c2, #4
176 mrc p14, #1, r1, c1, c2, #8
177 mrc2 p14, #8, r1, c1, c2, #4
178 mrc2 p14, #0, r1, c1, c2, #9
179 mrrc p7, #16, r5, r4, c1
180 mrrc2 p7, #17, r5, r4, c1
181 @ CHECK-ERRORS: error: invalid operand for instruction
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: immediate operand must be in the range [0,15]
186 @ CHECK-ERRORS: error: immediate operand must be in the range [0,15]
188 @ Shifter operand validation for PKH instructions.
189 pkhbt r2, r2, r3, lsl #-1
190 pkhbt r2, r2, r3, lsl #32
191 pkhtb r2, r2, r3, asr #0
192 pkhtb r2, r2, r3, asr #33
193 pkhbt r2, r2, r3, asr #3
194 pkhtb r2, r2, r3, lsl #3
196 @ CHECK-ERRORS: error: immediate value out of range
197 @ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #-1
199 @ CHECK-ERRORS: error: immediate value out of range
200 @ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #32
202 @ CHECK-ERRORS: error: immediate value out of range
203 @ CHECK-ERRORS: pkhtb r2, r2, r3, asr #0
205 @ CHECK-ERRORS: error: immediate value out of range
206 @ CHECK-ERRORS: pkhtb r2, r2, r3, asr #33
208 @ CHECK-ERRORS: error: lsl operand expected.
209 @ CHECK-ERRORS: pkhbt r2, r2, r3, asr #3
211 @ CHECK-ERRORS: error: asr operand expected.
212 @ CHECK-ERRORS: pkhtb r2, r2, r3, lsl #3
216 @ bad values for SETEND
221 @ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
222 @ CHECK-ERRORS: setendne be
224 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
225 @ CHECK-ERRORS: setend me
227 @ CHECK-ERRORS: error: 'be' or 'le' operand expected
228 @ CHECK-ERRORS: setend 1
232 @ Out of range immediates and bad shift types for SSAT
233 ssat r8, #0, r10, lsl #8
234 ssat r8, #33, r10, lsl #8
235 ssat r8, #1, r10, lsl #-1
236 ssat r8, #1, r10, lsl #32
237 ssat r8, #1, r10, asr #0
238 ssat r8, #1, r10, asr #33
239 ssat r8, #1, r10, lsr #5
240 ssat r8, #1, r10, lsl fred
241 ssat r8, #1, r10, lsl #fred
243 @ CHECK-ERRORS: error: invalid operand for instruction
244 @ CHECK-ERRORS: ssat r8, #0, r10, lsl #8
246 @ CHECK-ERRORS: error: invalid operand for instruction
247 @ CHECK-ERRORS: ssat r8, #33, r10, lsl #8
249 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
250 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #-1
252 @ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
253 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #32
255 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
256 @ CHECK-ERRORS: ssat r8, #1, r10, asr #0
258 @ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
259 @ CHECK-ERRORS: ssat r8, #1, r10, asr #33
261 @ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
262 @ CHECK-ERRORS: ssat r8, #1, r10, lsr #5
264 @ CHECK-ERRORS: error: '#' expected
265 @ CHECK-ERRORS: ssat r8, #1, r10, lsl fred
267 @ CHECK-ERRORS: error: shift amount must be an immediate
268 @ CHECK-ERRORS: ssat r8, #1, r10, lsl #fred
271 @ Out of range immediates for SSAT16
275 @ CHECK-ERRORS: error: invalid operand for instruction
276 @ CHECK-ERRORS: ssat16 r2, #0, r7
278 @ CHECK-ERRORS: error: invalid operand for instruction
279 @ CHECK-ERRORS: ssat16 r3, #17, r5
283 @ Out of order STM registers
286 @ CHECK-ERRORS: warning: register list not in ascending order
287 @ CHECK-ERRORS: stmda sp!, {r5, r2}
291 @ Out of range immediate on SVC
293 @ CHECK-ERRORS: error: invalid operand for instruction
294 @ CHECK-ERRORS: svc #0x1000000
298 @ Out of order Rt/Rt2 operands for ldrexd/strexd
300 strexd r6, r5, r3, [r8]
302 @ CHECK-ERRORS: error: destination operands must be sequential
303 @ CHECK-ERRORS: ldrexd r4, r3, [r8]
305 @ CHECK-ERRORS: error: source operands must be sequential
306 @ CHECK-ERRORS: strexd r6, r5, r3, [r8]
309 @ Illegal rotate operators for extend instructions
312 sxtb r8, r3, ror #8 -
313 sxtab r3, r8, r3, ror #(fred - wilma)
314 sxtab r7, r8, r3, ror #25
315 sxtah r9, r3, r3, ror #-8
316 sxtb16ge r2, r3, lsr #24
318 @ CHECK-ERRORS: error: invalid operand for instruction
319 @ CHECK-ERRORS: sxtb r8, r3, #8
321 @ CHECK-ERRORS: error: '#' expected
322 @ CHECK-ERRORS: sxtb r8, r3, ror 24
324 @ CHECK-ERRORS: error: unknown token in expression
325 @ CHECK-ERRORS: sxtb r8, r3, ror #8 -
327 @ CHECK-ERRORS: error: malformed rotate expression
328 @ CHECK-ERRORS: sxtb r8, r3, ror #8 -
330 @ CHECK-ERRORS: error: rotate amount must be an immediate
331 @ CHECK-ERRORS: sxtab r3, r8, r3, ror #(fred - wilma)
333 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
334 @ CHECK-ERRORS: sxtab r7, r8, r3, ror #25
336 @ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
337 @ CHECK-ERRORS: sxtah r9, r3, r3, ror #-8
339 @ CHECK-ERRORS: error: invalid operand for instruction
340 @ CHECK-ERRORS: sxtb16ge r2, r3, lsr #24
343 @ Out of range width for SBFX/UBFX
345 ubfxgt r4, r5, #16, #17
347 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
348 @ CHECK-ERRORS: sbfx r4, r5, #31, #2
350 @ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
351 @ CHECK-ERRORS: ubfxgt r4, r5, #16, #17
354 @ Out of order Rt/Rt2 operands for ldrd
356 ldrd r4, r3, [r8, #8]!
357 ldrd r4, r3, [r8], #8
358 @ CHECK-ERRORS: error: destination operands must be sequential
359 @ CHECK-ERRORS: ldrd r4, r3, [r8]
361 @ CHECK-ERRORS: error: destination operands must be sequential
362 @ CHECK-ERRORS: ldrd r4, r3, [r8, #8]!
364 @ CHECK-ERRORS: error: destination operands must be sequential
365 @ CHECK-ERRORS: ldrd r4, r3, [r8], #8
369 @ Bad register lists for VFP.
371 @ CHECK-ERRORS: error: non-contiguous register range
372 @ CHECK-ERRORS: vpush {s0, s3}
375 @ Out of range coprocessor option immediate.
376 ldc2 p2, c8, [r1], { 256 }
377 ldc2 p2, c8, [r1], { -1 }
379 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
380 @ CHECK-ERRORS: ldc2 p2, c8, [r1], { 256 }
382 @ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
383 @ CHECK-ERRORS: ldc2 p2, c8, [r1], { -1 }
386 @ Bad CPS instruction format.
388 @ CHECK-ERRORS: error: invalid operand for instruction
389 @ CHECK-ERRORS: cps f,#1
392 @ Bad operands for msr
395 @ CHECK-ERRORS: error: invalid operand for instruction
396 @ CHECK-ERRORS: msr #0, #0
398 @ CHECK-ERRORS: error: invalid operand for instruction
399 @ CHECK-ERRORS: msr foo, #0
404 @ CHECK-ERRORS: error: immediate value out of range
405 @ CHECK-ERRORS: error: immediate value out of range
408 @ CHECK-ERRORS: error: instruction with .n (narrow) qualifier not allowed in arm mode
413 @ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
414 @ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
415 @ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
420 @ CHECK-ERRORS: error: instruction 'dmb' is not predicable, but condition code specified
421 @ CHECK-ERRORS: error: instruction 'dsb' is not predicable, but condition code specified
422 @ CHECK-ERRORS: error: instruction 'isb' is not predicable, but condition code specified
424 mcr2le p7, #1, r5, c1, c1, #4
425 mcrr2ne p7, #15, r5, r4, c1
426 mrc2lo p14, #0, r1, c1, c2, #4
427 mrrc2lo p7, #1, r5, r4, c1
428 cdp2hi p10, #0, c6, c12, c0, #7
429 @ CHECK-ERRORS: error: instruction 'mcr2' is not predicable, but condition code specified
430 @ CHECK-ERRORS: error: instruction 'mcrr2' is not predicable, but condition code specified
431 @ CHECK-ERRORS: error: instruction 'mrc2' is not predicable, but condition code specified
432 @ CHECK-ERRORS: error: instruction 'mrrc2' is not predicable, but condition code specified
433 @ CHECK-ERRORS: error: instruction 'cdp2' is not predicable, but condition code specified
436 @ CHECK-ERRORS: error: instruction 'bkpt' is not predicable, but condition code specified
442 @ CHECK-ERRORS: error: writeback register not allowed in register list
443 @ CHECK-ERRORS: error: writeback register not allowed in register list
444 @ CHECK-ERRORS: error: writeback register not allowed in register list
445 @ CHECK-ERRORS: error: writeback register not allowed in register list
447 vrintz.f32.f32 s0, s1
449 vrintx.f64.f64 d2, d5
451 vrinta.f32.f32 s6, s7
453 vrintp.f64.f64 d10, d11
455 @ CHECK-ERRORS: error: instruction requires: FPARMv8
456 @ CHECK-ERRORS: error: instruction requires: FPARMv8
457 @ CHECK-ERRORS: error: instruction requires: FPARMv8
458 @ CHECK-ERRORS: error: instruction requires: FPARMv8
459 @ CHECK-ERRORS: error: instruction requires: FPARMv8
460 @ CHECK-ERRORS: error: instruction requires: FPARMv8
461 @ CHECK-ERRORS: error: instruction requires: FPARMv8
462 @ CHECK-ERRORS: error: instruction requires: FPARMv8