103 lines · plain
1// This test checks that the unwinding opcodes are remapped to more2// efficient ones where possible.3 4// RUN: llvm-mc -triple aarch64-pc-win32 -filetype=obj %s -o %t.o5// RUN: llvm-readobj -u %t.o | FileCheck %s6 7// CHECK: UnwindInformation [8// CHECK-NEXT: RuntimeFunction {9// CHECK-NEXT: Function: func10// CHECK-NEXT: ExceptionRecord: .xdata11// CHECK-NEXT: ExceptionData {12// CHECK: Prologue [13// CHECK-NEXT: 0xd882 ; stp d10, d11, [sp, #16]14// CHECK-NEXT: 0xda07 ; stp d8, d9, [sp, #-64]!15// CHECK-NEXT: 0xe6 ; save next16// CHECK-NEXT: 0x28 ; stp x19, x20, [sp, #-64]!17// CHECK-NEXT: 0xca49 ; stp x28, x29, [sp, #72]18// CHECK-NEXT: 0xe6 ; save next19// CHECK-NEXT: 0xe6 ; save next20// CHECK-NEXT: 0xe6 ; save next21// CHECK-NEXT: 0xcc47 ; stp x20, x21, [sp, #-64]!22// CHECK-NEXT: 0x42 ; stp x29, x30, [sp, #16]23// CHECK-NEXT: 0xca02 ; stp x27, x28, [sp, #16]24// CHECK-NEXT: 0x83 ; stp x29, x30, [sp, #-32]!25// CHECK-NEXT: 0xce03 ; stp x27, x28, [sp, #-32]!26// CHECK-NEXT: 0xe1 ; mov fp, sp27// CHECK-NEXT: 0xe201 ; add fp, sp, #828// CHECK-NEXT: 0xe4 ; end29// CHECK-NEXT: ]30// CHECK-NEXT: Epilogue [31// CHECK-NEXT: 0xc904 ; ldp x23, x24, [sp, #32]32// CHECK-NEXT: 0xe6 ; restore next33// CHECK-NEXT: 0xcc83 ; ldp x21, x22, [sp], #3234// CHECK-NEXT: 0x24 ; ldp x19, x20, [sp], #3235// CHECK-NEXT: 0xcc1f ; ldp x19, x20, [sp], #25636// CHECK-NEXT: 0xe4 ; end37// CHECK-NEXT: ]38// CHECK-NEXT: }39// CHECK-NEXT: }40// CHECK-NEXT: ]41 42 43 .text44 .globl func45 .seh_proc func46func:47 add x29, sp, #848 .seh_add_fp 849 add x29, sp, #050 .seh_add_fp 051 52 stp x27, x28, [sp, #-32]!53 .seh_save_regp_x x27, 3254 stp x29, x30, [sp, #-32]!55 .seh_save_regp_x x29, 3256 57 stp x27, x28, [sp, #16]58 .seh_save_regp x27, 1659 stp x29, x30, [sp, #16]60 .seh_save_regp x29, 1661 62 stp x20, x21, [sp, #-64]!63 .seh_save_regp_x x20, 6464 stp x22, x23, [sp, #16]65 .seh_save_regp x22, 1666 stp x24, x25, [sp, #32]67 .seh_save_next68 stp x26, x27, [sp, #48]69 .seh_save_regp x26, 4870 stp x28, x29, [sp, #72]71 .seh_save_regp x28, 7272 73 stp x19, x20, [sp, #-64]!74 .seh_save_r19r20_x 6475 stp x21, x22, [sp, #16]76 .seh_save_regp x21, 1677 78 stp d8, d9, [sp, #-64]!79 .seh_save_fregp_x d8, 6480 stp d10, d11, [sp, #16]81 // This is intentionally not converted into a save_next, to avoid82 // bugs in the windows unwinder.83 .seh_save_fregp d10, 1684 85 .seh_endprologue86 87 nop88 89 .seh_startepilogue90 ldp x27, x28, [sp, #32]91 .seh_save_regp x23, 3292 ldp x23, x24, [sp, #16]93 .seh_save_regp x23, 1694 ldp x21, x22, [sp], #3295 .seh_save_regp_x x21, 3296 ldp x19, x20, [sp], #3297 .seh_save_regp_x x19, 3298 ldp x19, x20, [sp], #25699 .seh_save_regp_x x19, 256100 .seh_endepilogue101 ret102 .seh_endproc103