[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / MC / AArch64 / seh-packed-unwind.s
blob5b86ab4bc0d49019d05689d50422d6a113055217
1 // Check that we generate the packed unwind info format whe possible.
3 // For tests that don't generate packed unwind info, we still check that
4 // the epilog was packed (so that the testcase otherwise had all other
5 // preconditions for possibly making packed unwind info).
7 // REQUIRES: aarch64-registered-target
8 // RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o
9 // RUN: llvm-readobj --unwind %t.o | FileCheck %s
11 // CHECK: UnwindInformation [
12 // CHECK-NEXT: RuntimeFunction {
13 // CHECK-NEXT: Function: func1
14 // CHECK-NEXT: Fragment: No
15 // CHECK-NEXT: FunctionLength: 88
16 // CHECK-NEXT: RegF: 7
17 // CHECK-NEXT: RegI: 10
18 // CHECK-NEXT: HomedParameters: No
19 // CHECK-NEXT: CR: 0
20 // CHECK-NEXT: FrameSize: 160
21 // CHECK-NEXT: Prologue [
22 // CHECK-NEXT: sub sp, sp, #16
23 // CHECK-NEXT: stp d14, d15, [sp, #128]
24 // CHECK-NEXT: stp d12, d13, [sp, #112]
25 // CHECK-NEXT: stp d10, d11, [sp, #96]
26 // CHECK-NEXT: stp d8, d9, [sp, #80]
27 // CHECK-NEXT: stp x27, x28, [sp, #64]
28 // CHECK-NEXT: stp x25, x26, [sp, #48]
29 // CHECK-NEXT: stp x23, x24, [sp, #32]
30 // CHECK-NEXT: stp x21, x22, [sp, #16]
31 // CHECK-NEXT: stp x19, x20, [sp, #-144]!
32 // CHECK-NEXT: end
33 // CHECK-NEXT: ]
34 // CHECK-NEXT: }
35 // CHECK-NEXT: RuntimeFunction {
36 // CHECK-NEXT: Function: func2
37 // CHECK-NEXT: Fragment: No
38 // CHECK-NEXT: FunctionLength: 48
39 // CHECK-NEXT: RegF: 2
40 // CHECK-NEXT: RegI: 3
41 // CHECK-NEXT: HomedParameters: No
42 // CHECK-NEXT: CR: 0
43 // CHECK-NEXT: FrameSize: 48
44 // CHECK-NEXT: Prologue [
45 // CHECK-NEXT: str d10, [sp, #40]
46 // CHECK-NEXT: stp d8, d9, [sp, #24]
47 // CHECK-NEXT: str x21, [sp, #16]
48 // CHECK-NEXT: stp x19, x20, [sp, #-48]!
49 // CHECK-NEXT: end
50 // CHECK-NEXT: ]
51 // CHECK-NEXT: }
52 // CHECK-NEXT: RuntimeFunction {
53 // CHECK-NEXT: Function: func3
54 // CHECK-NEXT: Fragment: No
55 // CHECK-NEXT: FunctionLength: 32
56 // CHECK-NEXT: RegF: 3
57 // CHECK-NEXT: RegI: 1
58 // CHECK-NEXT: HomedParameters: No
59 // CHECK-NEXT: CR: 0
60 // CHECK-NEXT: FrameSize: 48
61 // CHECK-NEXT: Prologue [
62 // CHECK-NEXT: stp d10, d11, [sp, #24]
63 // CHECK-NEXT: stp d8, d9, [sp, #8]
64 // CHECK-NEXT: str x19, [sp, #-48]!
65 // CHECK-NEXT: end
66 // CHECK-NEXT: ]
67 // CHECK-NEXT: }
68 // CHECK-NEXT: RuntimeFunction {
69 // CHECK-NEXT: Function: func4
70 // CHECK-NEXT: Fragment: No
71 // CHECK-NEXT: FunctionLength: 24
72 // CHECK-NEXT: RegF: 1
73 // CHECK-NEXT: RegI: 0
74 // CHECK-NEXT: HomedParameters: No
75 // CHECK-NEXT: CR: 0
76 // CHECK-NEXT: FrameSize: 48
77 // CHECK-NEXT: Prologue [
78 // CHECK-NEXT: sub sp, sp, #32
79 // CHECK-NEXT: stp d8, d9, [sp, #-16]!
80 // CHECK-NEXT: end
81 // CHECK-NEXT: ]
82 // CHECK-NEXT: }
83 // CHECK-NEXT: RuntimeFunction {
84 // CHECK-NEXT: Function: notpacked_func5
85 // CHECK-NEXT: ExceptionRecord:
86 // CHECK-NEXT: ExceptionData {
87 // CHECK: RuntimeFunction {
88 // CHECK-NEXT: Function: func6
89 // CHECK-NEXT: Fragment: No
90 // CHECK-NEXT: FunctionLength: 24
91 // CHECK-NEXT: RegF: 0
92 // CHECK-NEXT: RegI: 0
93 // CHECK-NEXT: HomedParameters: No
94 // CHECK-NEXT: CR: 1
95 // CHECK-NEXT: FrameSize: 32
96 // CHECK-NEXT: Prologue [
97 // CHECK-NEXT: sub sp, sp, #16
98 // CHECK-NEXT: str lr, [sp, #-16]!
99 // CHECK-NEXT: end
100 // CHECK-NEXT: ]
101 // CHECK-NEXT: }
102 // CHECK-NEXT: RuntimeFunction {
103 // CHECK-NEXT: Function: func7
104 // CHECK-NEXT: Fragment: No
105 // CHECK-NEXT: FunctionLength: 24
106 // CHECK-NEXT: RegF: 0
107 // CHECK-NEXT: RegI: 2
108 // CHECK-NEXT: HomedParameters: No
109 // CHECK-NEXT: CR: 1
110 // CHECK-NEXT: FrameSize: 32
111 // CHECK-NEXT: Prologue [
112 // CHECK-NEXT: str lr, [sp, #16]
113 // CHECK-NEXT: stp x19, x20, [sp, #-32]!
114 // CHECK-NEXT: end
115 // CHECK-NEXT: ]
116 // CHECK-NEXT: }
117 // CHECK-NEXT: RuntimeFunction {
118 // CHECK-NEXT: Function: func8
119 // CHECK-NEXT: Fragment: No
120 // CHECK-NEXT: FunctionLength: 32
121 // CHECK-NEXT: RegF: 0
122 // CHECK-NEXT: RegI: 3
123 // CHECK-NEXT: HomedParameters: No
124 // CHECK-NEXT: CR: 1
125 // CHECK-NEXT: FrameSize: 48
126 // CHECK-NEXT: Prologue [
127 // CHECK-NEXT: sub sp, sp, #16
128 // CHECK-NEXT: stp x21, lr, [sp, #16]
129 // CHECK-NEXT: stp x19, x20, [sp, #-32]!
130 // CHECK-NEXT: end
131 // CHECK-NEXT: ]
132 // CHECK-NEXT: }
133 // CHECK-NEXT: RuntimeFunction {
134 // CHECK-NEXT: Function: func9
135 // CHECK-NEXT: Fragment: No
136 // CHECK-NEXT: FunctionLength: 32
137 // CHECK-NEXT: RegF: 0
138 // CHECK-NEXT: RegI: 2
139 // CHECK-NEXT: HomedParameters: No
140 // CHECK-NEXT: CR: 3
141 // CHECK-NEXT: FrameSize: 48
142 // CHECK-NEXT: Prologue [
143 // CHECK-NEXT: mov x29, sp
144 // CHECK-NEXT: stp x29, lr, [sp, #-32]!
145 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
146 // CHECK-NEXT: end
147 // CHECK-NEXT: ]
148 // CHECK-NEXT: }
149 // CHECK-NEXT: RuntimeFunction {
150 // CHECK-NEXT: Function: func10
151 // CHECK-NEXT: Fragment: No
152 // CHECK-NEXT: FunctionLength: 24
153 // CHECK-NEXT: RegF: 0
154 // CHECK-NEXT: RegI: 0
155 // CHECK-NEXT: HomedParameters: No
156 // CHECK-NEXT: CR: 3
157 // CHECK-NEXT: FrameSize: 32
158 // CHECK-NEXT: Prologue [
159 // CHECK-NEXT: mov x29, sp
160 // CHECK-NEXT: stp x29, lr, [sp, #-32]!
161 // CHECK-NEXT: end
162 // CHECK-NEXT: ]
163 // CHECK-NEXT: }
164 // CHECK-NEXT: RuntimeFunction {
165 // CHECK-NEXT: Function: func11
166 // CHECK-NEXT: Fragment: No
167 // CHECK-NEXT: FunctionLength: 40
168 // CHECK-NEXT: RegF: 0
169 // CHECK-NEXT: RegI: 2
170 // CHECK-NEXT: HomedParameters: No
171 // CHECK-NEXT: CR: 3
172 // CHECK-NEXT: FrameSize: 544
173 // CHECK-NEXT: Prologue [
174 // CHECK-NEXT: mov x29, sp
175 // CHECK-NEXT: stp x29, lr, [sp, #0]
176 // CHECK-NEXT: sub sp, sp, #528
177 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
178 // CHECK-NEXT: end
179 // CHECK-NEXT: ]
180 // CHECK-NEXT: }
181 // CHECK-NEXT: RuntimeFunction {
182 // CHECK-NEXT: Function: func12
183 // CHECK-NEXT: Fragment: No
184 // CHECK-NEXT: FunctionLength: 48
185 // CHECK-NEXT: RegF: 0
186 // CHECK-NEXT: RegI: 2
187 // CHECK-NEXT: HomedParameters: No
188 // CHECK-NEXT: CR: 3
189 // CHECK-NEXT: FrameSize: 4112
190 // CHECK-NEXT: Prologue [
191 // CHECK-NEXT: mov x29, sp
192 // CHECK-NEXT: stp x29, lr, [sp, #0]
193 // CHECK-NEXT: sub sp, sp, #16
194 // CHECK-NEXT: sub sp, sp, #4080
195 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
196 // CHECK-NEXT: end
197 // CHECK-NEXT: ]
198 // CHECK-NEXT: }
199 // CHECK-NEXT: RuntimeFunction {
200 // CHECK-NEXT: Function: func13
201 // CHECK-NEXT: Fragment: No
202 // CHECK-NEXT: FunctionLength: 32
203 // CHECK-NEXT: RegF: 0
204 // CHECK-NEXT: RegI: 2
205 // CHECK-NEXT: HomedParameters: No
206 // CHECK-NEXT: CR: 0
207 // CHECK-NEXT: FrameSize: 4112
208 // CHECK-NEXT: Prologue [
209 // CHECK-NEXT: sub sp, sp, #16
210 // CHECK-NEXT: sub sp, sp, #4080
211 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
212 // CHECK-NEXT: end
213 // CHECK-NEXT: ]
214 // CHECK-NEXT: }
215 // CHECK-NEXT: RuntimeFunction {
216 // CHECK-NEXT: Function: func14
217 // CHECK-NEXT: Fragment: No
218 // CHECK-NEXT: FunctionLength: 32
219 // CHECK-NEXT: RegF: 2
220 // CHECK-NEXT: RegI: 0
221 // CHECK-NEXT: HomedParameters: No
222 // CHECK-NEXT: CR: 1
223 // CHECK-NEXT: FrameSize: 32
224 // CHECK-NEXT: Prologue [
225 // CHECK-NEXT: str d10, [sp, #24]
226 // CHECK-NEXT: stp d8, d9, [sp, #8]
227 // CHECK-NEXT: str lr, [sp, #-32]!
228 // CHECK-NEXT: end
229 // CHECK-NEXT: ]
230 // CHECK-NEXT: }
231 // CHECK-NEXT: RuntimeFunction {
232 // CHECK-NEXT: Function: func15
233 // CHECK-NEXT: Fragment: No
234 // CHECK-NEXT: FunctionLength: 20
235 // CHECK-NEXT: RegF: 0
236 // CHECK-NEXT: RegI: 0
237 // CHECK-NEXT: HomedParameters: No
238 // CHECK-NEXT: CR: 3
239 // CHECK-NEXT: FrameSize: 32
240 // CHECK-NEXT: Prologue [
241 // CHECK-NEXT: mov x29, sp
242 // CHECK-NEXT: stp x29, lr, [sp, #-32]!
243 // CHECK-NEXT: end
244 // CHECK-NEXT: ]
245 // CHECK-NEXT: }
246 // CHECK-NEXT: RuntimeFunction {
247 // CHECK-NEXT: Function: func16
248 // CHECK-NEXT: Fragment: No
249 // CHECK-NEXT: FunctionLength: 28
250 // CHECK-NEXT: RegF: 0
251 // CHECK-NEXT: RegI: 0
252 // CHECK-NEXT: HomedParameters: No
253 // CHECK-NEXT: CR: 2
254 // CHECK-NEXT: FrameSize: 32
255 // CHECK-NEXT: Prologue [
256 // CHECK-NEXT: mov x29, sp
257 // CHECK-NEXT: stp x29, lr, [sp, #-32]!
258 // CHECK-NEXT: pacibsp
259 // CHECK-NEXT: end
260 // CHECK-NEXT: ]
261 // CHECK-NEXT: }
262 // CHECK-NEXT: RuntimeFunction {
263 // CHECK-NEXT: Function: func17
264 // CHECK-NEXT: Fragment: No
265 // CHECK-NEXT: FunctionLength: 40
266 // CHECK-NEXT: RegF: 0
267 // CHECK-NEXT: RegI: 2
268 // CHECK-NEXT: HomedParameters: No
269 // CHECK-NEXT: CR: 2
270 // CHECK-NEXT: FrameSize: 48
271 // CHECK-NEXT: Prologue [
272 // CHECK-NEXT: mov x29, sp
273 // CHECK-NEXT: stp x29, lr, [sp, #-32]!
274 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
275 // CHECK-NEXT: pacibsp
276 // CHECK-NEXT: end
277 // CHECK-NEXT: ]
278 // CHECK-NEXT: }
279 // CHECK-NEXT: RuntimeFunction {
280 // CHECK-NEXT: Function: func18
281 // CHECK-NEXT: Fragment: No
282 // CHECK-NEXT: FunctionLength: 56
283 // CHECK-NEXT: RegF: 0
284 // CHECK-NEXT: RegI: 2
285 // CHECK-NEXT: HomedParameters: No
286 // CHECK-NEXT: CR: 2
287 // CHECK-NEXT: FrameSize: 4112
288 // CHECK-NEXT: Prologue [
289 // CHECK-NEXT: mov x29, sp
290 // CHECK-NEXT: stp x29, lr, [sp, #0]
291 // CHECK-NEXT: sub sp, sp, #16
292 // CHECK-NEXT: sub sp, sp, #4080
293 // CHECK-NEXT: stp x19, x20, [sp, #-16]!
294 // CHECK-NEXT: pacibsp
295 // CHECK-NEXT: end
296 // CHECK-NEXT: ]
297 // CHECK-NEXT: }
298 // CHECK: RuntimeFunction {
299 // CHECK-NEXT: Function: nonpacked1
300 // CHECK-NEXT: ExceptionRecord:
301 // CHECK-NEXT: ExceptionData {
302 // CHECK: EpiloguePacked: Yes
303 // CHECK: RuntimeFunction {
304 // CHECK-NEXT: Function: nonpacked2
305 // CHECK-NEXT: ExceptionRecord:
306 // CHECK-NEXT: ExceptionData {
307 // CHECK: EpiloguePacked: Yes
308 // CHECK: RuntimeFunction {
309 // CHECK-NEXT: Function: nonpacked3
310 // CHECK-NEXT: ExceptionRecord:
311 // CHECK-NEXT: ExceptionData {
312 // CHECK: EpiloguePacked: Yes
313 // CHECK: RuntimeFunction {
314 // CHECK-NEXT: Function: nonpacked4
315 // CHECK-NEXT: ExceptionRecord:
316 // CHECK-NEXT: ExceptionData {
317 // CHECK: EpiloguePacked: Yes
318 // CHECK: RuntimeFunction {
319 // CHECK-NEXT: Function: nonpacked5
320 // CHECK-NEXT: ExceptionRecord:
321 // CHECK-NEXT: ExceptionData {
322 // CHECK: EpiloguePacked: Yes
323 // CHECK: RuntimeFunction {
324 // CHECK-NEXT: Function: nonpacked6
325 // CHECK-NEXT: ExceptionRecord:
326 // CHECK-NEXT: ExceptionData {
327 // CHECK: EpiloguePacked: Yes
328 // CHECK: RuntimeFunction {
329 // CHECK-NEXT: Function: nonpacked7
330 // CHECK-NEXT: ExceptionRecord:
331 // CHECK-NEXT: ExceptionData {
332 // CHECK: EpiloguePacked: Yes
333 // CHECK: RuntimeFunction {
334 // CHECK-NEXT: Function: nonpacked8
335 // CHECK-NEXT: ExceptionRecord:
336 // CHECK-NEXT: ExceptionData {
337 // CHECK: EpiloguePacked: Yes
338 // CHECK: RuntimeFunction {
339 // CHECK-NEXT: Function: nonpacked9
340 // CHECK-NEXT: ExceptionRecord:
341 // CHECK-NEXT: ExceptionData {
342 // CHECK: EpiloguePacked: Yes
343 // CHECK: RuntimeFunction {
344 // CHECK-NEXT: Function: nonpacked10
345 // CHECK-NEXT: ExceptionRecord:
346 // CHECK-NEXT: ExceptionData {
347 // CHECK: EpiloguePacked: Yes
348 // CHECK: RuntimeFunction {
349 // CHECK-NEXT: Function: nonpacked11
350 // CHECK-NEXT: ExceptionRecord:
351 // CHECK-NEXT: ExceptionData {
352 // CHECK: EpiloguePacked: Yes
353 // CHECK: RuntimeFunction {
354 // CHECK-NEXT: Function: nonpacked12
355 // CHECK-NEXT: ExceptionRecord:
356 // CHECK-NEXT: ExceptionData {
357 // CHECK: EpiloguePacked: Yes
358 // CHECK: RuntimeFunction {
359 // CHECK-NEXT: Function: nonpacked13
360 // CHECK-NEXT: ExceptionRecord:
361 // CHECK-NEXT: ExceptionData {
362 // CHECK: EpiloguePacked: Yes
363 // CHECK: RuntimeFunction {
364 // CHECK-NEXT: Function: nonpacked14
365 // CHECK-NEXT: ExceptionRecord:
366 // CHECK-NEXT: ExceptionData {
367 // CHECK: EpiloguePacked: Yes
368 // CHECK: RuntimeFunction {
369 // CHECK-NEXT: Function: nonpacked15
370 // CHECK-NEXT: ExceptionRecord:
371 // CHECK-NEXT: ExceptionData {
372 // CHECK: EpiloguePacked: Yes
373 // CHECK: RuntimeFunction {
374 // CHECK-NEXT: Function: nonpacked16
375 // CHECK-NEXT: ExceptionRecord:
376 // CHECK-NEXT: ExceptionData {
377 // CHECK: EpiloguePacked: Yes
380 .text
381 func1:
382 .seh_proc func1
383 stp x19, x20, [sp, #-144]!
384 .seh_save_r19r20_x 144
385 stp x21, x22, [sp, #16]
386 .seh_save_regp x21, 16
387 stp x23, x24, [sp, #32]
388 .seh_save_next
389 stp x25, x26, [sp, #48]
390 .seh_save_next
391 stp x27, x28, [sp, #64]
392 .seh_save_next
393 stp d8, d9, [sp, #80]
394 .seh_save_fregp d8, 80
395 stp d10, d11, [sp, #96]
396 .seh_save_fregp d10, 96
397 stp d12, d13, [sp, #112]
398 .seh_save_fregp d12, 112
399 stp d14, d15, [sp, #128]
400 .seh_save_fregp d14, 128
401 sub sp, sp, #16
402 .seh_stackalloc 16
403 .seh_endprologue
405 .seh_startepilogue
406 add sp, sp, #16
407 .seh_stackalloc 16
408 ldp d14, d15, [sp, #128]
409 .seh_save_fregp d14, 128
410 ldp d12, d13, [sp, #112]
411 .seh_save_fregp d12, 112
412 ldp d10, d11, [sp, #96]
413 .seh_save_fregp d10, 96
414 ldp d8, d9, [sp, #80]
415 .seh_save_fregp d8, 80
416 ldp x27, x28, [sp, #64]
417 .seh_save_next
418 ldp x25, x26, [sp, #48]
419 .seh_save_next
420 ldp x23, x24, [sp, #32]
421 .seh_save_next
422 ldp x21, x22, [sp, #16]
423 .seh_save_next
424 ldp x19, x20, [sp], #144
425 .seh_save_regp_x x19, 144
426 .seh_endepilogue
428 .seh_endproc
430 func2:
431 .seh_proc func2
432 stp x19, x20, [sp, #-48]!
433 .seh_save_r19r20_x 48
434 str x21, [sp, #16]
435 .seh_save_reg x21, 16
436 stp d8, d9, [sp, #24]
437 .seh_save_fregp d8, 24
438 str d10, [sp, #40]
439 .seh_save_freg d10, 40
440 sub sp, sp, #0
441 .seh_stackalloc 0
442 .seh_endprologue
444 .seh_startepilogue
445 add sp, sp, #0
446 .seh_stackalloc 0
447 ldr d10, [sp, #40]
448 .seh_save_freg d10, 40
449 ldp d8, d9, [sp, #24]
450 .seh_save_fregp d8, 24
451 ldr x21, [sp, #16]
452 .seh_save_reg x21, 16
453 ldp x19, x20, [sp], #48
454 .seh_save_r19r20_x 48
455 .seh_endepilogue
457 .seh_endproc
459 func3:
460 .seh_proc func3
461 str x19, [sp, #-48]!
462 .seh_save_reg_x x19, 48
463 stp d8, d9, [sp, #8]
464 .seh_save_fregp d8, 8
465 stp d10, d11, [sp, #24]
466 .seh_save_fregp d10, 24
467 .seh_endprologue
469 .seh_startepilogue
470 ldp d10, d11, [sp, #24]
471 .seh_save_fregp d10, 24
472 ldp d8, d9, [sp, #8]
473 .seh_save_fregp d8, 8
474 ldr x19, [sp], #48
475 .seh_save_reg_x x19, 48
476 .seh_endepilogue
478 .seh_endproc
480 func4:
481 .seh_proc func4
482 stp d8, d9, [sp, #-16]!
483 .seh_save_fregp_x d8, 16
484 sub sp, sp, #32
485 .seh_stackalloc 32
486 .seh_endprologue
488 .seh_startepilogue
489 add sp, sp, #32
490 .seh_stackalloc 32
491 ldp d8, d9, [sp], #16
492 .seh_save_fregp_x d8, 16
493 .seh_endepilogue
495 .seh_endproc
497 notpacked_func5:
498 .seh_proc notpacked_func5
499 str x19, [sp, #-80]!
500 .seh_save_reg_x x19, 80
501 stp x0, x1, [sp, #16]
502 .seh_nop
503 stp x2, x3, [sp, #32]
504 .seh_nop
505 stp x4, x5, [sp, #48]
506 .seh_nop
507 stp x6, x7, [sp, #64]
508 .seh_nop
509 sub sp, sp, #32
510 .seh_stackalloc 32
511 .seh_endprologue
513 .seh_startepilogue
514 add sp, sp, #32
515 .seh_stackalloc 32
517 .seh_nop
519 .seh_nop
521 .seh_nop
523 .seh_nop
524 ldr x19, [sp], #80
525 .seh_save_reg_x x19, 80
526 .seh_endepilogue
528 .seh_endproc
530 func6:
531 .seh_proc func6
532 str lr, [sp, #-16]!
533 .seh_save_reg_x lr, 16
534 sub sp, sp, #16
535 .seh_stackalloc 16
536 .seh_endprologue
538 .seh_startepilogue
539 add sp, sp, #16
540 .seh_stackalloc 16
541 ldr lr, [sp], #16
542 .seh_save_reg_x lr, 16
543 .seh_endepilogue
545 .seh_endproc
547 func7:
548 .seh_proc func7
549 stp x19, x20, [sp, #-32]!
550 .seh_save_r19r20_x 32
551 str lr, [sp, #16]
552 .seh_save_reg lr, 16
553 .seh_endprologue
555 .seh_startepilogue
556 ldr lr, [sp, #16]
557 .seh_save_reg lr, 16
558 ldp x19, x20, [sp], #32
559 .seh_save_r19r20_x 32
560 .seh_endepilogue
562 .seh_endproc
564 func8:
565 .seh_proc func8
566 stp x19, x20, [sp, #-32]!
567 .seh_save_r19r20_x 32
568 stp x21, lr, [sp, #16]
569 .seh_save_lrpair x21, 16
570 sub sp, sp, #16
571 .seh_stackalloc 16
572 .seh_endprologue
574 .seh_startepilogue
575 add sp, sp, #16
576 .seh_stackalloc 16
577 ldp x21, lr, [sp, #16]
578 .seh_save_lrpair x21, 16
579 ldp x19, x20, [sp], #32
580 .seh_save_r19r20_x 32
581 .seh_endepilogue
583 .seh_endproc
585 func9:
586 .seh_proc func9
587 stp x19, x20, [sp, #-16]!
588 .seh_save_r19r20_x 16
589 stp x29, lr, [sp, #-32]!
590 .seh_save_fplr_x 32
591 mov x29, sp
592 .seh_set_fp
593 .seh_endprologue
595 .seh_startepilogue
596 mov sp, x29
597 .seh_set_fp
598 ldp x29, lr, [sp], #32
599 .seh_save_fplr_x 32
600 ldp x19, x20, [sp], #16
601 .seh_save_r19r20_x 16
602 .seh_endepilogue
604 .seh_endproc
606 func10:
607 .seh_proc func10
608 stp x29, lr, [sp, #-32]!
609 .seh_save_fplr_x 32
610 mov x29, sp
611 .seh_set_fp
612 .seh_endprologue
614 .seh_startepilogue
615 mov sp, x29
616 .seh_set_fp
617 ldp x29, lr, [sp], #32
618 .seh_save_fplr_x 32
619 .seh_endepilogue
621 .seh_endproc
623 func11:
624 .seh_proc func11
625 stp x19, x20, [sp, #-16]!
626 .seh_save_r19r20_x 16
627 sub sp, sp, #528
628 .seh_stackalloc 528
629 stp x29, lr, [sp, #0]
630 .seh_save_fplr 0
631 mov x29, sp
632 .seh_set_fp
633 .seh_endprologue
635 .seh_startepilogue
636 mov sp, x29
637 .seh_set_fp
638 ldp x29, lr, [sp, #0]
639 .seh_save_fplr 0
640 add sp, sp, #528
641 .seh_stackalloc 528
642 ldp x19, x20, [sp], #16
643 .seh_save_r19r20_x 16
644 .seh_endepilogue
646 .seh_endproc
648 func12:
649 .seh_proc func12
650 stp x19, x20, [sp, #-16]!
651 .seh_save_r19r20_x 16
652 sub sp, sp, #4080
653 .seh_stackalloc 4080
654 sub sp, sp, #16
655 .seh_stackalloc 16
656 stp x29, lr, [sp, #0]
657 .seh_save_fplr 0
658 mov x29, sp
659 .seh_set_fp
660 .seh_endprologue
662 .seh_startepilogue
663 mov sp, x29
664 .seh_set_fp
665 ldp x29, lr, [sp, #0]
666 .seh_save_fplr 0
667 add sp, sp, #16
668 .seh_stackalloc 16
669 add sp, sp, #4080
670 .seh_stackalloc 4080
671 ldp x19, x20, [sp], #16
672 .seh_save_r19r20_x 16
673 .seh_endepilogue
675 .seh_endproc
677 func13:
678 .seh_proc func13
679 stp x19, x20, [sp, #-16]!
680 .seh_save_r19r20_x 16
681 sub sp, sp, #4080
682 .seh_stackalloc 4080
683 sub sp, sp, #16
684 .seh_stackalloc 16
685 .seh_endprologue
687 .seh_startepilogue
688 add sp, sp, #16
689 .seh_stackalloc 16
690 add sp, sp, #4080
691 .seh_stackalloc 4080
692 ldp x19, x20, [sp], #16
693 .seh_save_r19r20_x 16
694 .seh_endepilogue
696 .seh_endproc
698 func14:
699 .seh_proc func14
700 str lr, [sp, #-32]!
701 .seh_save_reg_x lr, 32
702 stp d8, d9, [sp, #8]
703 .seh_save_fregp d8, 8
704 str d10, [sp, #24]
705 .seh_save_freg d10, 24
706 .seh_endprologue
708 .seh_startepilogue
709 ldr d10, [sp, #24]
710 .seh_save_freg d10, 24
711 ldp d8, d9, [sp, #8]
712 .seh_save_fregp d8, 8
713 ldr lr, [sp], #32
714 .seh_save_reg_x lr, 32
715 .seh_endepilogue
717 .seh_endproc
719 func15:
720 .seh_proc func15
721 stp x29, lr, [sp, #-32]!
722 .seh_save_fplr_x 32
723 mov x29, sp
724 .seh_set_fp
725 .seh_endprologue
727 .seh_startepilogue
728 // Epilogue missing the .seh_set_fp, but still generating packed info.
729 ldp x29, lr, [sp], #32
730 .seh_save_fplr_x 32
731 .seh_endepilogue
733 .seh_endproc
735 func16:
736 .seh_proc func16
737 pacibsp
738 .seh_pac_sign_lr
739 stp x29, lr, [sp, #-32]!
740 .seh_save_fplr_x 32
741 mov x29, sp
742 .seh_set_fp
743 .seh_endprologue
745 .seh_startepilogue
746 ldp x29, lr, [sp], #32
747 .seh_save_fplr_x 32
748 autibsp
749 .seh_pac_sign_lr
750 .seh_endepilogue
752 .seh_endproc
754 func17:
755 .seh_proc func17
756 pacibsp
757 .seh_pac_sign_lr
758 stp x19, x20, [sp, #-16]!
759 .seh_save_r19r20_x 16
760 stp x29, lr, [sp, #-32]!
761 .seh_save_fplr_x 32
762 mov x29, sp
763 .seh_set_fp
764 .seh_endprologue
766 .seh_startepilogue
767 mov sp, x29
768 .seh_set_fp
769 ldp x29, lr, [sp], #32
770 .seh_save_fplr_x 32
771 ldp x19, x20, [sp], #16
772 .seh_save_r19r20_x 16
773 autibsp
774 .seh_pac_sign_lr
775 .seh_endepilogue
777 .seh_endproc
779 func18:
780 .seh_proc func18
781 pacibsp
782 .seh_pac_sign_lr
783 stp x19, x20, [sp, #-16]!
784 .seh_save_r19r20_x 16
785 sub sp, sp, #4080
786 .seh_stackalloc 4080
787 sub sp, sp, #16
788 .seh_stackalloc 16
789 stp x29, lr, [sp, #0]
790 .seh_save_fplr 0
791 mov x29, sp
792 .seh_set_fp
793 .seh_endprologue
795 .seh_startepilogue
796 mov sp, x29
797 .seh_set_fp
798 ldp x29, lr, [sp, #0]
799 .seh_save_fplr 0
800 add sp, sp, #16
801 .seh_stackalloc 16
802 add sp, sp, #4080
803 .seh_stackalloc 4080
804 ldp x19, x20, [sp], #16
805 .seh_save_r19r20_x 16
806 autibsp
807 .seh_pac_sign_lr
808 .seh_endepilogue
810 .seh_endproc
812 nonpacked1:
813 .seh_proc nonpacked1
814 // Can't be packed; can't save integer registers after float registers.
815 stp d8, d9, [sp, #-32]!
816 .seh_save_fregp_x d8, 32
817 stp x19, x20, [sp, #16]!
818 .seh_save_regp x19, 16
819 .seh_endprologue
821 .seh_startepilogue
822 ldp x19, x20, [sp, #16]
823 .seh_save_regp x19, 16
824 ldp d8, d9, [sp], #32
825 .seh_save_fregp_x d8, 32
826 .seh_endepilogue
828 .seh_endproc
830 nonpacked2:
831 .seh_proc nonpacked2
832 // Can't be packed; x21/x22 aren't saved in the expected spot
833 stp x19, x20, [sp, #-48]!
834 .seh_save_r19r20_x 48
835 stp x21, x22, [sp, #32]
836 .seh_save_regp x21, 32
837 .seh_endprologue
839 .seh_startepilogue
840 ldp x21, x22, [sp, #32]
841 .seh_save_regp x21, 32
842 ldp x19, x20, [sp], #48
843 .seh_save_r19r20_x 48
844 .seh_endepilogue
846 .seh_endproc
848 nonpacked3:
849 .seh_proc nonpacked3
850 // Can't be packed; x29/x30 can't be treated as the other saved registers
851 stp x19, x20, [sp, #-96]!
852 .seh_save_r19r20_x 96
853 stp x21, x22, [sp, #16]
854 .seh_save_next
855 stp x23, x24, [sp, #32]
856 .seh_save_next
857 stp x25, x26, [sp, #48]
858 .seh_save_next
859 stp x27, x28, [sp, #64]
860 .seh_save_next
861 stp x29, x30, [sp, #80]
862 .seh_save_next
863 .seh_endprologue
865 .seh_startepilogue
866 ldp x29, x30, [sp, #80]
867 .seh_save_next
868 ldp x27, x28, [sp, #64]
869 .seh_save_next
870 ldp x25, x26, [sp, #48]
871 .seh_save_next
872 ldp x23, x24, [sp, #32]
873 .seh_save_next
874 ldp x21, x22, [sp, #16]
875 .seh_save_next
876 ldp x19, x20, [sp], #96
877 .seh_save_r19r20_x 96
878 .seh_endepilogue
880 .seh_endproc
882 nonpacked4:
883 .seh_proc nonpacked4
884 // Can't be packed; more predecrement for x19/x20 than used for
885 // corresponding RegI/RegF/LR saves
886 stp x19, x20, [sp, #-32]!
887 .seh_save_r19r20_x 32
888 .seh_endprologue
890 .seh_startepilogue
891 ldp x19, x20, [sp], #32
892 .seh_save_r19r20_x 32
893 .seh_endepilogue
895 .seh_endproc
897 nonpacked5:
898 .seh_proc nonpacked5
899 // Can't be packed; can't save LR twice
900 stp x19, x20, [sp, #-32]!
901 .seh_save_r19r20_x 32
902 str lr, [sp, #16]
903 .seh_save_reg lr, 16
904 str lr, [sp, #24]
905 .seh_save_reg lr, 24
906 .seh_endprologue
908 .seh_startepilogue
909 ldr lr, [sp, #24]
910 .seh_save_reg lr, 24
911 ldr lr, [sp, #16]
912 .seh_save_reg lr, 16
913 ldp x19, x20, [sp], #32
914 .seh_save_r19r20_x 32
915 .seh_endepilogue
917 .seh_endproc
919 nonpacked6:
920 .seh_proc nonpacked6
921 // Can't be packed; can't save LR both standalone (CR 1) and as FPLR (CR 3)
922 stp x19, x20, [sp, #-32]!
923 .seh_save_r19r20_x 32
924 str lr, [sp, #16]
925 .seh_save_reg lr, 16
926 stp x29, lr, [sp, #-16]!
927 .seh_save_fplr_x 16
928 mov x29, sp
929 .seh_set_fp
930 .seh_endprologue
932 .seh_startepilogue
933 mov sp, x29
934 .seh_set_fp
935 ldp x29, lr, [sp], #32
936 .seh_save_fplr_x 16
937 ldr lr, [sp, #16]
938 .seh_save_reg lr, 16
939 ldp x19, x20, [sp], #32
940 .seh_save_r19r20_x 32
941 .seh_endepilogue
943 .seh_endproc
945 nonpacked7:
946 .seh_proc nonpacked7
947 // Can't be packed; too many saved FP regs
948 stp d8, d9, [sp, #-80]!
949 .seh_save_fregp_x d8, 80
950 stp d10, d11, [sp, #16]
951 .seh_save_fregp d10, 16
952 stp d12, d13, [sp, #32]
953 .seh_save_fregp d12, 32
954 stp d14, d15, [sp, #48]
955 .seh_save_fregp d14, 48
956 stp d16, d17, [sp, #64]
957 .seh_save_next
958 .seh_endprologue
960 .seh_startepilogue
961 ldp d16, d17, [sp, #64]
962 .seh_save_next
963 ldp d14, d15, [sp, #48]
964 .seh_save_fregp d14, 48
965 ldp d12, d13, [sp, #32]
966 .seh_save_fregp d12, 32
967 ldp d10, d11, [sp, #16]
968 .seh_save_fregp d10, 16
969 ldp d8, d9, [sp], #80
970 .seh_save_fregp_x d8, 80
971 .seh_endepilogue
973 .seh_endproc
975 nonpacked8:
976 .seh_proc nonpacked8
977 // Can't be packed; Can't handle only a single FP reg
978 str d8, [sp, #-16]!
979 .seh_save_freg_x d8, 16
980 .seh_endprologue
982 .seh_startepilogue
983 ldr d8, [sp], #16
984 .seh_save_freg_x d8, 16
985 .seh_endepilogue
987 .seh_endproc
989 nonpacked9:
990 .seh_proc nonpacked9
991 // Can't be packed; can't have a separate stack adjustment with save_fplr_x
992 sub sp, sp, #32
993 .seh_stackalloc 32
994 stp x29, lr, [sp, #-16]!
995 .seh_save_fplr_x 16
996 mov x29, sp
997 .seh_set_fp
998 .seh_endprologue
1000 .seh_startepilogue
1001 mov sp, x29
1002 .seh_set_fp
1003 ldp x29, lr, [sp], #32
1004 .seh_save_fplr_x 16
1005 add sp, sp, #32
1006 .seh_stackalloc 32
1007 .seh_endepilogue
1009 .seh_endproc
1011 nonpacked10:
1012 .seh_proc nonpacked10
1013 // Can't be packed; wrong predecrement
1014 stp x19, x20, [sp, #-16]!
1015 .seh_save_r19r20_x 16
1016 stp x21, x22, [sp, #16]
1017 .seh_save_next
1018 .seh_endprologue
1020 .seh_startepilogue
1021 ldp x21, x22, [sp, #16]
1022 .seh_save_next
1023 ldp x19, x20, [sp], #16
1024 .seh_save_r19r20_x 16
1025 .seh_endepilogue
1027 .seh_endproc
1029 nonpacked11:
1030 .seh_proc nonpacked11
1031 // Can't be packed; too big stack allocation
1032 sub sp, sp, #4080
1033 .seh_stackalloc 4080
1034 sub sp, sp, #8192
1035 .seh_stackalloc 8192
1036 .seh_endprologue
1038 .seh_startepilogue
1039 add sp, sp, #8192
1040 .seh_stackalloc 8192
1041 add sp, sp, #4080
1042 .seh_stackalloc 4080
1043 .seh_endepilogue
1045 .seh_endproc
1047 nonpacked12:
1048 .seh_proc nonpacked12
1049 // Can't be packed; missing .seh_set_fp
1050 stp x29, lr, [sp, #-32]!
1051 .seh_save_fplr_x 32
1052 .seh_endprologue
1054 .seh_startepilogue
1055 ldp x29, lr, [sp], #32
1056 .seh_save_fplr_x 32
1057 .seh_endepilogue
1059 .seh_endproc
1061 nonpacked13:
1062 .seh_proc nonpacked13
1063 // Can't be packed; not doing a packed info if .seh_handlerdata is used
1064 sub sp, sp, #16
1065 .seh_stackalloc 16
1066 .seh_endprologue
1068 .seh_startepilogue
1069 add sp, sp, #16
1070 .seh_stackalloc 16
1071 .seh_endepilogue
1073 .seh_endfunclet
1074 .seh_handlerdata
1075 .long 0
1076 .text
1077 .seh_endproc
1079 nonpacked14:
1080 .seh_proc nonpacked14
1081 // Can't be packed; a signed return address can only be expressed if
1082 // we save both x29 and lr on the stack.
1083 pacibsp
1084 .seh_pac_sign_lr
1085 str lr, [sp, #-32]!
1086 .seh_save_reg_x lr, 32
1087 .seh_endprologue
1089 .seh_startepilogue
1090 ldr lr, [sp], #32
1091 .seh_save_reg_x lr, 32
1092 autibsp
1093 .seh_pac_sign_lr
1094 .seh_endepilogue
1096 .seh_endproc
1098 nonpacked15:
1099 .seh_proc nonpacked15
1100 // Can't be packed; a signed return address can only be expressed if
1101 // we save both x29 and lr on the stack.
1102 pacibsp
1103 .seh_pac_sign_lr
1104 stp x19, x20, [sp, #-32]!
1105 .seh_save_r19r20_x 32
1106 stp x21, lr, [sp, #16]
1107 .seh_save_lrpair x21, 16
1108 sub sp, sp, #16
1109 .seh_stackalloc 16
1110 .seh_endprologue
1112 .seh_startepilogue
1113 add sp, sp, #16
1114 .seh_stackalloc 16
1115 ldp x21, lr, [sp, #16]
1116 .seh_save_lrpair x21, 16
1117 ldp x19, x20, [sp], #32
1118 .seh_save_r19r20_x 32
1119 autibsp
1120 .seh_pac_sign_lr
1121 .seh_endepilogue
1123 .seh_endproc
1125 nonpacked16:
1126 .seh_proc nonpacked16
1127 // Make sure we correctly analyze .seh_save_any_reg_p
1128 stp x29, x30, [sp, #-176]!
1129 .seh_save_fplr_x 176
1130 stp q6, q7, [sp, #16]
1131 .seh_save_any_reg_p q6, 16
1132 stp q8, q9, [sp, #48]
1133 .seh_save_any_reg_p q8, 48
1134 stp q10, q11, [sp, #80]
1135 .seh_save_any_reg_p q10, 80
1136 stp q12, q13, [sp, #112]
1137 .seh_save_any_reg_p q12, 112
1138 stp q14, q15, [sp, #144]
1139 .seh_save_any_reg_p q14, 144
1140 mov x29, sp
1141 .seh_set_fp
1142 .seh_endprologue
1144 .seh_startepilogue
1145 ldp q14, q15, [sp, #144]
1146 .seh_save_any_reg_p q14, 144
1147 ldp q12, q13, [sp, #112]
1148 .seh_save_any_reg_p q12, 112
1149 ldp q10, q11, [sp, #80]
1150 .seh_save_any_reg_p q10, 80
1151 ldp q8, q9, [sp, #48]
1152 .seh_save_any_reg_p q8, 48
1153 ldp q6, q7, [sp, #16]
1154 .seh_save_any_reg_p q6, 16
1155 ldp x29, x30, [sp], #176
1156 .seh_save_fplr_x 176
1157 .seh_endepilogue
1158 br x9
1159 .seh_endproc