1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
2@ RUN:   | llvm-readobj -s -sd -sr | FileCheck %s
3
4@ Check the .vsave directive
5
6@ The .vsave directive records the VFP registers which are pushed to the
7@ stack.  There are two different opcodes:
8@
9@     0xC800: pop d[(16+x+y):(16+x)]    @ d[16+x+y]-d[16+x] must be consecutive
10@     0xC900: pop d[(x+y):x]            @ d[x+y]-d[x] must be consecutive
11
12
13	.syntax unified
14
15@-------------------------------------------------------------------------------
16@ TEST1
17@-------------------------------------------------------------------------------
18	.section	.TEST1
19	.globl	func1a
20	.align	2
21	.type	func1a,%function
22	.fnstart
23func1a:
24	.vsave	{d0}
25	vpush	{d0}
26	vpop	{d0}
27	bx	lr
28	.personality __gxx_personality_v0
29	.handlerdata
30	.fnend
31
32	.globl	func1b
33	.align	2
34	.type	func1b,%function
35	.fnstart
36func1b:
37	.vsave	{d0, d1, d2, d3}
38	vpush	{d0, d1, d2, d3}
39	vpop	{d0, d1, d2, d3}
40	bx	lr
41	.personality __gxx_personality_v0
42	.handlerdata
43	.fnend
44
45	.globl	func1c
46	.align	2
47	.type	func1c,%function
48	.fnstart
49func1c:
50	.vsave	{d0, d1, d2, d3, d4, d5, d6, d7}
51	vpush	{d0, d1, d2, d3, d4, d5, d6, d7}
52	vpop	{d0, d1, d2, d3, d4, d5, d6, d7}
53	bx	lr
54	.personality __gxx_personality_v0
55	.handlerdata
56	.fnend
57
58	.globl	func1d
59	.align	2
60	.type	func1d,%function
61	.fnstart
62func1d:
63	.vsave	{d2, d3, d4, d5, d6, d7}
64	vpush	{d2, d3, d4, d5, d6, d7}
65	vpop	{d2, d3, d4, d5, d6, d7}
66	bx	lr
67	.personality __gxx_personality_v0
68	.handlerdata
69	.fnend
70
71@ CHECK: Section {
72@ CHECK:   Name: .ARM.extab.TEST1
73@ CHECK:   SectionData (
74@ CHECK:     0000: 00000000 B000C900 00000000 B003C900  |................|
75@ CHECK:     0010: 00000000 B007C900 00000000 B025C900  |.............%..|
76@ CHECK:   )
77@ CHECK: }
78
79
80
81@-------------------------------------------------------------------------------
82@ TEST2
83@-------------------------------------------------------------------------------
84	.section	.TEST2
85	.globl	func2a
86	.align	2
87	.type	func2a,%function
88	.fnstart
89func2a:
90	.vsave	{d16}
91	vpush	{d16}
92	vpop	{d16}
93	bx	lr
94	.personality __gxx_personality_v0
95	.handlerdata
96	.fnend
97
98	.globl	func2b
99	.align	2
100	.type	func2b,%function
101	.fnstart
102func2b:
103	.vsave	{d16, d17, d18, d19}
104	vpush	{d16, d17, d18, d19}
105	vpop	{d16, d17, d18, d19}
106	bx	lr
107	.personality __gxx_personality_v0
108	.handlerdata
109	.fnend
110
111	.globl	func2c
112	.align	2
113	.type	func2c,%function
114	.fnstart
115func2c:
116	.vsave	{d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
117	vpush	{d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
118	vpop	{d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
119	bx	lr
120	.personality __gxx_personality_v0
121	.handlerdata
122	.fnend
123
124@ CHECK: Section {
125@ CHECK:   Name: .ARM.extab.TEST2
126@ CHECK:   SectionData (
127@ CHECK:     0000: 00000000 B000C800 00000000 B003C800  |................|
128@ CHECK:     0010: 00000000 B00FC800                    |........|
129@ CHECK:   )
130@ CHECK: }
131