Add tests for ARM PKH assembly parsing.
[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 < %t %s
3
4 @ Check for various assembly diagnostic messages on invalid input.
5
6 @ 's' bit on an instruction that can't accept it.
7         mlss r1, r2, r3, r4
8 @ CHECK-ERRORS: error: instruction 'mls' can not set flags,
9 @ CHECK-ERRORS: but 's' suffix specified
10
11
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
22
23 @ CHECK-ERRORS: error: invalid immediate shift value
24 @ CHECK-ERRORS:         adc r1, r2, r3, lsl #invalid
25 @ CHECK-ERRORS:                              ^
26 @ CHECK-ERRORS: error: immediate shift value out of range
27 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #-1
28 @ CHECK-ERRORS:                              ^
29 @ CHECK-ERRORS: error: immediate shift value out of range
30 @ CHECK-ERRORS:         adc r4, r5, r6, lsl #32
31 @ CHECK-ERRORS:                              ^
32 @ CHECK-ERRORS: error: immediate shift value out of range
33 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #-1
34 @ CHECK-ERRORS:                              ^
35 @ CHECK-ERRORS: error: immediate shift value out of range
36 @ CHECK-ERRORS:         adc r4, r5, r6, lsr #33
37 @ CHECK-ERRORS:                              ^
38 @ CHECK-ERRORS: error: immediate shift value out of range
39 @ CHECK-ERRORS:         adc r4, r5, r6, asr #-1
40 @ CHECK-ERRORS:                              ^
41 @ CHECK-ERRORS: error: immediate shift value out of range
42 @ CHECK-ERRORS:         adc r4, r5, r6, asr #33
43 @ CHECK-ERRORS:                              ^
44 @ CHECK-ERRORS: error: immediate shift value out of range
45 @ CHECK-ERRORS:         adc r4, r5, r6, ror #-1
46 @ CHECK-ERRORS:                              ^
47 @ CHECK-ERRORS: error: immediate shift value out of range
48 @ CHECK-ERRORS:         adc r4, r5, r6, ror #32
49
50
51         @ Out of range 16-bit immediate on BKPT
52         bkpt #65536
53
54 @ CHECK-ERRORS: error: invalid operand for instruction
55
56         @ Out of range 4 and 3 bit immediates on CDP[2]
57
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
63
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
68
69         @ Out of range immediates for DBG
70         dbg #-1
71         dbg #16
72
73 @ CHECK-ERRORS: error: invalid operand for instruction
74 @ CHECK-ERRORS: error: invalid operand for instruction
75 @  Double-check that we're synced up with the right diagnostics.
76 @ CHECK-ERRORS: dbg #16
77
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: invalid operand for instruction
90 @ CHECK-ERRORS: error: invalid operand for instruction
91
92
93         @ Out of range immediate for MOV
94         movw r9, 0x10000
95 @ CHECK-ERRORS: error: invalid operand for instruction
96
97         @ Invalid 's' bit usage for MOVW
98         movs r6, #0xffff
99         movwseq r9, #0xffff
100 @ CHECK-ERRORS: error: invalid operand for instruction
101 @ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
102
103         @ Out of range immediate for MOVT
104         movt r9, 0x10000
105 @ CHECK-ERRORS: error: invalid operand for instruction
106
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: invalid operand for instruction
119 @ CHECK-ERRORS: error: invalid operand for instruction
120
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
128
129 @ CHECK: error: immediate value out of range
130 @ CHECK:         pkhbt r2, r2, r3, lsl #-1
131 @ CHECK:                                ^
132 @ CHECK: error: immediate value out of range
133 @ CHECK:         pkhbt r2, r2, r3, lsl #32
134 @ CHECK:                                ^
135 @ CHECK: error: immediate value out of range
136 @ CHECK:         pkhtb r2, r2, r3, asr #0
137 @ CHECK:                                ^
138 @ CHECK: error: immediate value out of range
139 @ CHECK:         pkhtb r2, r2, r3, asr #33
140 @ CHECK:                                ^
141 @ CHECK: error: lsl operand expected.
142 @ CHECK:         pkhbt r2, r2, r3, asr #3
143 @ CHECK:                           ^
144 @ CHECK: error: asr operand expected.
145 @ CHECK:         pkhtb r2, r2, r3, lsl #3
146 @ CHECK:                           ^