948 lines
24 KiB
ArmAsm
948 lines
24 KiB
ArmAsm
|
// Check that we generate the packed unwind info format whe possible.
|
||
|
|
||
|
// For tests that don't generate packed unwind info, we still check that
|
||
|
// the epilog was packed (so that the testcase otherwise had all other
|
||
|
// preconditions for possibly making packed unwind info).
|
||
|
|
||
|
// REQUIRES: aarch64-registered-target
|
||
|
// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o
|
||
|
// RUN: llvm-readobj --unwind %t.o | FileCheck %s
|
||
|
|
||
|
// CHECK: UnwindInformation [
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func1
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 88
|
||
|
// CHECK-NEXT: RegF: 7
|
||
|
// CHECK-NEXT: RegI: 10
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 160
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: stp d14, d15, [sp, #128]
|
||
|
// CHECK-NEXT: stp d12, d13, [sp, #112]
|
||
|
// CHECK-NEXT: stp d10, d11, [sp, #96]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #80]
|
||
|
// CHECK-NEXT: stp x27, x28, [sp, #64]
|
||
|
// CHECK-NEXT: stp x25, x26, [sp, #48]
|
||
|
// CHECK-NEXT: stp x23, x24, [sp, #32]
|
||
|
// CHECK-NEXT: stp x21, x22, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-144]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func2
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 48
|
||
|
// CHECK-NEXT: RegF: 2
|
||
|
// CHECK-NEXT: RegI: 3
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: str d10, [sp, #40]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #24]
|
||
|
// CHECK-NEXT: str x21, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-48]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func3
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 3
|
||
|
// CHECK-NEXT: RegI: 1
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: stp d10, d11, [sp, #24]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #8]
|
||
|
// CHECK-NEXT: str x19, [sp, #-48]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func4
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 1
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func5
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 56
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 1
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: stp x6, x7, [sp, #56]
|
||
|
// CHECK-NEXT: stp x4, x5, [sp, #40]
|
||
|
// CHECK-NEXT: stp x2, x3, [sp, #24]
|
||
|
// CHECK-NEXT: stp x0, x1, [sp, #8]
|
||
|
// CHECK-NEXT: str x19, [sp, #-80]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func6
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: str lr, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func7
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: str lr, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func8
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 3
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: stp x21, lr, [sp, #16]
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func9
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 48
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #-32]!
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func10
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func11
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 40
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 544
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #0]
|
||
|
// CHECK-NEXT: sub sp, sp, #528
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func12
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 48
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 4112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #0]
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: sub sp, sp, #4080
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func13
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 2
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 0
|
||
|
// CHECK-NEXT: FrameSize: 4112
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: sub sp, sp, #4080
|
||
|
// CHECK-NEXT: stp x19, x20, [sp, #-16]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func14
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 32
|
||
|
// CHECK-NEXT: RegF: 2
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 1
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: str d10, [sp, #24]
|
||
|
// CHECK-NEXT: stp d8, d9, [sp, #8]
|
||
|
// CHECK-NEXT: str lr, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func15
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 20
|
||
|
// CHECK-NEXT: RegF: 0
|
||
|
// CHECK-NEXT: RegI: 0
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: CR: 3
|
||
|
// CHECK-NEXT: FrameSize: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov x29, sp
|
||
|
// CHECK-NEXT: stp x29, lr, [sp, #-32]!
|
||
|
// CHECK-NEXT: end
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked1
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked2
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked3
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked4
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked5
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked6
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked7
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked8
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked9
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked10
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked11
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked12
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: nonpacked13
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK-NEXT: ExceptionData {
|
||
|
// CHECK: EpiloguePacked: Yes
|
||
|
|
||
|
.text
|
||
|
func1:
|
||
|
.seh_proc func1
|
||
|
stp x19, x20, [sp, #-144]!
|
||
|
.seh_save_r19r20_x 144
|
||
|
stp x21, x22, [sp, #16]
|
||
|
.seh_save_regp x21, 16
|
||
|
stp x23, x24, [sp, #32]
|
||
|
.seh_save_next
|
||
|
stp x25, x26, [sp, #48]
|
||
|
.seh_save_next
|
||
|
stp x27, x28, [sp, #64]
|
||
|
.seh_save_next
|
||
|
stp d8, d9, [sp, #80]
|
||
|
.seh_save_fregp d8, 80
|
||
|
stp d10, d11, [sp, #96]
|
||
|
.seh_save_fregp d10, 96
|
||
|
stp d12, d13, [sp, #112]
|
||
|
.seh_save_fregp d12, 112
|
||
|
stp d14, d15, [sp, #128]
|
||
|
.seh_save_fregp d14, 128
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
ldp d14, d15, [sp, #128]
|
||
|
.seh_save_fregp d14, 128
|
||
|
ldp d12, d13, [sp, #112]
|
||
|
.seh_save_fregp d12, 112
|
||
|
ldp d10, d11, [sp, #96]
|
||
|
.seh_save_fregp d10, 96
|
||
|
ldp d8, d9, [sp, #80]
|
||
|
.seh_save_fregp d8, 80
|
||
|
ldp x27, x28, [sp, #64]
|
||
|
.seh_save_next
|
||
|
ldp x25, x26, [sp, #48]
|
||
|
.seh_save_next
|
||
|
ldp x23, x24, [sp, #32]
|
||
|
.seh_save_next
|
||
|
ldp x21, x22, [sp, #16]
|
||
|
.seh_save_next
|
||
|
ldp x19, x20, [sp], #144
|
||
|
.seh_save_regp_x x19, 144
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func2:
|
||
|
.seh_proc func2
|
||
|
stp x19, x20, [sp, #-48]!
|
||
|
.seh_save_r19r20_x 48
|
||
|
str x21, [sp, #16]
|
||
|
.seh_save_reg x21, 16
|
||
|
stp d8, d9, [sp, #24]
|
||
|
.seh_save_fregp d8, 24
|
||
|
str d10, [sp, #40]
|
||
|
.seh_save_freg d10, 40
|
||
|
sub sp, sp, #0
|
||
|
.seh_stackalloc 0
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #0
|
||
|
.seh_stackalloc 0
|
||
|
ldr d10, [sp, #40]
|
||
|
.seh_save_freg d10, 40
|
||
|
ldp d8, d9, [sp, #24]
|
||
|
.seh_save_fregp d8, 24
|
||
|
ldr x21, [sp, #16]
|
||
|
.seh_save_reg x21, 16
|
||
|
ldp x19, x20, [sp], #48
|
||
|
.seh_save_r19r20_x 48
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func3:
|
||
|
.seh_proc func3
|
||
|
str x19, [sp, #-48]!
|
||
|
.seh_save_reg_x x19, 48
|
||
|
stp d8, d9, [sp, #8]
|
||
|
.seh_save_fregp d8, 8
|
||
|
stp d10, d11, [sp, #24]
|
||
|
.seh_save_fregp d10, 24
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp d10, d11, [sp, #24]
|
||
|
.seh_save_fregp d10, 24
|
||
|
ldp d8, d9, [sp, #8]
|
||
|
.seh_save_fregp d8, 8
|
||
|
ldr x19, [sp], #48
|
||
|
.seh_save_reg_x x19, 48
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func4:
|
||
|
.seh_proc func4
|
||
|
stp d8, d9, [sp, #-16]!
|
||
|
.seh_save_fregp_x d8, 16
|
||
|
sub sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
ldp d8, d9, [sp], #16
|
||
|
.seh_save_fregp_x d8, 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func5:
|
||
|
.seh_proc func5
|
||
|
str x19, [sp, #-80]!
|
||
|
.seh_save_reg_x x19, 80
|
||
|
stp x0, x1, [sp, #8]
|
||
|
.seh_nop
|
||
|
stp x2, x3, [sp, #24]
|
||
|
.seh_nop
|
||
|
stp x4, x5, [sp, #40]
|
||
|
.seh_nop
|
||
|
stp x6, x7, [sp, #56]
|
||
|
.seh_nop
|
||
|
sub sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
nop
|
||
|
.seh_nop
|
||
|
nop
|
||
|
.seh_nop
|
||
|
nop
|
||
|
.seh_nop
|
||
|
nop
|
||
|
.seh_nop
|
||
|
ldr x19, [sp], #80
|
||
|
.seh_save_reg_x x19, 80
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func6:
|
||
|
.seh_proc func6
|
||
|
str lr, [sp, #-16]!
|
||
|
.seh_save_reg_x lr, 16
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
ldr lr, [sp], #16
|
||
|
.seh_save_reg_x lr, 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func7:
|
||
|
.seh_proc func7
|
||
|
stp x19, x20, [sp, #-32]!
|
||
|
.seh_save_r19r20_x 32
|
||
|
str lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldr lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
ldp x19, x20, [sp], #32
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func8:
|
||
|
.seh_proc func8
|
||
|
stp x19, x20, [sp, #-32]!
|
||
|
.seh_save_r19r20_x 32
|
||
|
stp x21, lr, [sp, #16]
|
||
|
.seh_save_lrpair x21, 16
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
ldp x21, lr, [sp, #16]
|
||
|
.seh_save_lrpair x21, 16
|
||
|
ldp x19, x20, [sp], #32
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func9:
|
||
|
.seh_proc func9
|
||
|
stp x19, x20, [sp, #-16]!
|
||
|
.seh_save_r19r20_x 16
|
||
|
stp x29, lr, [sp, #-32]!
|
||
|
.seh_save_fplr_x 32
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 32
|
||
|
ldp x19, x20, [sp], #16
|
||
|
.seh_save_r19r20_x 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func10:
|
||
|
.seh_proc func10
|
||
|
stp x29, lr, [sp, #-32]!
|
||
|
.seh_save_fplr_x 32
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func11:
|
||
|
.seh_proc func11
|
||
|
stp x19, x20, [sp, #-16]!
|
||
|
.seh_save_r19r20_x 16
|
||
|
sub sp, sp, #528
|
||
|
.seh_stackalloc 528
|
||
|
stp x29, lr, [sp, #0]
|
||
|
.seh_save_fplr 0
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp, #0]
|
||
|
.seh_save_fplr 0
|
||
|
add sp, sp, #528
|
||
|
.seh_stackalloc 528
|
||
|
ldp x19, x20, [sp], #16
|
||
|
.seh_save_r19r20_x 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func12:
|
||
|
.seh_proc func12
|
||
|
stp x19, x20, [sp, #-16]!
|
||
|
.seh_save_r19r20_x 16
|
||
|
sub sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
stp x29, lr, [sp, #0]
|
||
|
.seh_save_fplr 0
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp, #0]
|
||
|
.seh_save_fplr 0
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
add sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
ldp x19, x20, [sp], #16
|
||
|
.seh_save_r19r20_x 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func13:
|
||
|
.seh_proc func13
|
||
|
stp x19, x20, [sp, #-16]!
|
||
|
.seh_save_r19r20_x 16
|
||
|
sub sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
add sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
ldp x19, x20, [sp], #16
|
||
|
.seh_save_r19r20_x 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func14:
|
||
|
.seh_proc func14
|
||
|
str lr, [sp, #-32]!
|
||
|
.seh_save_reg_x lr, 32
|
||
|
stp d8, d9, [sp, #8]
|
||
|
.seh_save_fregp d8, 8
|
||
|
str d10, [sp, #24]
|
||
|
.seh_save_freg d10, 24
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldr d10, [sp, #24]
|
||
|
.seh_save_freg d10, 24
|
||
|
ldp d8, d9, [sp, #8]
|
||
|
.seh_save_fregp d8, 8
|
||
|
ldr lr, [sp], #32
|
||
|
.seh_save_reg_x lr, 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
func15:
|
||
|
.seh_proc func15
|
||
|
stp x29, lr, [sp, #-32]!
|
||
|
.seh_save_fplr_x 32
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
// Epilogue missing the .seh_set_fp, but still generating packed info.
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked1:
|
||
|
.seh_proc nonpacked1
|
||
|
// Can't be packed; can't save integer registers after float registers.
|
||
|
stp d8, d9, [sp, #-32]!
|
||
|
.seh_save_fregp_x d8, 32
|
||
|
stp x19, x20, [sp, #16]!
|
||
|
.seh_save_regp x19, 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x19, x20, [sp, #16]
|
||
|
.seh_save_regp x19, 16
|
||
|
ldp d8, d9, [sp], #32
|
||
|
.seh_save_fregp_x d8, 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked2:
|
||
|
.seh_proc nonpacked2
|
||
|
// Can't be packed; x21/x22 aren't saved in the expected spot
|
||
|
stp x19, x20, [sp, #-48]!
|
||
|
.seh_save_r19r20_x 48
|
||
|
stp x21, x22, [sp, #32]
|
||
|
.seh_save_regp x21, 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x21, x22, [sp, #32]
|
||
|
.seh_save_regp x21, 32
|
||
|
ldp x19, x20, [sp], #48
|
||
|
.seh_save_r19r20_x 48
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked3:
|
||
|
.seh_proc nonpacked3
|
||
|
// Can't be packed; x29/x30 can't be treated as the other saved registers
|
||
|
stp x19, x20, [sp, #-96]!
|
||
|
.seh_save_r19r20_x 96
|
||
|
stp x21, x22, [sp, #16]
|
||
|
.seh_save_next
|
||
|
stp x23, x24, [sp, #32]
|
||
|
.seh_save_next
|
||
|
stp x25, x26, [sp, #48]
|
||
|
.seh_save_next
|
||
|
stp x27, x28, [sp, #64]
|
||
|
.seh_save_next
|
||
|
stp x29, x30, [sp, #80]
|
||
|
.seh_save_next
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x29, x30, [sp, #80]
|
||
|
.seh_save_next
|
||
|
ldp x27, x28, [sp, #64]
|
||
|
.seh_save_next
|
||
|
ldp x25, x26, [sp, #48]
|
||
|
.seh_save_next
|
||
|
ldp x23, x24, [sp, #32]
|
||
|
.seh_save_next
|
||
|
ldp x21, x22, [sp, #16]
|
||
|
.seh_save_next
|
||
|
ldp x19, x20, [sp], #96
|
||
|
.seh_save_r19r20_x 96
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked4:
|
||
|
.seh_proc nonpacked4
|
||
|
// Can't be packed; more predecrement for x19/x20 than used for
|
||
|
// corresponding RegI/RegF/LR saves
|
||
|
stp x19, x20, [sp, #-32]!
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x19, x20, [sp], #32
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked5:
|
||
|
.seh_proc nonpacked5
|
||
|
// Can't be packed; can't save LR twice
|
||
|
stp x19, x20, [sp, #-32]!
|
||
|
.seh_save_r19r20_x 32
|
||
|
str lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
str lr, [sp, #24]
|
||
|
.seh_save_reg lr, 24
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldr lr, [sp, #24]
|
||
|
.seh_save_reg lr, 24
|
||
|
ldr lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
ldp x19, x20, [sp], #32
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked6:
|
||
|
.seh_proc nonpacked6
|
||
|
// Can't be packed; can't save LR both standalone (CR 1) and as FPLR (CR 3)
|
||
|
stp x19, x20, [sp, #-32]!
|
||
|
.seh_save_r19r20_x 32
|
||
|
str lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
stp x29, lr, [sp, #-16]!
|
||
|
.seh_save_fplr_x 16
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 16
|
||
|
ldr lr, [sp, #16]
|
||
|
.seh_save_reg lr, 16
|
||
|
ldp x19, x20, [sp], #32
|
||
|
.seh_save_r19r20_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked7:
|
||
|
.seh_proc nonpacked7
|
||
|
// Can't be packed; too many saved FP regs
|
||
|
stp d8, d9, [sp, #-80]!
|
||
|
.seh_save_fregp_x d8, 80
|
||
|
stp d10, d11, [sp, #16]
|
||
|
.seh_save_fregp d10, 16
|
||
|
stp d12, d13, [sp, #32]
|
||
|
.seh_save_fregp d12, 32
|
||
|
stp d14, d15, [sp, #48]
|
||
|
.seh_save_fregp d14, 48
|
||
|
stp d16, d17, [sp, #64]
|
||
|
.seh_save_next
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp d16, d17, [sp, #64]
|
||
|
.seh_save_next
|
||
|
ldp d14, d15, [sp, #48]
|
||
|
.seh_save_fregp d14, 48
|
||
|
ldp d12, d13, [sp, #32]
|
||
|
.seh_save_fregp d12, 32
|
||
|
ldp d10, d11, [sp, #16]
|
||
|
.seh_save_fregp d10, 16
|
||
|
ldp d8, d9, [sp], #80
|
||
|
.seh_save_fregp_x d8, 80
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked8:
|
||
|
.seh_proc nonpacked8
|
||
|
// Can't be packed; Can't handle only a single FP reg
|
||
|
str d8, [sp, #-16]!
|
||
|
.seh_save_freg_x d8, 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldr d8, [sp], #16
|
||
|
.seh_save_freg_x d8, 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked9:
|
||
|
.seh_proc nonpacked9
|
||
|
// Can't be packed; can't have a separate stack adjustment with save_fplr_x
|
||
|
sub sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
stp x29, lr, [sp, #-16]!
|
||
|
.seh_save_fplr_x 16
|
||
|
mov x29, sp
|
||
|
.seh_set_fp
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
mov sp, x29
|
||
|
.seh_set_fp
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 16
|
||
|
add sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked10:
|
||
|
.seh_proc nonpacked10
|
||
|
// Can't be packed; wrong predecrement
|
||
|
stp x19, x20, [sp, #-16]!
|
||
|
.seh_save_r19r20_x 16
|
||
|
stp x21, x22, [sp, #16]
|
||
|
.seh_save_next
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x21, x22, [sp, #16]
|
||
|
.seh_save_next
|
||
|
ldp x19, x20, [sp], #16
|
||
|
.seh_save_r19r20_x 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked11:
|
||
|
.seh_proc nonpacked11
|
||
|
// Can't be packed; too big stack allocation
|
||
|
sub sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
sub sp, sp, #8192
|
||
|
.seh_stackalloc 8192
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #8192
|
||
|
.seh_stackalloc 8192
|
||
|
add sp, sp, #4080
|
||
|
.seh_stackalloc 4080
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked12:
|
||
|
.seh_proc nonpacked12
|
||
|
// Can't be packed; missing .seh_set_fp
|
||
|
stp x29, lr, [sp, #-32]!
|
||
|
.seh_save_fplr_x 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldp x29, lr, [sp], #32
|
||
|
.seh_save_fplr_x 32
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endproc
|
||
|
|
||
|
nonpacked13:
|
||
|
.seh_proc nonpacked13
|
||
|
// Can't be packed; not doing a packed info if .seh_handlerdata is used
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endepilogue
|
||
|
ret
|
||
|
.seh_endfunclet
|
||
|
.seh_handlerdata
|
||
|
.long 0
|
||
|
.text
|
||
|
.seh_endproc
|