1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
2@ RUN:   | llvm-readobj -S --sd - | FileCheck %s
3
4@ Check for different combination of .setfp, .pad, .save and .vsave.
5
6	.syntax	unified
7
8@-------------------------------------------------------------------------------
9@ TEST1: Check .pad before .setfp directive.
10@-------------------------------------------------------------------------------
11	.section	.TEST1
12	.globl	func1
13	.type	func1,%function
14	.align	2
15	.fnstart
16func1:
17	.pad	#12
18	sub	sp, sp, #12
19	.setfp	fp, sp, #8
20	add	fp, sp, #8
21	sub	sp, fp, #8
22	add	sp, sp, #12
23	bx	lr
24	.personality	__gxx_personality_v0
25	.handlerdata
26	.fnend
27
28@ CHECK: Section {
29@ CHECK:   Name: .ARM.extab.TEST1
30@ CHECK:   SectionData (
31@ CHECK:     0000: 00000000 B0009B00                    |........|
32@ CHECK:   )
33@ CHECK: }
34
35
36
37@-------------------------------------------------------------------------------
38@ TEST2: Check .pad after .setfp directive.
39@-------------------------------------------------------------------------------
40	.section	.TEST2
41	.globl	func2
42	.type	func2,%function
43	.align	2
44	.fnstart
45func2:
46	.setfp	fp, sp, #8
47	add	fp, sp, #8
48	.pad	#12
49	sub	sp, sp, #12
50	add	sp, sp, #12
51	sub	sp, fp, #8
52	bx	lr
53	.personality	__gxx_personality_v0
54	.handlerdata
55	.fnend
56
57@ CHECK: Section {
58@ CHECK:   Name: .ARM.extab.TEST2
59@ CHECK:   SectionData (
60@ CHECK:     0000: 00000000 B0419B00                    |.....A..|
61@ CHECK:   )
62@ CHECK: }
63
64
65
66@-------------------------------------------------------------------------------
67@ TEST3: Check .setfp, .pad, .setfp directive.
68@-------------------------------------------------------------------------------
69	.section	.TEST3
70	.globl	func3
71	.type	func3,%function
72	.align	2
73	.fnstart
74func3:
75	@ prologue:
76	.setfp	fp, sp, #4
77	add	fp, sp, #4
78	.pad	#8
79	sub	sp, sp, #8
80	.setfp	fp, sp, #4
81	add	fp, sp, #4
82
83	@ epilogue:
84	add	sp, fp, #4
85	bx	lr
86	.personality	__gxx_personality_v0
87	.handlerdata
88	.fnend
89
90@ CHECK: Section {
91@ CHECK:   Name: .ARM.extab.TEST3
92@ CHECK:   SectionData (
93@ CHECK:     0000: 00000000 B0009B00                    |........|
94@ CHECK:   )
95@ CHECK: }
96
97
98
99@-------------------------------------------------------------------------------
100@ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive.
101@-------------------------------------------------------------------------------
102	.section	.TEST4
103	.globl	func4
104	.type	func4,%function
105	.align	2
106	.fnstart
107func4:
108	@ prologue:
109	.setfp	fp, sp, #8
110	add	fp, sp, #8
111	.setfp	fp, fp, #8
112	add	fp, fp, #8
113
114	@ epilogue:
115	sub	sp, fp, #16
116	bx	lr
117	.personality	__gxx_personality_v0
118	.handlerdata
119	.fnend
120
121@ CHECK: Section {
122@ CHECK:   Name: .ARM.extab.TEST4
123@ CHECK:   SectionData (
124@ CHECK:     0000: 00000000 B0439B00                    |.....C..|
125@ CHECK:   )
126@ CHECK: }
127
128
129
130@-------------------------------------------------------------------------------
131@ TEST5: Check .setfp, .save, .setfp directive.
132@-------------------------------------------------------------------------------
133	.section	.TEST5
134	.globl	func5
135	.type	func5,%function
136	.align	2
137	.fnstart
138func5:
139	@ prologue:
140	.setfp	fp, sp, #16
141	add	fp, sp, #16
142	.save	{r4, r5, r6, r7, r8}
143	push	{r4, r5, r6, r7, r8}
144	.pad	#8
145	add	sp, sp, #8
146	.pad	#8
147	sub	sp, sp, #8
148	.save	{r9, r10}
149	push	{r9, r10}
150	.setfp	fp, sp, #24
151	add	fp, sp, #24
152
153	@ epilogue:
154	sub	sp, fp, #24
155	pop	{r9, r10}
156	add	sp, sp, #16
157	pop	{r4, r5, r6, r7, r8}
158	bx	lr
159	.personality	__gxx_personality_v0
160	.handlerdata
161	.fnend
162
163@ CHECK: Section {
164@ CHECK:   Name: .ARM.extab.TEST5
165@ CHECK:   SectionData (
166@ CHECK:     0000: 00000000 80459B01 B0A40360           |.....E.....`|
167@ CHECK:   )
168@ CHECK: }
169