1@ RUN: not llvm-mc -triple=thumbv6-apple-darwin < %s 2> %t
2@ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
3@ RUN: not llvm-mc -triple=thumbv5-apple-darwin < %s 2> %t
4@ RUN: FileCheck --check-prefix=CHECK-ERRORS-V5 < %t %s
5
6@ Check for various assembly diagnostic messages on invalid input.
7
8@ ADD instruction w/o 'S' suffix.
9        add r1, r2, r3
10@ CHECK-ERRORS: error: invalid instruction
11@ CHECK-ERRORS:         add r1, r2, r3
12@ CHECK-ERRORS:         ^
13
14@ Instructions which require v6+ for both registers to be low regs.
15        add r2, r3
16        mov r2, r3
17@ CHECK-ERRORS: error: instruction variant requires Thumb2
18@ CHECK-ERRORS:         add r2, r3
19@ CHECK-ERRORS:         ^
20@ CHECK-ERRORS-V5: error: instruction variant requires ARMv6 or later
21@ CHECK-ERRORS-V5:         mov r2, r3
22@ CHECK-ERRORS-V5:         ^
23
24
25@ Out of range immediates for ASR instruction.
26        asrs r2, r3, #33
27        asrs r2, r3, #0
28@ CHECK-ERRORS: error: invalid operand for instruction
29@ CHECK-ERRORS:         asrs r2, r3, #33
30@ CHECK-ERRORS:                      ^
31@ CHECK-ERRORS: error: invalid operand for instruction
32@ CHECK-ERRORS:         asrs r2, r3, #0
33@ CHECK-ERRORS:                      ^
34
35@ Out of range immediates for BKPT instruction.
36        bkpt #256
37        bkpt #-1
38error: invalid operand for instruction
39        bkpt #256
40             ^
41error: invalid operand for instruction
42        bkpt #-1
43             ^
44
45@ Invalid writeback and register lists for LDM
46        ldm r2!, {r5, r8}
47        ldm r2, {r5, r7}
48        ldm r2!, {r2, r3, r4}
49@ CHECK-ERRORS: error: registers must be in range r0-r7
50@ CHECK-ERRORS:         ldm r2!, {r5, r8}
51@ CHECK-ERRORS:                  ^
52@ CHECK-ERRORS: error: writeback operator '!' expected
53@ CHECK-ERRORS:         ldm r2, {r5, r7}
54@ CHECK-ERRORS:             ^
55@ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list
56@ CHECK-ERRORS:         ldm r2!, {r2, r3, r4}
57@ CHECK-ERRORS:               ^
58
59
60@ Invalid writeback and register lists for PUSH/POP
61        pop {r1, r2, r10}
62        push {r8, r9}
63@ CHECK-ERRORS: error: registers must be in range r0-r7 or pc
64@ CHECK-ERRORS:         pop {r1, r2, r10}
65@ CHECK-ERRORS:             ^
66@ CHECK-ERRORS: error: registers must be in range r0-r7 or lr
67@ CHECK-ERRORS:         push {r8, r9}
68@ CHECK-ERRORS:              ^
69
70
71@ Invalid writeback and register lists for STM
72        stm r1, {r2, r6}
73        stm r1!, {r2, r9}
74@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
75@ CHECK-ERRORS:         stm r1, {r2, r6}
76@ CHECK-ERRORS:         ^
77@ CHECK-ERRORS: error: registers must be in range r0-r7
78@ CHECK-ERRORS:         stm r1!, {r2, r9}
79@ CHECK-ERRORS:                  ^
80
81@ Out of range immediates for LSL instruction.
82        lsls r4, r5, #-1
83        lsls r4, r5, #32
84@ CHECK-ERRORS: error: invalid operand for instruction
85@ CHECK-ERRORS:         lsls r4, r5, #-1
86@ CHECK-ERRORS:                      ^
87@ CHECK-ERRORS: error: invalid operand for instruction
88@ CHECK-ERRORS:         lsls r4, r5, #32
89@ CHECK-ERRORS:                      ^
90
91@ Mismatched source/destination operands for MUL instruction.
92        muls r1, r2, r3
93@ CHECK-ERRORS: error: destination register must match source register
94@ CHECK-ERRORS:         muls r1, r2, r3
95@ CHECK-ERRORS:              ^
96
97
98@ Out of range immediates for STR instruction.
99        str r2, [r7, #-1]
100        str r5, [r1, #3]
101        str r3, [r7, #128]
102@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
103@ CHECK-ERRORS:         str r2, [r7, #-1]
104@ CHECK-ERRORS:         ^
105@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
106@ CHECK-ERRORS:         str r5, [r1, #3]
107@ CHECK-ERRORS:         ^
108@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
109@ CHECK-ERRORS:         str r3, [r7, #128]
110@ CHECK-ERRORS:         ^
111
112@ Out of range immediate for SVC instruction.
113        svc #-1
114        svc #256
115@ CHECK-ERRORS: error: invalid operand for instruction
116@ CHECK-ERRORS:         svc #-1
117@ CHECK-ERRORS:             ^
118@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
119@ CHECK-ERRORS:         svc #256
120@ CHECK-ERRORS:         ^
121
122
123@ Out of range immediate for ADD SP instructions
124        add sp, #-1
125        add sp, #3
126        add sp, sp, #512
127        add r2, sp, #1024
128@ CHECK-ERRORS: error: invalid operand for instruction
129@ CHECK-ERRORS:         add sp, #-1
130@ CHECK-ERRORS:                 ^
131@ CHECK-ERRORS: error: invalid operand for instruction
132@ CHECK-ERRORS:         add sp, #3
133@ CHECK-ERRORS:                 ^
134@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
135@ CHECK-ERRORS:         add sp, sp, #512
136@ CHECK-ERRORS:                     ^
137@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
138@ CHECK-ERRORS:         add r2, sp, #1024
139@ CHECK-ERRORS:         ^
140