1 // This test checks various cases around generating packed unwind info.
3 // RUN
: llvm-mc
-triple thumbv7-pc-win32
-filetype
=obj
%s | llvm-readobj
-u
- | FileCheck
%s
5 // CHECK
: RuntimeFunction
{
6 // CHECK-NEXT
: Function
: func6
7 // CHECK-NEXT
: Fragment
: No
8 // CHECK-NEXT
: FunctionLength
: 8
9 // CHECK-NEXT
: ReturnType
: bx
<reg
>
10 // CHECK-NEXT
: HomedParameters
: No
13 // CHECK-NEXT
: LinkRegister
: No
14 // CHECK-NEXT
: Chaining
: No
15 // CHECK-NEXT
: StackAdjustment
: 0
16 // CHECK-NEXT
: Prologue
[
18 // CHECK-NEXT
: Epilogue
[
19 // CHECK-NEXT
: bx
<reg
>
22 // CHECK-NEXT
: RuntimeFunction
{
23 // CHECK-NEXT
: Function
: func7
24 // CHECK-NEXT
: Fragment
: No
25 // CHECK-NEXT
: FunctionLength
: 8
26 // CHECK-NEXT
: ReturnType
: bx
<reg
>
27 // CHECK-NEXT
: HomedParameters
: No
30 // CHECK-NEXT
: LinkRegister
: No
31 // CHECK-NEXT
: Chaining
: No
32 // CHECK-NEXT
: StackAdjustment
: 0
33 // CHECK-NEXT
: Prologue
[
34 // CHECK-NEXT
: push
{r4}
36 // CHECK-NEXT
: Epilogue
[
37 // CHECK-NEXT
: pop
{r4}
38 // CHECK-NEXT
: bx
<reg
>
41 // CHECK-NEXT
: RuntimeFunction
{
42 // CHECK-NEXT
: Function
: func8
43 // CHECK-NEXT
: Fragment
: No
44 // CHECK-NEXT
: FunctionLength
: 10
45 // CHECK-NEXT
: ReturnType
: bx
<reg
>
46 // CHECK-NEXT
: HomedParameters
: No
49 // CHECK-NEXT
: LinkRegister
: Yes
50 // CHECK-NEXT
: Chaining
: No
51 // CHECK-NEXT
: StackAdjustment
: 0
52 // CHECK-NEXT
: Prologue
[
53 // CHECK-NEXT
: push
{r4, lr}
55 // CHECK-NEXT
: Epilogue
[
56 // CHECK-NEXT
: pop
{r4, lr}
57 // CHECK-NEXT
: bx
<reg
>
60 // CHECK-NEXT
: RuntimeFunction
{
61 // CHECK-NEXT
: Function
: func9
62 // CHECK-NEXT
: Fragment
: No
63 // CHECK-NEXT
: FunctionLength
: 24
64 // CHECK-NEXT
: ReturnType
: b.w
<target
>
65 // CHECK-NEXT
: HomedParameters
: No
68 // CHECK-NEXT
: LinkRegister
: Yes
69 // CHECK-NEXT
: Chaining
: No
70 // CHECK-NEXT
: StackAdjustment
: 32
71 // CHECK-NEXT
: Prologue
[
72 // CHECK-NEXT
: sub sp
, sp
, #32
73 // CHECK-NEXT
: vpush
{d8
}
74 // CHECK-NEXT
: push
{lr}
76 // CHECK-NEXT
: Epilogue
[
77 // CHECK-NEXT
: add sp
, sp
, #32
78 // CHECK-NEXT
: vpop
{d8
}
79 // CHECK-NEXT
: pop
{lr}
80 // CHECK-NEXT
: b.w
<target
>
83 // CHECK-NEXT
: RuntimeFunction
{
84 // CHECK-NEXT
: Function
: func10
85 // CHECK-NEXT
: Fragment
: No
86 // CHECK-NEXT
: FunctionLength
: 26
87 // CHECK-NEXT
: ReturnType
: bx
<reg
>
88 // CHECK-NEXT
: HomedParameters
: No
91 // CHECK-NEXT
: LinkRegister
: Yes
92 // CHECK-NEXT
: Chaining
: Yes
93 // CHECK-NEXT
: StackAdjustment
: 16
94 // CHECK-NEXT
: Prologue
[
95 // CHECK-NEXT
: sub sp
, sp
, #16
96 // CHECK-NEXT
: vpush
{d8-d9
}
97 // CHECK-NEXT
: mov
r11, sp
98 // CHECK-NEXT
: push
{r11, lr}
100 // CHECK-NEXT
: Epilogue
[
101 // CHECK-NEXT
: add sp
, sp
, #16
102 // CHECK-NEXT
: vpop
{d8-d9
}
103 // CHECK-NEXT
: pop
{r11, lr}
104 // CHECK-NEXT
: bx
<reg
>
107 // CHECK-NEXT
: RuntimeFunction
{
108 // CHECK-NEXT
: Function
: func11
109 // CHECK-NEXT
: Fragment
: No
110 // CHECK-NEXT
: FunctionLength
: 24
111 // CHECK-NEXT
: ReturnType
: pop
{pc
}
112 // CHECK-NEXT
: HomedParameters
: No
113 // CHECK-NEXT
: Reg
: 1
115 // CHECK-NEXT
: LinkRegister
: Yes
116 // CHECK-NEXT
: Chaining
: Yes
117 // CHECK-NEXT
: StackAdjustment
: 16
118 // CHECK-NEXT
: Prologue
[
119 // CHECK-NEXT
: sub sp
, sp
, #16
120 // CHECK-NEXT
: vpush
{d8-d9
}
121 // CHECK-NEXT
: mov
r11, sp
122 // CHECK-NEXT
: push
{r11, lr}
124 // CHECK-NEXT
: Epilogue
[
125 // CHECK-NEXT
: add sp
, sp
, #16
126 // CHECK-NEXT
: vpop
{d8-d9
}
127 // CHECK-NEXT
: pop
{r11, pc
}
130 // CHECK-NEXT
: RuntimeFunction
{
131 // CHECK-NEXT
: Function
: func12
132 // CHECK-NEXT
: Fragment
: No
133 // CHECK-NEXT
: FunctionLength
: 18
134 // CHECK-NEXT
: ReturnType
: b.w
<target
>
135 // CHECK-NEXT
: HomedParameters
: No
136 // CHECK-NEXT
: Reg
: 6
138 // CHECK-NEXT
: LinkRegister
: No
139 // CHECK-NEXT
: Chaining
: No
140 // CHECK-NEXT
: StackAdjustment
: 16
141 // CHECK-NEXT
: Prologue
[
142 // CHECK-NEXT
: sub sp
, sp
, #16
143 // CHECK-NEXT
: vpush
{d8-d14
}
145 // CHECK-NEXT
: Epilogue
[
146 // CHECK-NEXT
: add sp
, sp
, #16
147 // CHECK-NEXT
: vpop
{d8-d14
}
148 // CHECK-NEXT
: b.w
<target
>
151 // CHECK-NEXT
: RuntimeFunction
{
152 // CHECK-NEXT
: Function
: func13
153 // CHECK-NEXT
: Fragment
: No
154 // CHECK-NEXT
: FunctionLength
: 18
155 // CHECK-NEXT
: ReturnType
: pop
{pc
}
156 // CHECK-NEXT
: HomedParameters
: No
157 // CHECK-NEXT
: Reg
: 6
159 // CHECK-NEXT
: LinkRegister
: Yes
160 // CHECK-NEXT
: Chaining
: Yes
161 // CHECK-NEXT
: StackAdjustment
: 20
162 // CHECK-NEXT
: Prologue
[
163 // CHECK-NEXT
: sub sp
, sp
, #20
164 // CHECK-NEXT
: add.w
r11, sp
, #28
165 // CHECK-NEXT
: push
{r4-
r11, lr}
167 // CHECK-NEXT
: Epilogue
[
168 // CHECK-NEXT
: add sp
, sp
, #20
169 // CHECK-NEXT
: pop
{r4-
r11, pc
}
172 // CHECK-NEXT
: RuntimeFunction
{
173 // CHECK-NEXT
: Function
: func14
174 // CHECK-NEXT
: Fragment
: No
175 // CHECK-NEXT
: FunctionLength
: 14
176 // CHECK-NEXT
: ReturnType
: pop
{pc
}
177 // CHECK-NEXT
: HomedParameters
: No
178 // CHECK-NEXT
: Reg
: 7
180 // CHECK-NEXT
: LinkRegister
: Yes
181 // CHECK-NEXT
: Chaining
: No
182 // CHECK-NEXT
: StackAdjustment
: 20
183 // CHECK-NEXT
: Prologue
[
184 // CHECK-NEXT
: sub sp
, sp
, #20
185 // CHECK-NEXT
: push
{r4-
r11, lr}
187 // CHECK-NEXT
: Epilogue
[
188 // CHECK-NEXT
: add sp
, sp
, #20
189 // CHECK-NEXT
: pop
{r4-
r11, pc
}
192 // CHECK-NEXT
: RuntimeFunction
{
193 // CHECK-NEXT
: Function
: func15
194 // CHECK-NEXT
: Fragment
: No
195 // CHECK-NEXT
: FunctionLength
: 20
196 // CHECK-NEXT
: ReturnType
: pop
{pc
}
197 // CHECK-NEXT
: HomedParameters
: Yes
198 // CHECK-NEXT
: Reg
: 0
200 // CHECK-NEXT
: LinkRegister
: Yes
201 // CHECK-NEXT
: Chaining
: No
202 // CHECK-NEXT
: StackAdjustment
: 512
203 // CHECK-NEXT
: Prologue
[
204 // CHECK-NEXT
: sub sp
, sp
, #512
205 // CHECK-NEXT
: push
{r4, lr}
206 // CHECK-NEXT
: push
{r0-
r3}
208 // CHECK-NEXT
: Epilogue
[
209 // CHECK-NEXT
: add sp
, sp
, #512
210 // CHECK-NEXT
: pop
{r4}
211 // CHECK-NEXT
: ldr pc
, [sp
], #20
214 // CHECK-NEXT
: RuntimeFunction
{
215 // CHECK-NEXT
: Function
: func16
216 // CHECK-NEXT
: Fragment
: No
217 // CHECK-NEXT
: FunctionLength
: 20
218 // CHECK-NEXT
: ReturnType
: b.w
<target
>
219 // CHECK-NEXT
: HomedParameters
: Yes
220 // CHECK-NEXT
: Reg
: 7
222 // CHECK-NEXT
: LinkRegister
: Yes
223 // CHECK-NEXT
: Chaining
: Yes
224 // CHECK-NEXT
: StackAdjustment
: 0
225 // CHECK-NEXT
: Prologue
[
226 // CHECK-NEXT
: mov
r11, sp
227 // CHECK-NEXT
: push
{r11, lr}
228 // CHECK-NEXT
: push
{r0-
r3}
230 // CHECK-NEXT
: Epilogue
[
231 // CHECK-NEXT
: pop
{r11, lr}
232 // CHECK-NEXT
: add sp
, sp
, #16
233 // CHECK-NEXT
: b.w
<target
>
236 // CHECK-NEXT
: RuntimeFunction
{
237 // CHECK-NEXT
: Function
: func17
238 // CHECK-NEXT
: Fragment
: No
239 // CHECK-NEXT
: FunctionLength
: 20
240 // CHECK-NEXT
: ReturnType
: bx
<reg
>
241 // CHECK-NEXT
: HomedParameters
: Yes
242 // CHECK-NEXT
: Reg
: 0
244 // CHECK-NEXT
: LinkRegister
: No
245 // CHECK-NEXT
: Chaining
: No
246 // CHECK-NEXT
: StackAdjustment
: 512
247 // CHECK-NEXT
: Prologue
[
248 // CHECK-NEXT
: sub sp
, sp
, #512
249 // CHECK-NEXT
: push
{r4}
250 // CHECK-NEXT
: push
{r0-
r3}
252 // CHECK-NEXT
: Epilogue
[
253 // CHECK-NEXT
: add sp
, sp
, #512
254 // CHECK-NEXT
: pop
{r4}
255 // CHECK-NEXT
: add sp
, sp
, #16
256 // CHECK-NEXT
: bx
<reg
>
259 // CHECK-NEXT
: RuntimeFunction
{
260 // CHECK-NEXT
: Function
: func18
261 // CHECK-NEXT
: Fragment
: No
262 // CHECK-NEXT
: FunctionLength
: 6
263 // CHECK-NEXT
: ReturnType
: pop
{pc
}
264 // CHECK-NEXT
: HomedParameters
: No
265 // CHECK-NEXT
: Reg
: 7
267 // CHECK-NEXT
: LinkRegister
: Yes
268 // CHECK-NEXT
: Chaining
: No
269 // CHECK-NEXT
: StackAdjustment
: 4
270 // CHECK-NEXT
: Prologue
[
271 // CHECK-NEXT
: push
{r3, lr}
273 // CHECK-NEXT
: Epilogue
[
274 // CHECK-NEXT
: pop
{r3, pc
}
277 // CHECK-NEXT
: RuntimeFunction
{
278 // CHECK-NEXT
: Function
: func19
279 // CHECK-NEXT
: Fragment
: No
280 // CHECK-NEXT
: FunctionLength
: 12
281 // CHECK-NEXT
: ReturnType
: bx
<reg
>
282 // CHECK-NEXT
: HomedParameters
: Yes
283 // CHECK-NEXT
: Reg
: 0
285 // CHECK-NEXT
: LinkRegister
: No
286 // CHECK-NEXT
: Chaining
: No
287 // CHECK-NEXT
: StackAdjustment
: 16
288 // CHECK-NEXT
: Prologue
[
289 // CHECK-NEXT
: push
{r0-
r4}
290 // CHECK-NEXT
: push
{r0-
r3}
292 // CHECK-NEXT
: Epilogue
[
293 // CHECK-NEXT
: pop
{r0-
r4}
294 // CHECK-NEXT
: add sp
, sp
, #16
295 // CHECK-NEXT
: bx
<reg
>
298 // CHECK-NEXT
: RuntimeFunction
{
299 // CHECK-NEXT
: Function
: func20
300 // CHECK-NEXT
: Fragment
: No
301 // CHECK-NEXT
: FunctionLength
: 14
302 // CHECK-NEXT
: ReturnType
: bx
<reg
>
303 // CHECK-NEXT
: HomedParameters
: Yes
304 // CHECK-NEXT
: Reg
: 0
306 // CHECK-NEXT
: LinkRegister
: No
307 // CHECK-NEXT
: Chaining
: No
308 // CHECK-NEXT
: StackAdjustment
: 16
309 // CHECK-NEXT
: Prologue
[
310 // CHECK-NEXT
: push
{r0-
r4}
311 // CHECK-NEXT
: push
{r0-
r3}
313 // CHECK-NEXT
: Epilogue
[
314 // CHECK-NEXT
: add sp
, sp
, #16
315 // CHECK-NEXT
: pop
{r4}
316 // CHECK-NEXT
: add sp
, sp
, #16
317 // CHECK-NEXT
: bx
<reg
>
320 // CHECK-NEXT
: RuntimeFunction
{
321 // CHECK-NEXT
: Function
: func21
322 // CHECK-NEXT
: Fragment
: No
323 // CHECK-NEXT
: FunctionLength
: 14
324 // CHECK-NEXT
: ReturnType
: bx
<reg
>
325 // CHECK-NEXT
: HomedParameters
: Yes
326 // CHECK-NEXT
: Reg
: 0
328 // CHECK-NEXT
: LinkRegister
: No
329 // CHECK-NEXT
: Chaining
: No
330 // CHECK-NEXT
: StackAdjustment
: 16
331 // CHECK-NEXT
: Prologue
[
332 // CHECK-NEXT
: sub sp
, sp
, #16
333 // CHECK-NEXT
: push
{r4}
334 // CHECK-NEXT
: push
{r0-
r3}
336 // CHECK-NEXT
: Epilogue
[
337 // CHECK-NEXT
: pop
{r0-
r4}
338 // CHECK-NEXT
: add sp
, sp
, #16
339 // CHECK-NEXT
: bx
<reg
>
342 // CHECK-NEXT
: RuntimeFunction
{
343 // CHECK-NEXT
: Function
: func22
344 // CHECK-NEXT
: Fragment
: Yes
345 // CHECK-NEXT
: FunctionLength
: 14
346 // CHECK-NEXT
: ReturnType
: pop
{pc
}
347 // CHECK-NEXT
: HomedParameters
: Yes
348 // CHECK-NEXT
: Reg
: 0
350 // CHECK-NEXT
: LinkRegister
: Yes
351 // CHECK-NEXT
: Chaining
: No
352 // CHECK-NEXT
: StackAdjustment
: 512
353 // CHECK-NEXT
: Prologue
[
354 // CHECK-NEXT
: sub sp
, sp
, #512
355 // CHECK-NEXT
: push
{r4, lr}
356 // CHECK-NEXT
: push
{r0-
r3}
358 // CHECK-NEXT
: Epilogue
[
359 // CHECK-NEXT
: add sp
, sp
, #512
360 // CHECK-NEXT
: pop
{r4}
361 // CHECK-NEXT
: ldr pc
, [sp
], #20
364 // CHECK-NEXT
: RuntimeFunction
{
365 // CHECK-NEXT
: Function
: func24
366 // CHECK-NEXT
: Fragment
: No
367 // CHECK-NEXT
: FunctionLength
: 16
368 // CHECK-NEXT
: ReturnType
: pop
{pc
}
369 // CHECK-NEXT
: HomedParameters
: No
370 // CHECK-NEXT
: Reg
: 3
372 // CHECK-NEXT
: LinkRegister
: Yes
373 // CHECK-NEXT
: Chaining
: Yes
374 // CHECK-NEXT
: StackAdjustment
: 8
375 // CHECK-NEXT
: Prologue
[
376 // CHECK-NEXT
: add.w
r11, sp
, #24
377 // CHECK-NEXT
: push
{r2-
r7, r11, lr}
379 // CHECK-NEXT
: Epilogue
[
380 // CHECK-NEXT
: add sp
, sp
, #8
381 // CHECK-NEXT
: pop
{r4-
r7, r11, pc
}
384 // CHECK-NEXT
: RuntimeFunction
{
385 // CHECK-NEXT
: Function
: func25
386 // CHECK-NEXT
: Fragment
: No
387 // CHECK-NEXT
: FunctionLength
: 16
388 // CHECK-NEXT
: ReturnType
: pop
{pc
}
389 // CHECK-NEXT
: HomedParameters
: No
390 // CHECK-NEXT
: Reg
: 3
392 // CHECK-NEXT
: LinkRegister
: Yes
393 // CHECK-NEXT
: Chaining
: Yes
394 // CHECK-NEXT
: StackAdjustment
: 8
395 // CHECK-NEXT
: Prologue
[
396 // CHECK-NEXT
: sub sp
, sp
, #8
397 // CHECK-NEXT
: add.w
r11, sp
, #16
398 // CHECK-NEXT
: push
{r4-
r7, r11, lr}
400 // CHECK-NEXT
: Epilogue
[
401 // CHECK-NEXT
: pop
{r2-
r7, r11, pc
}
404 // CHECK-NEXT
: RuntimeFunction
{
405 // CHECK-NEXT
: Function
: func26
406 // CHECK-NEXT
: Fragment
: No
407 // CHECK-NEXT
: FunctionLength
: 8
408 // CHECK-NEXT
: ReturnType
: bx
<reg
>
409 // CHECK-NEXT
: HomedParameters
: No
410 // CHECK-NEXT
: Reg
: 7
412 // CHECK-NEXT
: LinkRegister
: No
413 // CHECK-NEXT
: Chaining
: No
414 // CHECK-NEXT
: StackAdjustment
: 12
415 // CHECK-NEXT
: Prologue
[
416 // CHECK-NEXT
: push
{r1-
r3}
418 // CHECK-NEXT
: Epilogue
[
419 // CHECK-NEXT
: add sp
, sp
, #12
420 // CHECK-NEXT
: bx
<reg
>
423 // CHECK-NEXT
: RuntimeFunction
{
424 // CHECK-NEXT
: Function
: func27
425 // CHECK-NEXT
: Fragment
: No
426 // CHECK-NEXT
: FunctionLength
: 8
427 // CHECK-NEXT
: ReturnType
: bx
<reg
>
428 // CHECK-NEXT
: HomedParameters
: No
429 // CHECK-NEXT
: Reg
: 7
431 // CHECK-NEXT
: LinkRegister
: No
432 // CHECK-NEXT
: Chaining
: No
433 // CHECK-NEXT
: StackAdjustment
: 12
434 // CHECK-NEXT
: Prologue
[
435 // CHECK-NEXT
: sub sp
, sp
, #12
437 // CHECK-NEXT
: Epilogue
[
438 // CHECK-NEXT
: pop
{r1-
r3}
439 // CHECK-NEXT
: bx
<reg
>
442 // CHECK-NEXT
: RuntimeFunction
{
443 // CHECK-NEXT
: Function
: func28
444 // CHECK-NEXT
: Fragment
: No
445 // CHECK-NEXT
: FunctionLength
: 8
446 // CHECK-NEXT
: ReturnType
: bx
<reg
>
447 // CHECK-NEXT
: HomedParameters
: Yes
448 // CHECK-NEXT
: Reg
: 7
450 // CHECK-NEXT
: LinkRegister
: No
451 // CHECK-NEXT
: Chaining
: No
452 // CHECK-NEXT
: StackAdjustment
: 0
453 // CHECK-NEXT
: Prologue
[
454 // CHECK-NEXT
: push
{r0-
r3}
456 // CHECK-NEXT
: Epilogue
[
457 // CHECK-NEXT
: add sp
, sp
, #16
458 // CHECK-NEXT
: bx
<reg
>
461 // CHECK-NEXT
: RuntimeFunction
{
462 // CHECK-NEXT
: Function
: func29
463 // CHECK-NEXT
: Fragment
: No
464 // CHECK-NEXT
: FunctionLength
: 10
465 // CHECK-NEXT
: ReturnType
: pop
{pc
}
466 // CHECK-NEXT
: HomedParameters
: Yes
467 // CHECK-NEXT
: Reg
: 7
469 // CHECK-NEXT
: LinkRegister
: Yes
470 // CHECK-NEXT
: Chaining
: No
471 // CHECK-NEXT
: StackAdjustment
: 0
472 // CHECK-NEXT
: Prologue
[
473 // CHECK-NEXT
: push
{lr}
474 // CHECK-NEXT
: push
{r0-
r3}
476 // CHECK-NEXT
: Epilogue
[
477 // CHECK-NEXT
: ldr pc
, [sp
], #20
480 // CHECK-NEXT
: RuntimeFunction
{
481 // CHECK-NEXT
: Function
: func30
482 // CHECK-NEXT
: Fragment
: No
483 // CHECK-NEXT
: FunctionLength
: 6
484 // CHECK-NEXT
: ReturnType
: pop
{pc
}
485 // CHECK-NEXT
: HomedParameters
: No
486 // CHECK-NEXT
: Reg
: 2
488 // CHECK-NEXT
: LinkRegister
: Yes
489 // CHECK-NEXT
: Chaining
: No
490 // CHECK-NEXT
: StackAdjustment
: 0
491 // CHECK-NEXT
: Prologue
[
492 // CHECK-NEXT
: push
{r4-
r6, lr}
494 // CHECK-NEXT
: Epilogue
[
495 // CHECK-NEXT
: pop
{r4-
r6, pc
}
498 // CHECK-NEXT
: RuntimeFunction
{
499 // CHECK-NEXT
: Function
: func31
500 // CHECK-NEXT
: Fragment
: No
501 // CHECK-NEXT
: FunctionLength
: 4
502 // CHECK-NEXT
: ReturnType
: (no epilogue
)
503 // CHECK-NEXT
: HomedParameters
: No
504 // CHECK-NEXT
: Reg
: 2
506 // CHECK-NEXT
: LinkRegister
: Yes
507 // CHECK-NEXT
: Chaining
: No
508 // CHECK-NEXT
: StackAdjustment
: 0
509 // CHECK-NEXT
: Prologue
[
510 // CHECK-NEXT
: push
{r4-
r6, lr}
514 // CHECK
: Function
: notpacked1
515 // CHECK-NEXT
: ExceptionRecord
:
516 // CHECK
: Function
: notpacked2
517 // CHECK-NEXT
: ExceptionRecord
:
518 // CHECK
: Function
: notpacked3
519 // CHECK-NEXT
: ExceptionRecord
:
520 // CHECK
: Function
: notpacked4
521 // CHECK-NEXT
: ExceptionRecord
:
522 // CHECK
: Function
: notpacked5
523 // CHECK-NEXT
: ExceptionRecord
:
524 // CHECK
: Function
: notpacked6
525 // CHECK-NEXT
: ExceptionRecord
:
526 // CHECK
: Function
: notpacked7
527 // CHECK-NEXT
: ExceptionRecord
:
528 // CHECK
: Function
: notpacked8
529 // CHECK-NEXT
: ExceptionRecord
:
530 // CHECK
: Function
: notpacked9
531 // CHECK-NEXT
: ExceptionRecord
:
565 .seh_save_regs {r4,lr}
570 .seh_save_regs_w {r4,lr}
592 .seh_save_regs_w {lr}
601 .seh_save_regs_w {r11,lr}
605 .seh_save_fregs {d8-d9}
614 .seh_save_fregs {d8-d9}
616 .seh_save_regs_w {r11,lr}
625 .seh_save_regs_w {r11,lr}
629 .seh_save_fregs {d8-d9}
638 .seh_save_fregs {d8-d9}
640 .seh_save_regs_w {r11,pc}
647 .seh_save_fregs {d8-d14}
656 .seh_save_fregs {d8-d14}
665 .seh_save_regs_w {r4-r11,lr}
676 .seh_save_regs_w {r4-r11,lr}
683 .seh_save_regs_w {r4-r11,lr}
692 .seh_save_regs_w {r4-r11,lr}
699 .seh_save_regs {r0-r3}
701 .seh_save_regs {r4,lr}
703 .seh_stackalloc_w 512
708 .seh_stackalloc_w 512
719 .seh_save_regs {r0-r3}
721 .seh_save_regs_w {r11,lr}
728 .seh_save_regs_w {r11,lr}
739 .seh_save_regs {r0-r3}
743 .seh_stackalloc_w 512
748 .seh_stackalloc_w 512
761 .seh_save_regs {r3,lr}
766 .seh_save_regs {r3,pc}
773 .seh_save_regs {r0-r3}
775 .seh_save_regs {r0-r4}
780 .seh_save_regs {r0-r4}
791 .seh_save_regs {r0-r3}
793 .seh_save_regs {r0-r4}
811 .seh_save_regs {r0-r3}
820 .seh_save_regs {r0-r4}
830 .seh_save_regs {r0-r3}
831 .seh_save_regs {r4,lr}
832 .seh_stackalloc_w 512
833 .seh_endprologue_fragment
838 .seh_stackalloc_w 512
848 push.w
{r2-
r7,r11,lr}
849 .seh_save_regs_w {r2-r7,r11,lr}
858 .seh_save_regs_w {r4-r7,r11,pc}
864 push.w
{r4-
r7,r11,lr}
865 .seh_save_regs_w {r4-r7,r11,lr}
874 .seh_save_regs_w {r2-r7,r11,pc}
881 .seh_save_regs {r1-r3}
900 .seh_save_regs {r1-r3}
909 .seh_save_regs {r0-r3}
923 .seh_save_regs {r0-r3}
937 .seh_save_regs {r4-r6,lr}
942 .seh_save_regs {r4-r6,pc}
949 .seh_save_regs {r4-r6,lr}
957 .seh_save_regs {r1-r3}
961 // Mismatch with the folded prologue
976 // Folded epilogue is
a mismatch to the regular stack adjust in the prologue
978 .seh_save_regs {r1-r3}
986 // Can
't represent d8-d15 in the packed form
988 .seh_save_fregs {d8-d15}
993 .seh_save_fregs {d8-d15}
1002 .seh_save_regs {r2-r7}
1005 // Can't have both
a folded stack adjustment
and a separate one
1012 .seh_save_regs {r2-r7}
1018 .seh_proc notpacked5
1020 // Can
't represent r11 in packed form when it's
not contiguous
1021 // with the rest
and when it
's not chained (missing "add.w r11, sp, #.."
1023 push.w {r4-r7,r11,lr}
1024 .seh_save_regs_w {r4-r7,r11,lr}
1030 pop.w {r2-r7,r11,pc}
1031 .seh_save_regs_w {r2-r7,r11,pc}
1035 .seh_proc notpacked6
1037 // Can't pack non-contiguous registers
1039 .seh_save_regs {r4,r7}
1044 .seh_save_regs {r4,r7}
1050 .seh_proc notpacked7
1052 // Can
't pack float registers ouside of d8-d14
1054 .seh_save_fregs {d0-d3}
1059 .seh_save_fregs {d0-d3}
1065 .seh_proc notpacked8
1068 .seh_save_regs {r4-r7,lr}
1073 .seh_save_regs {r4-r7,pc}
1075 // Epilogue isn't at the end of the function; can
't be packed.
1079 .seh_proc notpacked9
1082 .seh_save_regs {r4-r7,lr}
1087 .seh_save_regs {r4-r7,pc}
1089 // Multiple epilogues, can't be packed
1093 .seh_save_regs {r4-r7,pc}