118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ RUN:   | llvm-readobj -s -sd | FileCheck %s
318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ Check for different combination of .setfp, .pad, .save and .vsave.
518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.syntax	unified
718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST1: Check .pad before .setfp directive.
1018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
1118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST1
1218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func1
1318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func1,%function
1418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
1518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
1618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc1:
1718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.pad	#12
1818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, sp, #12
1918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #8
2018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #8
2118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, fp, #8
2218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	sp, sp, #12
2318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
2418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality	__gxx_personality_v0
2518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
2618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
2718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
2818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
2918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST1
3018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
3118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 B0009B00                    |........|
3218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
3318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
3418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
3518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
3618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
3718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
3818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST2: Check .pad after .setfp directive.
3918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
4018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST2
4118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func2
4218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func2,%function
4318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
4418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
4518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc2:
4618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #8
4718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #8
4818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.pad	#12
4918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, sp, #12
5018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	sp, sp, #12
5118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, fp, #8
5218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
5318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality	__gxx_personality_v0
5418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
5518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
5618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
5718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
5818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST2
5918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
6018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 B0419B00                    |.....A..|
6118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
6218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
6318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
6418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
6518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
6618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
6718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST3: Check .setfp, .pad, .setfp directive.
6818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
6918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST3
7018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func3
7118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func3,%function
7218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
7318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
7418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc3:
7518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ prologue:
7618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #4
7718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #4
7818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.pad	#8
7918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, sp, #8
8018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #4
8118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #4
8218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
8318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ epilogue:
8418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	sp, fp, #4
8518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
8618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality	__gxx_personality_v0
8718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
8818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
8918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
9018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
9118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST3
9218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
9318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 B0009B00                    |........|
9418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
9518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
9618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
9718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
9818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
9918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
10018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive.
10118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
10218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST4
10318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func4
10418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func4,%function
10518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
10618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
10718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc4:
10818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ prologue:
10918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #8
11018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #8
11118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, fp, #8
11218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, fp, #8
11318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
11418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ epilogue:
11518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, fp, #16
11618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
11718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality	__gxx_personality_v0
11818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
11918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
12018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
12118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
12218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST4
12318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
12418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 B0439B00                    |.....C..|
12518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
12618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
12718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
12818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
12918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
13018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
13118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST5: Check .setfp, .save, .setfp directive.
13218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
13318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST5
13418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func5
13518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func5,%function
13618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
13718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
13818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc5:
13918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ prologue:
14018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #16
14118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #16
14218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.save	{r4, r5, r6, r7, r8}
14318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	push	{r4, r5, r6, r7, r8}
14418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.pad	#8
14518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	sp, sp, #8
14618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.pad	#8
14718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, sp, #8
14818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.save	{r9, r10}
14918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	push	{r9, r10}
15018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.setfp	fp, sp, #24
15118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	fp, sp, #24
15218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
15318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	@ epilogue:
15418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	sub	sp, fp, #24
15518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	pop	{r9, r10}
15618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	add	sp, sp, #16
15718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	pop	{r4, r5, r6, r7, r8}
15818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
15918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality	__gxx_personality_v0
16018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
16118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
16218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
16318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
16418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST5
16518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
16618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 80459B01 B0A40360           |.....E.....`|
16718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
16818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
169