1c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
2c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN:   | llvm-readobj -s -sd | FileCheck %s
3c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
4c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the .save directive
5c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
6c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The .save directive records the GPR registers which are pushed to the
7c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ stack.  There are 4 different unwind opcodes:
8c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@
9c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@     0xB100: pop r[3:0]
10c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@     0xA0:   pop r[(4+x):4]		@ r[4+x]-r[4] must be consecutive.
11c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@     0xA8:   pop r14, r[(4+x):4]	@ r[4+x]-r[4] must be consecutive.
12c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@     0x8000: pop r[15:4]
13c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@
14c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ If register list specifed by .save directive is possible to be encoded
15c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ by 0xA0 or 0xA8, then the assembler should prefer them over 0x8000.
16c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
17c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
18c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.syntax unified
19c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
20c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
21c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST1
22c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
23c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.section	.TEST1
24c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func1a
25c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
26c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func1a,%function
27c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
28c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1a:
29c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r0}
30c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r0}
31c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r0}
32c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
33c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
34c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
35c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
36c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
37c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func1b
38c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
39c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func1b,%function
40c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
41c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1b:
42c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r0, r1}
43c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r0, r1}
44c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r0, r1}
45c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
46c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
47c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
48c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
49c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
50c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func1c
51c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
52c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func1c,%function
53c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
54c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1c:
55c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r0, r2}
56c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r0, r2}
57c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r0, r2}
58c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
59c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
60c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
61c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
62c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
63c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func1d
64c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
65c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func1d,%function
66c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
67c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1d:
68c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r1, r2}
69c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r1, r2}
70c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r1, r2}
71c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
72c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
73c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
74c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
75c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
76c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func1e
77c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
78c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func1e,%function
79c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
80c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1e:
81c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r0, r1, r2, r3}
82c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r0, r1, r2, r3}
83c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r0, r1, r2, r3}
84c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
85c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
86c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
87c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
88c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
89c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
90c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xB000 unwind opcode.
91c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
92c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section {
93c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   Name: .ARM.extab.TEST1
94c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   SectionData (
95c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0000: 00000000 B001B100 00000000 B003B100  |................|
96c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0010: 00000000 B005B100 00000000 B006B100  |................|
97c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0020: 00000000 B00FB100                    |........|
98c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   )
99c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: }
100c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
101c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
102c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
103c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
104c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST2
105c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
106c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.section	.TEST2
107c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func2a
108c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
109c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func2a,%function
110c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
111c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2a:
112c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4}
113c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4}
114c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4}
115c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
116c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
117c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
118c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
119c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
120c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func2b
121c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
122c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func2b,%function
123c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
124c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2b:
125c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5}
126c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5}
127c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5}
128c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
129c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
130c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
131c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
132c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
133c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func2c
134c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
135c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func2c,%function
136c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
137c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2c:
138c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r6, r7, r8, r9, r10, r11}
139c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r6, r7, r8, r9, r10, r11}
140c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r6, r7, r8, r9, r10, r11}
141c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
142c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
143c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
144c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
145c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
146c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
147c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xA0 unwind opcode.
148c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
149c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section {
150c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   Name: .ARM.extab.TEST2
151c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   SectionData (
152c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0000: 00000000 B0B0A000 00000000 B0B0A100  |................|
153c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0010: 00000000 B0B0A700                    |........|
154c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   )
155c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: }
156c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
157c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
158c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
159c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
160c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST3
161c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
162c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.section	.TEST3
163c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func3a
164c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
165c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func3a,%function
166c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
167c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3a:
168c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r14}
169c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r14}
170c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r14}
171c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
172c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
173c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
174c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
175c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
176c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func3b
177c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
178c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func3b,%function
179c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
180c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3b:
181c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r14}
182c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r14}
183c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r14}
184c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
185c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
186c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
187c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
188c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
189c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func3c
190c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
191c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func3c,%function
192c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
193c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3c:
194c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r6, r7, r8, r9, r10, r11, r14}
195c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r6, r7, r8, r9, r10, r11, r14}
196c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r6, r7, r8, r9, r10, r11, r14}
197c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
198c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
199c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
200c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
201c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
202c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
203c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xA8 unwind opcode.
204c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
205c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section {
206c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   Name: .ARM.extab.TEST3
207c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   SectionData (
208c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0000: 00000000 B0B0A800 00000000 B0B0A900  |................|
209c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0010: 00000000 B0B0AF00                    |........|
210c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   )
211c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: }
212c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
213c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
214c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
215c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
216c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST4
217c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
218c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.section	.TEST4
219c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func4a
220c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
221c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func4a,%function
222c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
223c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4a:
224c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
225c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
226c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
227c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
228c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
229c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
230c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
231c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
232c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func4b
233c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
234c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func4b,%function
235c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
236c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4b:
237c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	@ Note: r7 is missing intentionally.
238c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r6, r8, r9, r10, r11}
239c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r6, r8, r9, r10, r11}
240c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r6, r8, r9, r10, r11}
241c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
242c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
243c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
244c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
245c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
246c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func4c
247c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
248c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func4c,%function
249c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
250c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4c:
251c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	@ Note: r7 is missing intentionally.
252c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r4, r5, r6, r8, r9, r10, r11, r14}
253c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r4, r5, r6, r8, r9, r10, r11, r14}
254c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r4, r5, r6, r8, r9, r10, r11, r14}
255c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
256c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
257c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
258c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
259c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
260c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func4d
261c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
262c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func4d,%function
263c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
264c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4d:
265c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	@ Note: The register list is not start with r4.
266c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r5, r6, r7}
267c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r5, r6, r7}
268c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r5, r6, r7}
269c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
270c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
271c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
272c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
273c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
274c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.globl	func4e
275c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.align	2
276c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.type	func4e,%function
277c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnstart
278c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4e:
279c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	@ Note: The register list is not start with r4.
280c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.save	{r5, r6, r7, r14}
281c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	push	{r5, r6, r7, r14}
282c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	pop	{r5, r6, r7, r14}
283c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	bx	lr
284c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.personality __gxx_personality_v0
285c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.handlerdata
286c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien	.fnend
287c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien
288c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
289c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x8000 unwind opcode.
290c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@-------------------------------------------------------------------------------
291c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section {
292c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   Name: .ARM.extab.TEST4
293c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   SectionData (
294c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0000: 00000000 B0FF8500 00000000 B0F78000  |................|
295c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0010: 00000000 B0F78400 00000000 B00E8000  |................|
296c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:     0020: 00000000 B00E8400                    |........|
297c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK:   )
298c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: }
29918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
30018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
30118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
30218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
30318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST5
30418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
30518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.section	.TEST5
30618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func5a
30718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
30818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func5a,%function
30918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
31018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc5a:
31118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.save	{r0, r1, r2, r3, r4, r5, r6}
31218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	push	{r0, r1, r2, r3, r4, r5, r6}
31318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	pop	{r0, r1, r2, r3, r4, r5, r6}
31418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
31518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality __gxx_personality_v0
31618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
31718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
31818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
31918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.globl	func5b
32018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.align	2
32118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.type	func5b,%function
32218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnstart
32318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc5b:
32418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.save	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
32518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	push	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
32618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	pop	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}
32718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	bx	lr
32818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.personality __gxx_personality_v0
32918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.handlerdata
33018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien	.fnend
33118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien
33218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
33318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ Check the order of unwind opcode to pop registers.
33418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ 0xB10F "pop {r0-r3}" should be emitted before 0xA2 "pop {r4-r6}".
33518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ 0xB10F "pop {r0-r3}" should be emitted before 0x85FF "pop {r4-r12, r14}".
33618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@-------------------------------------------------------------------------------
33718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section {
33818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   Name: .ARM.extab.TEST5
33918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   SectionData (
34018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0000: 00000000 A20FB100 00000000 850FB101  |................|
34118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:     0010: B0B0B0FF                             |....|
34218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK:   )
34318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: }
344