1@ RUN: llvm-mc -triple armv6t2-linux-eabi -filetype asm -o - %s 2>&1 \
2@ RUN:   | FileCheck %s
3
4@ RUN: not llvm-mc -triple armv7-linux-eabi -filetype asm -o - %s 2>&1 \
5@ RUN:   | FileCheck %s -check-prefix CHECK -check-prefix CHECK-V7
6
7	.syntax unified
8	.arm
9
10	.global stm
11	.type stm,%function
12stm:
13	stm sp!, {r0, pc}
14@ CHECK: warning: use of SP or PC in the list is deprecated
15@ CHECK: stm sp!, {r0, pc}
16@ CHECK: ^
17	stm r0!, {r0, sp}
18@ CHECK: warning: use of SP or PC in the list is deprecated
19@ CHECK: stm r0!, {r0, sp}
20@ CHECK: ^
21	stm r1!, {r0, sp, pc}
22@ CHECK: warning: use of SP or PC in the list is deprecated
23@ CHECK: stm r1!, {r0, sp, pc}
24@ CHECK: ^
25	stm r2!, {sp, pc}
26@ CHECK: warning: use of SP or PC in the list is deprecated
27@ CHECK: stm r2!, {sp, pc}
28@ CHECK: ^
29	stm sp!, {pc}
30@ CHECK: warning: use of SP or PC in the list is deprecated
31@ CHECK: stm sp!, {pc}
32@ CHECK: ^
33	stm r0!, {sp}
34@ CHECK: warning: use of SP or PC in the list is deprecated
35@ CHECK: stm r0!, {sp}
36@ CHECK: ^
37
38	.global stmda
39	.type stmda,%function
40stmda:
41	stmda sp!, {r0, pc}
42@ CHECK: warning: use of SP or PC in the list is deprecated
43@ CHECK: stmda sp!, {r0, pc}
44@ CHECK: ^
45	stmda r0!, {r0, sp}
46@ CHECK: warning: use of SP or PC in the list is deprecated
47@ CHECK: stmda r0!, {r0, sp}
48@ CHECK: ^
49	stmda r1!, {r0, sp, pc}
50@ CHECK: warning: use of SP or PC in the list is deprecated
51@ CHECK: stmda r1!, {r0, sp, pc}
52@ CHECK: ^
53	stmda r2!, {sp, pc}
54@ CHECK: warning: use of SP or PC in the list is deprecated
55@ CHECK: stmda r2!, {sp, pc}
56@ CHECK: ^
57	stmda sp!, {pc}
58@ CHECK: warning: use of SP or PC in the list is deprecated
59@ CHECK: stmda sp!, {pc}
60@ CHECK: ^
61	stmda r0!, {sp}
62@ CHECK: warning: use of SP or PC in the list is deprecated
63@ CHECK: stmda r0!, {sp}
64@ CHECK: ^
65
66	.global stmdb
67	.type stmdb,%function
68stmdb:
69	stmdb sp!, {r0, pc}
70@ CHECK: warning: use of SP or PC in the list is deprecated
71@ CHECK: stmdb sp!, {r0, pc}
72@ CHECK: ^
73	stmdb r0!, {r0, sp}
74@ CHECK: warning: use of SP or PC in the list is deprecated
75@ CHECK: stmdb r0!, {r0, sp}
76@ CHECK: ^
77	stmdb r1!, {r0, sp, pc}
78@ CHECK: warning: use of SP or PC in the list is deprecated
79@ CHECK: stmdb r1!, {r0, sp, pc}
80@ CHECK: ^
81	stmdb r2!, {sp, pc}
82@ CHECK: warning: use of SP or PC in the list is deprecated
83@ CHECK: stmdb r2!, {sp, pc}
84@ CHECK: ^
85	stmdb sp!, {pc}
86@ CHECK: warning: use of SP or PC in the list is deprecated
87@ CHECK: stmdb sp!, {pc}
88@ CHECK: ^
89	stmdb r0!, {sp}
90@ CHECK: warning: use of SP or PC in the list is deprecated
91@ CHECK: stmdb r0!, {sp}
92@ CHECK: ^
93
94	.global stmib
95	.type stmib,%function
96stmib:
97	stmib sp!, {r0, pc}
98@ CHECK: warning: use of SP or PC in the list is deprecated
99@ CHECK: stmib sp!, {r0, pc}
100@ CHECK: ^
101	stmib r0!, {r0, sp}
102@ CHECK: warning: use of SP or PC in the list is deprecated
103@ CHECK: stmib r0!, {r0, sp}
104@ CHECK: ^
105	stmib r1!, {r0, sp, pc}
106@ CHECK: warning: use of SP or PC in the list is deprecated
107@ CHECK: stmib r1!, {r0, sp, pc}
108@ CHECK: ^
109	stmib r2!, {sp, pc}
110@ CHECK: warning: use of SP or PC in the list is deprecated
111@ CHECK: stmib r2!, {sp, pc}
112@ CHECK: ^
113	stmib sp!, {pc}
114@ CHECK: warning: use of SP or PC in the list is deprecated
115@ CHECK: stmib sp!, {pc}
116@ CHECK: ^
117	stmib r0!, {sp}
118@ CHECK: warning: use of SP or PC in the list is deprecated
119@ CHECK: stmib r0!, {sp}
120@ CHECK: ^
121
122
123	.global push
124	.type push,%function
125push:
126	push {r0, pc}
127@ CHECK: warning: use of SP or PC in the list is deprecated
128@ CHECK: push {r0, pc}
129@ CHECK: ^
130	push {r0, sp}
131@ CHECK: warning: use of SP or PC in the list is deprecated
132@ CHECK: push {r0, sp}
133@ CHECK: ^
134	push {r0, sp, pc}
135@ CHECK: warning: use of SP or PC in the list is deprecated
136@ CHECK: push {r0, sp, pc}
137@ CHECK: ^
138	push {sp, pc}
139@ CHECK: warning: use of SP or PC in the list is deprecated
140@ CHECK: push {sp, pc}
141@ CHECK: ^
142	push {pc}
143@ CHECK: warning: use of SP or PC in the list is deprecated
144@ CHECK: push {pc}
145@ CHECK: ^
146	push {sp}
147@ CHECK: warning: use of SP or PC in the list is deprecated
148@ CHECK: push {sp}
149@ CHECK: ^
150
151	.global ldm
152	.type ldm,%function
153ldm:
154	ldm r0!, {r1, sp}
155@ CHECK: warning: use of SP in the list is deprecated
156	ldm r0!, {sp}
157@ CHECK: warning: use of SP in the list is deprecated
158	ldm r0!, {r1, lr, pc}
159@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
160	ldm r0!, {lr, pc}
161@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
162
163	.global ldmda
164	.type ldmda,%function
165ldmda:
166	ldmda r0!, {r1, sp}
167@ CHECK: warning: use of SP in the list is deprecated
168	ldmda r0!, {sp}
169@ CHECK: warning: use of SP in the list is deprecated
170	ldmda r0!, {r1, lr, pc}
171@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
172	ldmda r0!, {lr, pc}
173@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
174
175	.global ldmdb
176	.type ldmdb,%function
177ldmdb:
178	ldmdb r0!, {r1, sp}
179@ CHECK: warning: use of SP in the list is deprecated
180	ldmdb r0!, {sp}
181@ CHECK: warning: use of SP in the list is deprecated
182	ldmdb r0!, {r1, lr, pc}
183@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
184	ldmdb r0!, {lr, pc}
185@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
186
187	.global ldmib
188	.type ldmib,%function
189ldmib:
190	ldmib r0!, {r1, sp}
191@ CHECK: warning: use of SP in the list is deprecated
192	ldmib r0!, {sp}
193@ CHECK: warning: use of SP in the list is deprecated
194	ldmib r0!, {r1, lr, pc}
195@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
196	ldmib r0!, {lr, pc}
197@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
198
199	.global pop
200	.type pop,%function
201pop:
202	pop {r0, sp}
203@ CHECK: warning: use of SP in the list is deprecated
204@ CHECK-V7: error: writeback register not allowed in register list
205	pop {sp}
206@ CHECK: warning: use of SP in the list is deprecated
207@ CHECK-V7: error: writeback register not allowed in register list
208	pop {r0, lr, pc}
209@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
210	pop {lr, pc}
211@ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
212
213	.global valid
214	.type valid,%function
215valid:
216	stmdaeq r0, {r0}
217@ CHECK: stmdaeq r0, {r0}
218	ldmdaeq r0, {r0}
219@ CHECK: ldmdaeq r0, {r0}
220	pop {r0, pc}
221@ CHECK: pop {r0, pc}
222
223