1160 lines · plain
1// Check that we generate the packed unwind info format whe possible.2 3// For tests that don't generate packed unwind info, we still check that4// the epilog was packed (so that the testcase otherwise had all other5// preconditions for possibly making packed unwind info).6 7// REQUIRES: aarch64-registered-target8// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o9// RUN: llvm-readobj --unwind %t.o | FileCheck %s10 11// CHECK: UnwindInformation [12// CHECK-NEXT: RuntimeFunction {13// CHECK-NEXT: Function: func114// CHECK-NEXT: Fragment: No15// CHECK-NEXT: FunctionLength: 8816// CHECK-NEXT: RegF: 717// CHECK-NEXT: RegI: 1018// CHECK-NEXT: HomedParameters: No19// CHECK-NEXT: CR: 020// CHECK-NEXT: FrameSize: 16021// CHECK-NEXT: Prologue [22// CHECK-NEXT: sub sp, sp, #1623// 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: end33// CHECK-NEXT: ]34// CHECK-NEXT: }35// CHECK-NEXT: RuntimeFunction {36// CHECK-NEXT: Function: func237// CHECK-NEXT: Fragment: No38// CHECK-NEXT: FunctionLength: 4839// CHECK-NEXT: RegF: 240// CHECK-NEXT: RegI: 341// CHECK-NEXT: HomedParameters: No42// CHECK-NEXT: CR: 043// CHECK-NEXT: FrameSize: 4844// 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: end50// CHECK-NEXT: ]51// CHECK-NEXT: }52// CHECK-NEXT: RuntimeFunction {53// CHECK-NEXT: Function: func354// CHECK-NEXT: Fragment: No55// CHECK-NEXT: FunctionLength: 3256// CHECK-NEXT: RegF: 357// CHECK-NEXT: RegI: 158// CHECK-NEXT: HomedParameters: No59// CHECK-NEXT: CR: 060// CHECK-NEXT: FrameSize: 4861// 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: end66// CHECK-NEXT: ]67// CHECK-NEXT: }68// CHECK-NEXT: RuntimeFunction {69// CHECK-NEXT: Function: func470// CHECK-NEXT: Fragment: No71// CHECK-NEXT: FunctionLength: 2472// CHECK-NEXT: RegF: 173// CHECK-NEXT: RegI: 074// CHECK-NEXT: HomedParameters: No75// CHECK-NEXT: CR: 076// CHECK-NEXT: FrameSize: 4877// CHECK-NEXT: Prologue [78// CHECK-NEXT: sub sp, sp, #3279// CHECK-NEXT: stp d8, d9, [sp, #-16]!80// CHECK-NEXT: end81// CHECK-NEXT: ]82// CHECK-NEXT: }83// CHECK-NEXT: RuntimeFunction {84// CHECK-NEXT: Function: notpacked_func585// CHECK-NEXT: ExceptionRecord:86// CHECK-NEXT: ExceptionData {87// CHECK: RuntimeFunction {88// CHECK-NEXT: Function: func689// CHECK-NEXT: Fragment: No90// CHECK-NEXT: FunctionLength: 2491// CHECK-NEXT: RegF: 092// CHECK-NEXT: RegI: 093// CHECK-NEXT: HomedParameters: No94// CHECK-NEXT: CR: 195// CHECK-NEXT: FrameSize: 3296// CHECK-NEXT: Prologue [97// CHECK-NEXT: sub sp, sp, #1698// CHECK-NEXT: str lr, [sp, #-16]!99// CHECK-NEXT: end100// CHECK-NEXT: ]101// CHECK-NEXT: }102// CHECK-NEXT: RuntimeFunction {103// CHECK-NEXT: Function: func7104// CHECK-NEXT: Fragment: No105// CHECK-NEXT: FunctionLength: 24106// CHECK-NEXT: RegF: 0107// CHECK-NEXT: RegI: 2108// CHECK-NEXT: HomedParameters: No109// CHECK-NEXT: CR: 1110// CHECK-NEXT: FrameSize: 32111// CHECK-NEXT: Prologue [112// CHECK-NEXT: str lr, [sp, #16]113// CHECK-NEXT: stp x19, x20, [sp, #-32]!114// CHECK-NEXT: end115// CHECK-NEXT: ]116// CHECK-NEXT: }117// CHECK-NEXT: RuntimeFunction {118// CHECK-NEXT: Function: func8119// CHECK-NEXT: Fragment: No120// CHECK-NEXT: FunctionLength: 32121// CHECK-NEXT: RegF: 0122// CHECK-NEXT: RegI: 3123// CHECK-NEXT: HomedParameters: No124// CHECK-NEXT: CR: 1125// CHECK-NEXT: FrameSize: 48126// CHECK-NEXT: Prologue [127// CHECK-NEXT: sub sp, sp, #16128// CHECK-NEXT: stp x21, lr, [sp, #16]129// CHECK-NEXT: stp x19, x20, [sp, #-32]!130// CHECK-NEXT: end131// CHECK-NEXT: ]132// CHECK-NEXT: }133// CHECK-NEXT: RuntimeFunction {134// CHECK-NEXT: Function: func9135// CHECK-NEXT: Fragment: No136// CHECK-NEXT: FunctionLength: 32137// CHECK-NEXT: RegF: 0138// CHECK-NEXT: RegI: 2139// CHECK-NEXT: HomedParameters: No140// CHECK-NEXT: CR: 3141// CHECK-NEXT: FrameSize: 48142// CHECK-NEXT: Prologue [143// CHECK-NEXT: mov x29, sp144// CHECK-NEXT: stp x29, lr, [sp, #-32]!145// CHECK-NEXT: stp x19, x20, [sp, #-16]!146// CHECK-NEXT: end147// CHECK-NEXT: ]148// CHECK-NEXT: }149// CHECK-NEXT: RuntimeFunction {150// CHECK-NEXT: Function: func10151// CHECK-NEXT: Fragment: No152// CHECK-NEXT: FunctionLength: 24153// CHECK-NEXT: RegF: 0154// CHECK-NEXT: RegI: 0155// CHECK-NEXT: HomedParameters: No156// CHECK-NEXT: CR: 3157// CHECK-NEXT: FrameSize: 32158// CHECK-NEXT: Prologue [159// CHECK-NEXT: mov x29, sp160// CHECK-NEXT: stp x29, lr, [sp, #-32]!161// CHECK-NEXT: end162// CHECK-NEXT: ]163// CHECK-NEXT: }164// CHECK-NEXT: RuntimeFunction {165// CHECK-NEXT: Function: func11166// CHECK-NEXT: Fragment: No167// CHECK-NEXT: FunctionLength: 40168// CHECK-NEXT: RegF: 0169// CHECK-NEXT: RegI: 2170// CHECK-NEXT: HomedParameters: No171// CHECK-NEXT: CR: 3172// CHECK-NEXT: FrameSize: 544173// CHECK-NEXT: Prologue [174// CHECK-NEXT: mov x29, sp175// CHECK-NEXT: stp x29, lr, [sp, #0]176// CHECK-NEXT: sub sp, sp, #528177// CHECK-NEXT: stp x19, x20, [sp, #-16]!178// CHECK-NEXT: end179// CHECK-NEXT: ]180// CHECK-NEXT: }181// CHECK-NEXT: RuntimeFunction {182// CHECK-NEXT: Function: func12183// CHECK-NEXT: Fragment: No184// CHECK-NEXT: FunctionLength: 48185// CHECK-NEXT: RegF: 0186// CHECK-NEXT: RegI: 2187// CHECK-NEXT: HomedParameters: No188// CHECK-NEXT: CR: 3189// CHECK-NEXT: FrameSize: 4112190// CHECK-NEXT: Prologue [191// CHECK-NEXT: mov x29, sp192// CHECK-NEXT: stp x29, lr, [sp, #0]193// CHECK-NEXT: sub sp, sp, #16194// CHECK-NEXT: sub sp, sp, #4080195// CHECK-NEXT: stp x19, x20, [sp, #-16]!196// CHECK-NEXT: end197// CHECK-NEXT: ]198// CHECK-NEXT: }199// CHECK-NEXT: RuntimeFunction {200// CHECK-NEXT: Function: func13201// CHECK-NEXT: Fragment: No202// CHECK-NEXT: FunctionLength: 32203// CHECK-NEXT: RegF: 0204// CHECK-NEXT: RegI: 2205// CHECK-NEXT: HomedParameters: No206// CHECK-NEXT: CR: 0207// CHECK-NEXT: FrameSize: 4112208// CHECK-NEXT: Prologue [209// CHECK-NEXT: sub sp, sp, #16210// CHECK-NEXT: sub sp, sp, #4080211// CHECK-NEXT: stp x19, x20, [sp, #-16]!212// CHECK-NEXT: end213// CHECK-NEXT: ]214// CHECK-NEXT: }215// CHECK-NEXT: RuntimeFunction {216// CHECK-NEXT: Function: func14217// CHECK-NEXT: Fragment: No218// CHECK-NEXT: FunctionLength: 32219// CHECK-NEXT: RegF: 2220// CHECK-NEXT: RegI: 0221// CHECK-NEXT: HomedParameters: No222// CHECK-NEXT: CR: 1223// CHECK-NEXT: FrameSize: 32224// 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: end229// CHECK-NEXT: ]230// CHECK-NEXT: }231// CHECK-NEXT: RuntimeFunction {232// CHECK-NEXT: Function: func15233// CHECK-NEXT: Fragment: No234// CHECK-NEXT: FunctionLength: 20235// CHECK-NEXT: RegF: 0236// CHECK-NEXT: RegI: 0237// CHECK-NEXT: HomedParameters: No238// CHECK-NEXT: CR: 3239// CHECK-NEXT: FrameSize: 32240// CHECK-NEXT: Prologue [241// CHECK-NEXT: mov x29, sp242// CHECK-NEXT: stp x29, lr, [sp, #-32]!243// CHECK-NEXT: end244// CHECK-NEXT: ]245// CHECK-NEXT: }246// CHECK-NEXT: RuntimeFunction {247// CHECK-NEXT: Function: func16248// CHECK-NEXT: Fragment: No249// CHECK-NEXT: FunctionLength: 28250// CHECK-NEXT: RegF: 0251// CHECK-NEXT: RegI: 0252// CHECK-NEXT: HomedParameters: No253// CHECK-NEXT: CR: 2254// CHECK-NEXT: FrameSize: 32255// CHECK-NEXT: Prologue [256// CHECK-NEXT: mov x29, sp257// CHECK-NEXT: stp x29, lr, [sp, #-32]!258// CHECK-NEXT: pacibsp259// CHECK-NEXT: end260// CHECK-NEXT: ]261// CHECK-NEXT: }262// CHECK-NEXT: RuntimeFunction {263// CHECK-NEXT: Function: func17264// CHECK-NEXT: Fragment: No265// CHECK-NEXT: FunctionLength: 40266// CHECK-NEXT: RegF: 0267// CHECK-NEXT: RegI: 2268// CHECK-NEXT: HomedParameters: No269// CHECK-NEXT: CR: 2270// CHECK-NEXT: FrameSize: 48271// CHECK-NEXT: Prologue [272// CHECK-NEXT: mov x29, sp273// CHECK-NEXT: stp x29, lr, [sp, #-32]!274// CHECK-NEXT: stp x19, x20, [sp, #-16]!275// CHECK-NEXT: pacibsp276// CHECK-NEXT: end277// CHECK-NEXT: ]278// CHECK-NEXT: }279// CHECK-NEXT: RuntimeFunction {280// CHECK-NEXT: Function: func18281// CHECK-NEXT: Fragment: No282// CHECK-NEXT: FunctionLength: 56283// CHECK-NEXT: RegF: 0284// CHECK-NEXT: RegI: 2285// CHECK-NEXT: HomedParameters: No286// CHECK-NEXT: CR: 2287// CHECK-NEXT: FrameSize: 4112288// CHECK-NEXT: Prologue [289// CHECK-NEXT: mov x29, sp290// CHECK-NEXT: stp x29, lr, [sp, #0]291// CHECK-NEXT: sub sp, sp, #16292// CHECK-NEXT: sub sp, sp, #4080293// CHECK-NEXT: stp x19, x20, [sp, #-16]!294// CHECK-NEXT: pacibsp295// CHECK-NEXT: end296// CHECK-NEXT: ]297// CHECK-NEXT: }298// CHECK: RuntimeFunction {299// CHECK-NEXT: Function: nonpacked1300// CHECK-NEXT: ExceptionRecord:301// CHECK-NEXT: ExceptionData {302// CHECK: EpiloguePacked: Yes303// CHECK: RuntimeFunction {304// CHECK-NEXT: Function: nonpacked2305// CHECK-NEXT: ExceptionRecord:306// CHECK-NEXT: ExceptionData {307// CHECK: EpiloguePacked: Yes308// CHECK: RuntimeFunction {309// CHECK-NEXT: Function: nonpacked3310// CHECK-NEXT: ExceptionRecord:311// CHECK-NEXT: ExceptionData {312// CHECK: EpiloguePacked: Yes313// CHECK: RuntimeFunction {314// CHECK-NEXT: Function: nonpacked4315// CHECK-NEXT: ExceptionRecord:316// CHECK-NEXT: ExceptionData {317// CHECK: EpiloguePacked: Yes318// CHECK: RuntimeFunction {319// CHECK-NEXT: Function: nonpacked5320// CHECK-NEXT: ExceptionRecord:321// CHECK-NEXT: ExceptionData {322// CHECK: EpiloguePacked: Yes323// CHECK: RuntimeFunction {324// CHECK-NEXT: Function: nonpacked6325// CHECK-NEXT: ExceptionRecord:326// CHECK-NEXT: ExceptionData {327// CHECK: EpiloguePacked: Yes328// CHECK: RuntimeFunction {329// CHECK-NEXT: Function: nonpacked7330// CHECK-NEXT: ExceptionRecord:331// CHECK-NEXT: ExceptionData {332// CHECK: EpiloguePacked: Yes333// CHECK: RuntimeFunction {334// CHECK-NEXT: Function: nonpacked8335// CHECK-NEXT: ExceptionRecord:336// CHECK-NEXT: ExceptionData {337// CHECK: EpiloguePacked: Yes338// CHECK: RuntimeFunction {339// CHECK-NEXT: Function: nonpacked9340// CHECK-NEXT: ExceptionRecord:341// CHECK-NEXT: ExceptionData {342// CHECK: EpiloguePacked: Yes343// CHECK: RuntimeFunction {344// CHECK-NEXT: Function: nonpacked10345// CHECK-NEXT: ExceptionRecord:346// CHECK-NEXT: ExceptionData {347// CHECK: EpiloguePacked: Yes348// CHECK: RuntimeFunction {349// CHECK-NEXT: Function: nonpacked11350// CHECK-NEXT: ExceptionRecord:351// CHECK-NEXT: ExceptionData {352// CHECK: EpiloguePacked: Yes353// CHECK: RuntimeFunction {354// CHECK-NEXT: Function: nonpacked12355// CHECK-NEXT: ExceptionRecord:356// CHECK-NEXT: ExceptionData {357// CHECK: EpiloguePacked: Yes358// CHECK: RuntimeFunction {359// CHECK-NEXT: Function: nonpacked13360// CHECK-NEXT: ExceptionRecord:361// CHECK-NEXT: ExceptionData {362// CHECK: EpiloguePacked: Yes363// CHECK: RuntimeFunction {364// CHECK-NEXT: Function: nonpacked14365// CHECK-NEXT: ExceptionRecord:366// CHECK-NEXT: ExceptionData {367// CHECK: EpiloguePacked: Yes368// CHECK: RuntimeFunction {369// CHECK-NEXT: Function: nonpacked15370// CHECK-NEXT: ExceptionRecord:371// CHECK-NEXT: ExceptionData {372// CHECK: EpiloguePacked: Yes373// CHECK: RuntimeFunction {374// CHECK-NEXT: Function: nonpacked16375// CHECK-NEXT: ExceptionRecord:376// CHECK-NEXT: ExceptionData {377// CHECK: EpiloguePacked: Yes378 379 380 .text381func1:382 .seh_proc func1383 stp x19, x20, [sp, #-144]!384 .seh_save_r19r20_x 144385 stp x21, x22, [sp, #16]386 .seh_save_regp x21, 16387 stp x23, x24, [sp, #32]388 .seh_save_next389 stp x25, x26, [sp, #48]390 .seh_save_next391 stp x27, x28, [sp, #64]392 .seh_save_next393 stp d8, d9, [sp, #80]394 .seh_save_fregp d8, 80395 stp d10, d11, [sp, #96]396 .seh_save_fregp d10, 96397 stp d12, d13, [sp, #112]398 .seh_save_fregp d12, 112399 stp d14, d15, [sp, #128]400 .seh_save_fregp d14, 128401 sub sp, sp, #16402 .seh_stackalloc 16403 .seh_endprologue404 nop405 .seh_startepilogue406 add sp, sp, #16407 .seh_stackalloc 16408 ldp d14, d15, [sp, #128]409 .seh_save_fregp d14, 128410 ldp d12, d13, [sp, #112]411 .seh_save_fregp d12, 112412 ldp d10, d11, [sp, #96]413 .seh_save_fregp d10, 96414 ldp d8, d9, [sp, #80]415 .seh_save_fregp d8, 80416 ldp x27, x28, [sp, #64]417 .seh_save_next418 ldp x25, x26, [sp, #48]419 .seh_save_next420 ldp x23, x24, [sp, #32]421 .seh_save_next422 ldp x21, x22, [sp, #16]423 .seh_save_next424 ldp x19, x20, [sp], #144425 .seh_save_regp_x x19, 144426 .seh_endepilogue427 ret428 .seh_endproc429 430func2:431 .seh_proc func2432 stp x19, x20, [sp, #-48]!433 .seh_save_r19r20_x 48434 str x21, [sp, #16]435 .seh_save_reg x21, 16436 stp d8, d9, [sp, #24]437 .seh_save_fregp d8, 24438 str d10, [sp, #40]439 .seh_save_freg d10, 40440 sub sp, sp, #0441 .seh_stackalloc 0442 .seh_endprologue443 nop444 .seh_startepilogue445 add sp, sp, #0446 .seh_stackalloc 0447 ldr d10, [sp, #40]448 .seh_save_freg d10, 40449 ldp d8, d9, [sp, #24]450 .seh_save_fregp d8, 24451 ldr x21, [sp, #16]452 .seh_save_reg x21, 16453 ldp x19, x20, [sp], #48454 .seh_save_r19r20_x 48455 .seh_endepilogue456 ret457 .seh_endproc458 459func3:460 .seh_proc func3461 str x19, [sp, #-48]!462 .seh_save_reg_x x19, 48463 stp d8, d9, [sp, #8]464 .seh_save_fregp d8, 8465 stp d10, d11, [sp, #24]466 .seh_save_fregp d10, 24467 .seh_endprologue468 nop469 .seh_startepilogue470 ldp d10, d11, [sp, #24]471 .seh_save_fregp d10, 24472 ldp d8, d9, [sp, #8]473 .seh_save_fregp d8, 8474 ldr x19, [sp], #48475 .seh_save_reg_x x19, 48476 .seh_endepilogue477 ret478 .seh_endproc479 480func4:481 .seh_proc func4482 stp d8, d9, [sp, #-16]!483 .seh_save_fregp_x d8, 16484 sub sp, sp, #32485 .seh_stackalloc 32486 .seh_endprologue487 nop488 .seh_startepilogue489 add sp, sp, #32490 .seh_stackalloc 32491 ldp d8, d9, [sp], #16492 .seh_save_fregp_x d8, 16493 .seh_endepilogue494 ret495 .seh_endproc496 497notpacked_func5:498 .seh_proc notpacked_func5499 str x19, [sp, #-80]!500 .seh_save_reg_x x19, 80501 stp x0, x1, [sp, #16]502 .seh_nop503 stp x2, x3, [sp, #32]504 .seh_nop505 stp x4, x5, [sp, #48]506 .seh_nop507 stp x6, x7, [sp, #64]508 .seh_nop509 sub sp, sp, #32510 .seh_stackalloc 32511 .seh_endprologue512 nop513 .seh_startepilogue514 add sp, sp, #32515 .seh_stackalloc 32516 nop517 .seh_nop518 nop519 .seh_nop520 nop521 .seh_nop522 nop523 .seh_nop524 ldr x19, [sp], #80525 .seh_save_reg_x x19, 80526 .seh_endepilogue527 ret528 .seh_endproc529 530func6:531 .seh_proc func6532 str lr, [sp, #-16]!533 .seh_save_reg_x lr, 16534 sub sp, sp, #16535 .seh_stackalloc 16536 .seh_endprologue537 nop538 .seh_startepilogue539 add sp, sp, #16540 .seh_stackalloc 16541 ldr lr, [sp], #16542 .seh_save_reg_x lr, 16543 .seh_endepilogue544 ret545 .seh_endproc546 547func7:548 .seh_proc func7549 stp x19, x20, [sp, #-32]!550 .seh_save_r19r20_x 32551 str lr, [sp, #16]552 .seh_save_reg lr, 16553 .seh_endprologue554 nop555 .seh_startepilogue556 ldr lr, [sp, #16]557 .seh_save_reg lr, 16558 ldp x19, x20, [sp], #32559 .seh_save_r19r20_x 32560 .seh_endepilogue561 ret562 .seh_endproc563 564func8:565 .seh_proc func8566 stp x19, x20, [sp, #-32]!567 .seh_save_r19r20_x 32568 stp x21, lr, [sp, #16]569 .seh_save_lrpair x21, 16570 sub sp, sp, #16571 .seh_stackalloc 16572 .seh_endprologue573 nop574 .seh_startepilogue575 add sp, sp, #16576 .seh_stackalloc 16577 ldp x21, lr, [sp, #16]578 .seh_save_lrpair x21, 16579 ldp x19, x20, [sp], #32580 .seh_save_r19r20_x 32581 .seh_endepilogue582 ret583 .seh_endproc584 585func9:586 .seh_proc func9587 stp x19, x20, [sp, #-16]!588 .seh_save_r19r20_x 16589 stp x29, lr, [sp, #-32]!590 .seh_save_fplr_x 32591 mov x29, sp592 .seh_set_fp593 .seh_endprologue594 nop595 .seh_startepilogue596 mov sp, x29597 .seh_set_fp598 ldp x29, lr, [sp], #32599 .seh_save_fplr_x 32600 ldp x19, x20, [sp], #16601 .seh_save_r19r20_x 16602 .seh_endepilogue603 ret604 .seh_endproc605 606func10:607 .seh_proc func10608 stp x29, lr, [sp, #-32]!609 .seh_save_fplr_x 32610 mov x29, sp611 .seh_set_fp612 .seh_endprologue613 nop614 .seh_startepilogue615 mov sp, x29616 .seh_set_fp617 ldp x29, lr, [sp], #32618 .seh_save_fplr_x 32619 .seh_endepilogue620 ret621 .seh_endproc622 623func11:624 .seh_proc func11625 stp x19, x20, [sp, #-16]!626 .seh_save_r19r20_x 16627 sub sp, sp, #528628 .seh_stackalloc 528629 stp x29, lr, [sp, #0]630 .seh_save_fplr 0631 mov x29, sp632 .seh_set_fp633 .seh_endprologue634 nop635 .seh_startepilogue636 mov sp, x29637 .seh_set_fp638 ldp x29, lr, [sp, #0]639 .seh_save_fplr 0640 add sp, sp, #528641 .seh_stackalloc 528642 ldp x19, x20, [sp], #16643 .seh_save_r19r20_x 16644 .seh_endepilogue645 ret646 .seh_endproc647 648func12:649 .seh_proc func12650 stp x19, x20, [sp, #-16]!651 .seh_save_r19r20_x 16652 sub sp, sp, #4080653 .seh_stackalloc 4080654 sub sp, sp, #16655 .seh_stackalloc 16656 stp x29, lr, [sp, #0]657 .seh_save_fplr 0658 mov x29, sp659 .seh_set_fp660 .seh_endprologue661 nop662 .seh_startepilogue663 mov sp, x29664 .seh_set_fp665 ldp x29, lr, [sp, #0]666 .seh_save_fplr 0667 add sp, sp, #16668 .seh_stackalloc 16669 add sp, sp, #4080670 .seh_stackalloc 4080671 ldp x19, x20, [sp], #16672 .seh_save_r19r20_x 16673 .seh_endepilogue674 ret675 .seh_endproc676 677func13:678 .seh_proc func13679 stp x19, x20, [sp, #-16]!680 .seh_save_r19r20_x 16681 sub sp, sp, #4080682 .seh_stackalloc 4080683 sub sp, sp, #16684 .seh_stackalloc 16685 .seh_endprologue686 nop687 .seh_startepilogue688 add sp, sp, #16689 .seh_stackalloc 16690 add sp, sp, #4080691 .seh_stackalloc 4080692 ldp x19, x20, [sp], #16693 .seh_save_r19r20_x 16694 .seh_endepilogue695 ret696 .seh_endproc697 698func14:699 .seh_proc func14700 str lr, [sp, #-32]!701 .seh_save_reg_x lr, 32702 stp d8, d9, [sp, #8]703 .seh_save_fregp d8, 8704 str d10, [sp, #24]705 .seh_save_freg d10, 24706 .seh_endprologue707 nop708 .seh_startepilogue709 ldr d10, [sp, #24]710 .seh_save_freg d10, 24711 ldp d8, d9, [sp, #8]712 .seh_save_fregp d8, 8713 ldr lr, [sp], #32714 .seh_save_reg_x lr, 32715 .seh_endepilogue716 ret717 .seh_endproc718 719func15:720 .seh_proc func15721 stp x29, lr, [sp, #-32]!722 .seh_save_fplr_x 32723 mov x29, sp724 .seh_set_fp725 .seh_endprologue726 nop727 .seh_startepilogue728 // Epilogue missing the .seh_set_fp, but still generating packed info.729 ldp x29, lr, [sp], #32730 .seh_save_fplr_x 32731 .seh_endepilogue732 ret733 .seh_endproc734 735func16:736 .seh_proc func16737 pacibsp738 .seh_pac_sign_lr739 stp x29, lr, [sp, #-32]!740 .seh_save_fplr_x 32741 mov x29, sp742 .seh_set_fp743 .seh_endprologue744 nop745 .seh_startepilogue746 ldp x29, lr, [sp], #32747 .seh_save_fplr_x 32748 autibsp749 .seh_pac_sign_lr750 .seh_endepilogue751 ret752 .seh_endproc753 754func17:755 .seh_proc func17756 pacibsp757 .seh_pac_sign_lr758 stp x19, x20, [sp, #-16]!759 .seh_save_r19r20_x 16760 stp x29, lr, [sp, #-32]!761 .seh_save_fplr_x 32762 mov x29, sp763 .seh_set_fp764 .seh_endprologue765 nop766 .seh_startepilogue767 mov sp, x29768 .seh_set_fp769 ldp x29, lr, [sp], #32770 .seh_save_fplr_x 32771 ldp x19, x20, [sp], #16772 .seh_save_r19r20_x 16773 autibsp774 .seh_pac_sign_lr775 .seh_endepilogue776 ret777 .seh_endproc778 779func18:780 .seh_proc func18781 pacibsp782 .seh_pac_sign_lr783 stp x19, x20, [sp, #-16]!784 .seh_save_r19r20_x 16785 sub sp, sp, #4080786 .seh_stackalloc 4080787 sub sp, sp, #16788 .seh_stackalloc 16789 stp x29, lr, [sp, #0]790 .seh_save_fplr 0791 mov x29, sp792 .seh_set_fp793 .seh_endprologue794 nop795 .seh_startepilogue796 mov sp, x29797 .seh_set_fp798 ldp x29, lr, [sp, #0]799 .seh_save_fplr 0800 add sp, sp, #16801 .seh_stackalloc 16802 add sp, sp, #4080803 .seh_stackalloc 4080804 ldp x19, x20, [sp], #16805 .seh_save_r19r20_x 16806 autibsp807 .seh_pac_sign_lr808 .seh_endepilogue809 ret810 .seh_endproc811 812nonpacked1:813 .seh_proc nonpacked1814 // Can't be packed; can't save integer registers after float registers.815 stp d8, d9, [sp, #-32]!816 .seh_save_fregp_x d8, 32817 stp x19, x20, [sp, #16]!818 .seh_save_regp x19, 16819 .seh_endprologue820 nop821 .seh_startepilogue822 ldp x19, x20, [sp, #16]823 .seh_save_regp x19, 16824 ldp d8, d9, [sp], #32825 .seh_save_fregp_x d8, 32826 .seh_endepilogue827 ret828 .seh_endproc829 830nonpacked2:831 .seh_proc nonpacked2832 // Can't be packed; x21/x22 aren't saved in the expected spot833 stp x19, x20, [sp, #-48]!834 .seh_save_r19r20_x 48835 stp x21, x22, [sp, #32]836 .seh_save_regp x21, 32837 .seh_endprologue838 nop839 .seh_startepilogue840 ldp x21, x22, [sp, #32]841 .seh_save_regp x21, 32842 ldp x19, x20, [sp], #48843 .seh_save_r19r20_x 48844 .seh_endepilogue845 ret846 .seh_endproc847 848nonpacked3:849 .seh_proc nonpacked3850 // Can't be packed; x29/x30 can't be treated as the other saved registers851 stp x19, x20, [sp, #-96]!852 .seh_save_r19r20_x 96853 stp x21, x22, [sp, #16]854 .seh_save_next855 stp x23, x24, [sp, #32]856 .seh_save_next857 stp x25, x26, [sp, #48]858 .seh_save_next859 stp x27, x28, [sp, #64]860 .seh_save_next861 stp x29, x30, [sp, #80]862 .seh_save_next863 .seh_endprologue864 nop865 .seh_startepilogue866 ldp x29, x30, [sp, #80]867 .seh_save_next868 ldp x27, x28, [sp, #64]869 .seh_save_next870 ldp x25, x26, [sp, #48]871 .seh_save_next872 ldp x23, x24, [sp, #32]873 .seh_save_next874 ldp x21, x22, [sp, #16]875 .seh_save_next876 ldp x19, x20, [sp], #96877 .seh_save_r19r20_x 96878 .seh_endepilogue879 ret880 .seh_endproc881 882nonpacked4:883 .seh_proc nonpacked4884 // Can't be packed; more predecrement for x19/x20 than used for885 // corresponding RegI/RegF/LR saves886 stp x19, x20, [sp, #-32]!887 .seh_save_r19r20_x 32888 .seh_endprologue889 nop890 .seh_startepilogue891 ldp x19, x20, [sp], #32892 .seh_save_r19r20_x 32893 .seh_endepilogue894 ret895 .seh_endproc896 897nonpacked5:898 .seh_proc nonpacked5899 // Can't be packed; can't save LR twice900 stp x19, x20, [sp, #-32]!901 .seh_save_r19r20_x 32902 str lr, [sp, #16]903 .seh_save_reg lr, 16904 str lr, [sp, #24]905 .seh_save_reg lr, 24906 .seh_endprologue907 nop908 .seh_startepilogue909 ldr lr, [sp, #24]910 .seh_save_reg lr, 24911 ldr lr, [sp, #16]912 .seh_save_reg lr, 16913 ldp x19, x20, [sp], #32914 .seh_save_r19r20_x 32915 .seh_endepilogue916 ret917 .seh_endproc918 919nonpacked6:920 .seh_proc nonpacked6921 // 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 32924 str lr, [sp, #16]925 .seh_save_reg lr, 16926 stp x29, lr, [sp, #-16]!927 .seh_save_fplr_x 16928 mov x29, sp929 .seh_set_fp930 .seh_endprologue931 nop932 .seh_startepilogue933 mov sp, x29934 .seh_set_fp935 ldp x29, lr, [sp], #32936 .seh_save_fplr_x 16937 ldr lr, [sp, #16]938 .seh_save_reg lr, 16939 ldp x19, x20, [sp], #32940 .seh_save_r19r20_x 32941 .seh_endepilogue942 ret943 .seh_endproc944 945nonpacked7:946 .seh_proc nonpacked7947 // Can't be packed; too many saved FP regs948 stp d8, d9, [sp, #-80]!949 .seh_save_fregp_x d8, 80950 stp d10, d11, [sp, #16]951 .seh_save_fregp d10, 16952 stp d12, d13, [sp, #32]953 .seh_save_fregp d12, 32954 stp d14, d15, [sp, #48]955 .seh_save_fregp d14, 48956 stp d16, d17, [sp, #64]957 .seh_save_next958 .seh_endprologue959 nop960 .seh_startepilogue961 ldp d16, d17, [sp, #64]962 .seh_save_next963 ldp d14, d15, [sp, #48]964 .seh_save_fregp d14, 48965 ldp d12, d13, [sp, #32]966 .seh_save_fregp d12, 32967 ldp d10, d11, [sp, #16]968 .seh_save_fregp d10, 16969 ldp d8, d9, [sp], #80970 .seh_save_fregp_x d8, 80971 .seh_endepilogue972 ret973 .seh_endproc974 975nonpacked8:976 .seh_proc nonpacked8977 // Can't be packed; Can't handle only a single FP reg978 str d8, [sp, #-16]!979 .seh_save_freg_x d8, 16980 .seh_endprologue981 nop982 .seh_startepilogue983 ldr d8, [sp], #16984 .seh_save_freg_x d8, 16985 .seh_endepilogue986 ret987 .seh_endproc988 989nonpacked9:990 .seh_proc nonpacked9991 // Can't be packed; can't have a separate stack adjustment with save_fplr_x992 sub sp, sp, #32993 .seh_stackalloc 32994 stp x29, lr, [sp, #-16]!995 .seh_save_fplr_x 16996 mov x29, sp997 .seh_set_fp998 .seh_endprologue999 nop1000 .seh_startepilogue1001 mov sp, x291002 .seh_set_fp1003 ldp x29, lr, [sp], #321004 .seh_save_fplr_x 161005 add sp, sp, #321006 .seh_stackalloc 321007 .seh_endepilogue1008 ret1009 .seh_endproc1010 1011nonpacked10:1012 .seh_proc nonpacked101013 // Can't be packed; wrong predecrement1014 stp x19, x20, [sp, #-16]!1015 .seh_save_r19r20_x 161016 stp x21, x22, [sp, #16]1017 .seh_save_next1018 .seh_endprologue1019 nop1020 .seh_startepilogue1021 ldp x21, x22, [sp, #16]1022 .seh_save_next1023 ldp x19, x20, [sp], #161024 .seh_save_r19r20_x 161025 .seh_endepilogue1026 ret1027 .seh_endproc1028 1029nonpacked11:1030 .seh_proc nonpacked111031 // Can't be packed; too big stack allocation1032 sub sp, sp, #40801033 .seh_stackalloc 40801034 sub sp, sp, #81921035 .seh_stackalloc 81921036 .seh_endprologue1037 nop1038 .seh_startepilogue1039 add sp, sp, #81921040 .seh_stackalloc 81921041 add sp, sp, #40801042 .seh_stackalloc 40801043 .seh_endepilogue1044 ret1045 .seh_endproc1046 1047nonpacked12:1048 .seh_proc nonpacked121049 // Can't be packed; missing .seh_set_fp1050 stp x29, lr, [sp, #-32]!1051 .seh_save_fplr_x 321052 .seh_endprologue1053 nop1054 .seh_startepilogue1055 ldp x29, lr, [sp], #321056 .seh_save_fplr_x 321057 .seh_endepilogue1058 ret1059 .seh_endproc1060 1061nonpacked13:1062 .seh_proc nonpacked131063 // Can't be packed; not doing a packed info if .seh_handlerdata is used1064 sub sp, sp, #161065 .seh_stackalloc 161066 .seh_endprologue1067 nop1068 .seh_startepilogue1069 add sp, sp, #161070 .seh_stackalloc 161071 .seh_endepilogue1072 ret1073 .seh_endfunclet1074 .seh_handlerdata1075 .long 01076 .text1077 .seh_endproc1078 1079nonpacked14:1080 .seh_proc nonpacked141081 // Can't be packed; a signed return address can only be expressed if1082 // we save both x29 and lr on the stack.1083 pacibsp1084 .seh_pac_sign_lr1085 str lr, [sp, #-32]!1086 .seh_save_reg_x lr, 321087 .seh_endprologue1088 nop1089 .seh_startepilogue1090 ldr lr, [sp], #321091 .seh_save_reg_x lr, 321092 autibsp1093 .seh_pac_sign_lr1094 .seh_endepilogue1095 ret1096 .seh_endproc1097 1098nonpacked15:1099 .seh_proc nonpacked151100 // Can't be packed; a signed return address can only be expressed if1101 // we save both x29 and lr on the stack.1102 pacibsp1103 .seh_pac_sign_lr1104 stp x19, x20, [sp, #-32]!1105 .seh_save_r19r20_x 321106 stp x21, lr, [sp, #16]1107 .seh_save_lrpair x21, 161108 sub sp, sp, #161109 .seh_stackalloc 161110 .seh_endprologue1111 nop1112 .seh_startepilogue1113 add sp, sp, #161114 .seh_stackalloc 161115 ldp x21, lr, [sp, #16]1116 .seh_save_lrpair x21, 161117 ldp x19, x20, [sp], #321118 .seh_save_r19r20_x 321119 autibsp1120 .seh_pac_sign_lr1121 .seh_endepilogue1122 ret1123 .seh_endproc1124 1125nonpacked16:1126 .seh_proc nonpacked161127 // Make sure we correctly analyze .seh_save_any_reg_p1128 stp x29, x30, [sp, #-176]!1129 .seh_save_fplr_x 1761130 stp q6, q7, [sp, #16]1131 .seh_save_any_reg_p q6, 161132 stp q8, q9, [sp, #48]1133 .seh_save_any_reg_p q8, 481134 stp q10, q11, [sp, #80]1135 .seh_save_any_reg_p q10, 801136 stp q12, q13, [sp, #112]1137 .seh_save_any_reg_p q12, 1121138 stp q14, q15, [sp, #144]1139 .seh_save_any_reg_p q14, 1441140 mov x29, sp1141 .seh_set_fp1142 .seh_endprologue1143 nop1144 .seh_startepilogue1145 ldp q14, q15, [sp, #144]1146 .seh_save_any_reg_p q14, 1441147 ldp q12, q13, [sp, #112]1148 .seh_save_any_reg_p q12, 1121149 ldp q10, q11, [sp, #80]1150 .seh_save_any_reg_p q10, 801151 ldp q8, q9, [sp, #48]1152 .seh_save_any_reg_p q8, 481153 ldp q6, q7, [sp, #16]1154 .seh_save_any_reg_p q6, 161155 ldp x29, x30, [sp], #1761156 .seh_save_fplr_x 1761157 .seh_endepilogue1158 br x91159 .seh_endproc1160