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 that 4// the epilog was packed (so that the testcase otherwise had all other 5// preconditions for possibly making packed unwind info). 6 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 10 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 378 379 380 .text 381func1: 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 404 nop 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 427 ret 428 .seh_endproc 429 430func2: 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 443 nop 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 456 ret 457 .seh_endproc 458 459func3: 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 468 nop 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 477 ret 478 .seh_endproc 479 480func4: 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 487 nop 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 494 ret 495 .seh_endproc 496 497notpacked_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 512 nop 513 .seh_startepilogue 514 add sp, sp, #32 515 .seh_stackalloc 32 516 nop 517 .seh_nop 518 nop 519 .seh_nop 520 nop 521 .seh_nop 522 nop 523 .seh_nop 524 ldr x19, [sp], #80 525 .seh_save_reg_x x19, 80 526 .seh_endepilogue 527 ret 528 .seh_endproc 529 530func6: 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 537 nop 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 544 ret 545 .seh_endproc 546 547func7: 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 554 nop 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 561 ret 562 .seh_endproc 563 564func8: 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 573 nop 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 582 ret 583 .seh_endproc 584 585func9: 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 594 nop 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 603 ret 604 .seh_endproc 605 606func10: 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 613 nop 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 620 ret 621 .seh_endproc 622 623func11: 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 634 nop 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 645 ret 646 .seh_endproc 647 648func12: 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 661 nop 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 674 ret 675 .seh_endproc 676 677func13: 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 686 nop 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 695 ret 696 .seh_endproc 697 698func14: 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 707 nop 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 716 ret 717 .seh_endproc 718 719func15: 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 726 nop 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 732 ret 733 .seh_endproc 734 735func16: 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 744 nop 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 751 ret 752 .seh_endproc 753 754func17: 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 765 nop 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 776 ret 777 .seh_endproc 778 779func18: 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 794 nop 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 809 ret 810 .seh_endproc 811 812nonpacked1: 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 820 nop 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 827 ret 828 .seh_endproc 829 830nonpacked2: 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 838 nop 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 845 ret 846 .seh_endproc 847 848nonpacked3: 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 864 nop 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 879 ret 880 .seh_endproc 881 882nonpacked4: 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 889 nop 890 .seh_startepilogue 891 ldp x19, x20, [sp], #32 892 .seh_save_r19r20_x 32 893 .seh_endepilogue 894 ret 895 .seh_endproc 896 897nonpacked5: 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 907 nop 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 916 ret 917 .seh_endproc 918 919nonpacked6: 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 931 nop 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 942 ret 943 .seh_endproc 944 945nonpacked7: 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 959 nop 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 972 ret 973 .seh_endproc 974 975nonpacked8: 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 981 nop 982 .seh_startepilogue 983 ldr d8, [sp], #16 984 .seh_save_freg_x d8, 16 985 .seh_endepilogue 986 ret 987 .seh_endproc 988 989nonpacked9: 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 999 nop 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 1008 ret 1009 .seh_endproc 1010 1011nonpacked10: 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 1019 nop 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 1026 ret 1027 .seh_endproc 1028 1029nonpacked11: 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 1037 nop 1038 .seh_startepilogue 1039 add sp, sp, #8192 1040 .seh_stackalloc 8192 1041 add sp, sp, #4080 1042 .seh_stackalloc 4080 1043 .seh_endepilogue 1044 ret 1045 .seh_endproc 1046 1047nonpacked12: 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 1053 nop 1054 .seh_startepilogue 1055 ldp x29, lr, [sp], #32 1056 .seh_save_fplr_x 32 1057 .seh_endepilogue 1058 ret 1059 .seh_endproc 1060 1061nonpacked13: 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 1067 nop 1068 .seh_startepilogue 1069 add sp, sp, #16 1070 .seh_stackalloc 16 1071 .seh_endepilogue 1072 ret 1073 .seh_endfunclet 1074 .seh_handlerdata 1075 .long 0 1076 .text 1077 .seh_endproc 1078 1079nonpacked14: 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 1088 nop 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 1095 ret 1096 .seh_endproc 1097 1098nonpacked15: 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 1111 nop 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 1122 ret 1123 .seh_endproc 1124 1125nonpacked16: 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 1143 nop 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 1160