@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
@ RUN:   | llvm-readobj -s -sd | FileCheck %s

@ Check for different combination of .setfp, .pad, .save and .vsave.

	.syntax	unified

@-------------------------------------------------------------------------------
@ TEST1: Check .pad before .setfp directive.
@-------------------------------------------------------------------------------
	.section	.TEST1
	.globl	func1
	.type	func1,%function
	.align	2
	.fnstart
func1:
	.pad	#12
	sub	sp, sp, #12
	.setfp	fp, sp, #8
	add	fp, sp, #8
	sub	sp, fp, #8
	add	sp, sp, #12
	bx	lr
	.personality	__gxx_personality_v0
	.handlerdata
	.fnend

@ CHECK: Section {
@ CHECK:   Name: .ARM.extab.TEST1
@ CHECK:   SectionData (
@ CHECK:     0000: 00000000 B0009B00                    |........|
@ CHECK:   )
@ CHECK: }



@-------------------------------------------------------------------------------
@ TEST2: Check .pad after .setfp directive.
@-------------------------------------------------------------------------------
	.section	.TEST2
	.globl	func2
	.type	func2,%function
	.align	2
	.fnstart
func2:
	.setfp	fp, sp, #8
	add	fp, sp, #8
	.pad	#12
	sub	sp, sp, #12
	add	sp, sp, #12
	sub	sp, fp, #8
	bx	lr
	.personality	__gxx_personality_v0
	.handlerdata
	.fnend

@ CHECK: Section {
@ CHECK:   Name: .ARM.extab.TEST2
@ CHECK:   SectionData (
@ CHECK:     0000: 00000000 B0419B00                    |.....A..|
@ CHECK:   )
@ CHECK: }



@-------------------------------------------------------------------------------
@ TEST3: Check .setfp, .pad, .setfp directive.
@-------------------------------------------------------------------------------
	.section	.TEST3
	.globl	func3
	.type	func3,%function
	.align	2
	.fnstart
func3:
	@ prologue:
	.setfp	fp, sp, #4
	add	fp, sp, #4
	.pad	#8
	sub	sp, sp, #8
	.setfp	fp, sp, #4
	add	fp, sp, #4

	@ epilogue:
	add	sp, fp, #4
	bx	lr
	.personality	__gxx_personality_v0
	.handlerdata
	.fnend

@ CHECK: Section {
@ CHECK:   Name: .ARM.extab.TEST3
@ CHECK:   SectionData (
@ CHECK:     0000: 00000000 B0009B00                    |........|
@ CHECK:   )
@ CHECK: }



@-------------------------------------------------------------------------------
@ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive.
@-------------------------------------------------------------------------------
	.section	.TEST4
	.globl	func4
	.type	func4,%function
	.align	2
	.fnstart
func4:
	@ prologue:
	.setfp	fp, sp, #8
	add	fp, sp, #8
	.setfp	fp, fp, #8
	add	fp, fp, #8

	@ epilogue:
	sub	sp, fp, #16
	bx	lr
	.personality	__gxx_personality_v0
	.handlerdata
	.fnend

@ CHECK: Section {
@ CHECK:   Name: .ARM.extab.TEST4
@ CHECK:   SectionData (
@ CHECK:     0000: 00000000 B0439B00                    |.....C..|
@ CHECK:   )
@ CHECK: }



@-------------------------------------------------------------------------------
@ TEST5: Check .setfp, .save, .setfp directive.
@-------------------------------------------------------------------------------
	.section	.TEST5
	.globl	func5
	.type	func5,%function
	.align	2
	.fnstart
func5:
	@ prologue:
	.setfp	fp, sp, #16
	add	fp, sp, #16
	.save	{r4, r5, r6, r7, r8}
	push	{r4, r5, r6, r7, r8}
	.pad	#8
	add	sp, sp, #8
	.pad	#8
	sub	sp, sp, #8
	.save	{r9, r10}
	push	{r9, r10}
	.setfp	fp, sp, #24
	add	fp, sp, #24

	@ epilogue:
	sub	sp, fp, #24
	pop	{r9, r10}
	add	sp, sp, #16
	pop	{r4, r5, r6, r7, r8}
	bx	lr
	.personality	__gxx_personality_v0
	.handlerdata
	.fnend

@ CHECK: Section {
@ CHECK:   Name: .ARM.extab.TEST5
@ CHECK:   SectionData (
@ CHECK:     0000: 00000000 80459B01 B0A40360           |.....E.....`|
@ CHECK:   )
@ CHECK: }