1 ## Check interpretation of the packed unwind info format.
3 // REQUIRES
: aarch64-registered-target
4 // RUN
: llvm-mc
-filetype
=obj
-triple aarch64-windows
%s
-o
%t.o
5 // RUN
: llvm-readobj
--unwind
%t.o | FileCheck
%s
7 // CHECK
: UnwindInformation
[
8 // CHECK-NEXT
: RuntimeFunction
{
9 // CHECK-NEXT
: Function
: func1
10 // CHECK-NEXT
: Fragment
: No
11 // CHECK-NEXT
: FunctionLength
: 88
12 // CHECK-NEXT
: RegF
: 7
13 // CHECK-NEXT
: RegI
: 10
14 // CHECK-NEXT
: HomedParameters
: No
16 // CHECK-NEXT
: FrameSize
: 160
17 // CHECK-NEXT
: Prologue
[
18 // CHECK-NEXT
: sub sp
, sp
, #16
19 // CHECK-NEXT
: stp d14
, d15
, [sp
, #128]
20 // CHECK-NEXT
: stp d12
, d13
, [sp
, #112]
21 // CHECK-NEXT
: stp d10
, d11
, [sp
, #96]
22 // CHECK-NEXT
: stp d8
, d9
, [sp
, #80]
23 // CHECK-NEXT
: stp x27
, x28
, [sp
, #64]
24 // CHECK-NEXT
: stp x25
, x26
, [sp
, #48]
25 // CHECK-NEXT
: stp x23
, x24
, [sp
, #32]
26 // CHECK-NEXT
: stp x21
, x22
, [sp
, #16]
27 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-144]!
31 // CHECK-NEXT
: RuntimeFunction
{
32 // CHECK-NEXT
: Function
: func2
33 // CHECK-NEXT
: Fragment
: No
34 // CHECK-NEXT
: FunctionLength
: 48
35 // CHECK-NEXT
: RegF
: 2
36 // CHECK-NEXT
: RegI
: 3
37 // CHECK-NEXT
: HomedParameters
: No
39 // CHECK-NEXT
: FrameSize
: 48
40 // CHECK-NEXT
: Prologue
[
41 // CHECK-NEXT
: str d10
, [sp
, #40]
42 // CHECK-NEXT
: stp d8
, d9
, [sp
, #24]
43 // CHECK-NEXT
: str x21
, [sp
, #16]
44 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-48]!
48 // CHECK-NEXT
: RuntimeFunction
{
49 // CHECK-NEXT
: Function
: func3
50 // CHECK-NEXT
: Fragment
: No
51 // CHECK-NEXT
: FunctionLength
: 40
52 // CHECK-NEXT
: RegF
: 3
53 // CHECK-NEXT
: RegI
: 1
54 // CHECK-NEXT
: HomedParameters
: No
56 // CHECK-NEXT
: FrameSize
: 48
57 // CHECK-NEXT
: Prologue
[
58 // CHECK-NEXT
: stp d10
, d11
, [sp
, #24]
59 // CHECK-NEXT
: stp d8
, d9
, [sp
, #8]
60 // CHECK-NEXT
: str x19
, [sp
, #-48]!
64 // CHECK-NEXT
: RuntimeFunction
{
65 // CHECK-NEXT
: Function
: func4
66 // CHECK-NEXT
: Fragment
: No
67 // CHECK-NEXT
: FunctionLength
: 24
68 // CHECK-NEXT
: RegF
: 1
69 // CHECK-NEXT
: RegI
: 0
70 // CHECK-NEXT
: HomedParameters
: No
72 // CHECK-NEXT
: FrameSize
: 48
73 // CHECK-NEXT
: Prologue
[
74 // CHECK-NEXT
: sub sp
, sp
, #32
75 // CHECK-NEXT
: stp d8
, d9
, [sp
, #-16]!
79 // CHECK-NEXT
: RuntimeFunction
{
80 // CHECK-NEXT
: Function
: func5
81 // CHECK-NEXT
: Fragment
: No
82 // CHECK-NEXT
: FunctionLength
: 56
83 // CHECK-NEXT
: RegF
: 0
84 // CHECK-NEXT
: RegI
: 1
85 // CHECK-NEXT
: HomedParameters
: Yes
87 // CHECK-NEXT
: FrameSize
: 112
88 // CHECK-NEXT
: Prologue
[
89 // CHECK-NEXT
: sub sp
, sp
, #32
90 // CHECK-NEXT
: stp x6
, x7
, [sp
, #64]
91 // CHECK-NEXT
: stp x4
, x5
, [sp
, #48]
92 // CHECK-NEXT
: stp x2
, x3
, [sp
, #32]
93 // CHECK-NEXT
: stp x0
, x1
, [sp
, #16]
94 // CHECK-NEXT
: str x19
, [sp
, #-80]!
98 // CHECK-NEXT
: RuntimeFunction
{
99 // CHECK-NEXT
: Function
: func6
100 // CHECK-NEXT
: Fragment
: No
101 // CHECK-NEXT
: FunctionLength
: 48
102 // CHECK-NEXT
: RegF
: 0
103 // CHECK-NEXT
: RegI
: 0
104 // CHECK-NEXT
: HomedParameters
: Yes
106 // CHECK-NEXT
: FrameSize
: 112
107 // CHECK-NEXT
: Prologue
[
108 // CHECK-NEXT
: sub sp
, sp
, #48
109 // CHECK-NEXT
: stp x6
, x7
, [sp
, #48]
110 // CHECK-NEXT
: stp x4
, x5
, [sp
, #32]
111 // CHECK-NEXT
: stp x2
, x3
, [sp
, #16]
112 // CHECK-NEXT
: stp x0
, x1
, [sp
, #-64]!
116 // CHECK-NEXT
: RuntimeFunction
{
117 // CHECK-NEXT
: Function
: func7
118 // CHECK-NEXT
: Fragment
: No
119 // CHECK-NEXT
: FunctionLength
: 24
120 // CHECK-NEXT
: RegF
: 0
121 // CHECK-NEXT
: RegI
: 0
122 // CHECK-NEXT
: HomedParameters
: No
124 // CHECK-NEXT
: FrameSize
: 32
125 // CHECK-NEXT
: Prologue
[
126 // CHECK-NEXT
: sub sp
, sp
, #16
127 // CHECK-NEXT
: str
lr, [sp
, #-16]!
131 // CHECK-NEXT
: RuntimeFunction
{
132 // CHECK-NEXT
: Function
: func8
133 // CHECK-NEXT
: Fragment
: No
134 // CHECK-NEXT
: FunctionLength
: 24
135 // CHECK-NEXT
: RegF
: 0
136 // CHECK-NEXT
: RegI
: 1
137 // CHECK-NEXT
: HomedParameters
: No
139 // CHECK-NEXT
: FrameSize
: 32
140 // CHECK-NEXT
: Prologue
[
141 // CHECK-NEXT
: sub sp
, sp
, #16
142 // CHECK-NEXT
: INVALID
!
146 // CHECK-NEXT
: RuntimeFunction
{
147 // CHECK-NEXT
: Function
: func9
148 // CHECK-NEXT
: Fragment
: No
149 // CHECK-NEXT
: FunctionLength
: 32
150 // CHECK-NEXT
: RegF
: 0
151 // CHECK-NEXT
: RegI
: 2
152 // CHECK-NEXT
: HomedParameters
: No
154 // CHECK-NEXT
: FrameSize
: 32
155 // CHECK-NEXT
: Prologue
[
156 // CHECK-NEXT
: str
lr, [sp
, #16]
157 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-32]!
161 // CHECK-NEXT
: RuntimeFunction
{
162 // CHECK-NEXT
: Function
: func10
163 // CHECK-NEXT
: Fragment
: No
164 // CHECK-NEXT
: FunctionLength
: 32
165 // CHECK-NEXT
: RegF
: 0
166 // CHECK-NEXT
: RegI
: 3
167 // CHECK-NEXT
: HomedParameters
: No
169 // CHECK-NEXT
: FrameSize
: 48
170 // CHECK-NEXT
: Prologue
[
171 // CHECK-NEXT
: sub sp
, sp
, #16
172 // CHECK-NEXT
: stp x21
, lr, [sp
, #16]
173 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-32]!
177 // CHECK-NEXT
: RuntimeFunction
{
178 // CHECK-NEXT
: Function
: func11
179 // CHECK-NEXT
: Fragment
: No
180 // CHECK-NEXT
: FunctionLength
: 32
181 // CHECK-NEXT
: RegF
: 0
182 // CHECK-NEXT
: RegI
: 2
183 // CHECK-NEXT
: HomedParameters
: No
185 // CHECK-NEXT
: FrameSize
: 48
186 // CHECK-NEXT
: Prologue
[
187 // CHECK-NEXT
: mov x29
, sp
188 // CHECK-NEXT
: stp x29
, lr, [sp
, #-32]!
189 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-16]!
193 // CHECK-NEXT
: RuntimeFunction
{
194 // CHECK-NEXT
: Function
: func12
195 // CHECK-NEXT
: Fragment
: No
196 // CHECK-NEXT
: FunctionLength
: 40
197 // CHECK-NEXT
: RegF
: 0
198 // CHECK-NEXT
: RegI
: 2
199 // CHECK-NEXT
: HomedParameters
: No
201 // CHECK-NEXT
: FrameSize
: 544
202 // CHECK-NEXT
: Prologue
[
203 // CHECK-NEXT
: mov x29
, sp
204 // CHECK-NEXT
: stp x29
, lr, [sp
, #0]
205 // CHECK-NEXT
: sub sp
, sp
, #528
206 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-16]!
210 // CHECK-NEXT
: RuntimeFunction
{
211 // CHECK-NEXT
: Function
: func13
212 // CHECK-NEXT
: Fragment
: No
213 // CHECK-NEXT
: FunctionLength
: 48
214 // CHECK-NEXT
: RegF
: 0
215 // CHECK-NEXT
: RegI
: 2
216 // CHECK-NEXT
: HomedParameters
: No
218 // CHECK-NEXT
: FrameSize
: 4112
219 // CHECK-NEXT
: Prologue
[
220 // CHECK-NEXT
: mov x29
, sp
221 // CHECK-NEXT
: stp x29
, lr, [sp
, #0]
222 // CHECK-NEXT
: sub sp
, sp
, #16
223 // CHECK-NEXT
: sub sp
, sp
, #4080
224 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-16]!
228 // CHECK-NEXT
: RuntimeFunction
{
229 // CHECK-NEXT
: Function
: func14
230 // CHECK-NEXT
: Fragment
: No
231 // CHECK-NEXT
: FunctionLength
: 32
232 // CHECK-NEXT
: RegF
: 0
233 // CHECK-NEXT
: RegI
: 2
234 // CHECK-NEXT
: HomedParameters
: No
236 // CHECK-NEXT
: FrameSize
: 4112
237 // CHECK-NEXT
: Prologue
[
238 // CHECK-NEXT
: sub sp
, sp
, #16
239 // CHECK-NEXT
: sub sp
, sp
, #4080
240 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-16]!
244 // CHECK-NEXT
: RuntimeFunction
{
245 // CHECK-NEXT
: Function
: func15
246 // CHECK-NEXT
: Fragment
: No
247 // CHECK-NEXT
: FunctionLength
: 24
248 // CHECK-NEXT
: RegF
: 0
249 // CHECK-NEXT
: RegI
: 2
250 // CHECK-NEXT
: HomedParameters
: No
252 // CHECK-NEXT
: FrameSize
: 560
253 // CHECK-NEXT
: Prologue
[
254 // CHECK-NEXT
: sub sp
, sp
, #544
255 // CHECK-NEXT
: stp x19
, x20
, [sp
, #-16]!
259 // CHECK-NEXT
: RuntimeFunction
{
260 // CHECK-NEXT
: Function
: func16
261 // CHECK-NEXT
: Fragment
: No
262 // CHECK-NEXT
: FunctionLength
: 56
263 // CHECK-NEXT
: RegF
: 0
264 // CHECK-NEXT
: RegI
: 0
265 // CHECK-NEXT
: HomedParameters
: Yes
267 // CHECK-NEXT
: FrameSize
: 112
268 // CHECK-NEXT
: Prologue
[
269 // CHECK-NEXT
: sub sp
, sp
, #32
270 // CHECK-NEXT
: stp x6
, x7
, [sp
, #64]
271 // CHECK-NEXT
: stp x4
, x5
, [sp
, #48]
272 // CHECK-NEXT
: stp x2
, x3
, [sp
, #32]
273 // CHECK-NEXT
: stp x0
, x1
, [sp
, #16]
274 // CHECK-NEXT
: str
lr, [sp
, #-80]!
302 .long 0x050ae059 // FunctionLength=22 RegF=7 RegI=10 H=0 CR=0 FrameSize=10
304 .long 0x01834031 // FunctionLength=12 RegF=2 RegI=3 H=0 CR=0 FrameSize=3
306 .long 0x01816029 // FunctionLength=10 RegF=3 RegI=1 H=0 CR=0 FrameSize=3
308 .long 0x01802019 // FunctionLength=6 RegF=1 RegI=0 H=0 CR=0 FrameSize=3
310 .long 0x03910039 // FunctionLength=14 RegF=0 RegI=1 H=1 CR=0 FrameSize=7
312 .long 0x03900031 // FunctionLength=12 RegF=0 RegI=0 H=1 CR=0 FrameSize=7
314 .long 0x01200019 // FunctionLength=6 RegF=0 RegI=0 H=0 CR=1 FrameSize=2
316 .long 0x01210019 // FunctionLength=6 RegF=0 RegI=1 H=0 CR=1 FrameSize=2
318 .long 0x01220021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=1 FrameSize=2
320 .long 0x01a30021 // FunctionLength=8 RegF=0 RegI=3 H=0 CR=1 FrameSize=3
322 .long 0x01e20021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=3 FrameSize=3
324 .long 0x11620029 // FunctionLength=10 RegF=0 RegI=2 H=0 CR=3 FrameSize=34
326 .long 0x80e20031 // FunctionLength=12 RegF=0 RegI=2 H=0 CR=3 FrameSize=257
328 .long 0x80820021 // FunctionLength=8 RegF=0 RegI=2 H=0 CR=0 FrameSize=257
330 .long 0x11820019 // FunctionLength=6 RegF=0 RegI=2 H=0 CR=0 FrameSize=34
332 .long 0x03b00039 // FunctionLength=14 RegF=0 RegI=0 H=1 CR=1 FrameSize=7