1096 lines
28 KiB
ArmAsm
1096 lines
28 KiB
ArmAsm
|
// This test checks various cases around generating packed unwind info.
|
||
|
|
||
|
// RUN: llvm-mc -triple thumbv7-pc-win32 -filetype=obj %s | llvm-readobj -u - | FileCheck %s
|
||
|
|
||
|
// CHECK: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func6
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 8
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func7
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 8
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r4}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r4}
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func8
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 10
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r4, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r4, lr}
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func9
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: ReturnType: b.w <target>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 32
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #32
|
||
|
// CHECK-NEXT: vpush {d8}
|
||
|
// CHECK-NEXT: push {lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #32
|
||
|
// CHECK-NEXT: vpop {d8}
|
||
|
// CHECK-NEXT: pop {lr}
|
||
|
// CHECK-NEXT: b.w <target>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func10
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 26
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 1
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: vpush {d8-d9}
|
||
|
// CHECK-NEXT: mov r11, sp
|
||
|
// CHECK-NEXT: push {r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: vpop {d8-d9}
|
||
|
// CHECK-NEXT: pop {r11, lr}
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func11
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 24
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 1
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: vpush {d8-d9}
|
||
|
// CHECK-NEXT: mov r11, sp
|
||
|
// CHECK-NEXT: push {r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: vpop {d8-d9}
|
||
|
// CHECK-NEXT: pop {r11, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func12
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 18
|
||
|
// CHECK-NEXT: ReturnType: b.w <target>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 6
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: vpush {d8-d14}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: vpop {d8-d14}
|
||
|
// CHECK-NEXT: b.w <target>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func13
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 18
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 6
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 20
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #20
|
||
|
// CHECK-NEXT: add.w r11, sp, #28
|
||
|
// CHECK-NEXT: push {r4-r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #20
|
||
|
// CHECK-NEXT: pop {r4-r11, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func14
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 14
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 20
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #20
|
||
|
// CHECK-NEXT: push {r4-r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #20
|
||
|
// CHECK-NEXT: pop {r4-r11, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func15
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 20
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 512
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #512
|
||
|
// CHECK-NEXT: push {r4, lr}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #512
|
||
|
// CHECK-NEXT: pop {r4}
|
||
|
// CHECK-NEXT: ldr pc, [sp], #20
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func16
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 20
|
||
|
// CHECK-NEXT: ReturnType: b.w <target>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: mov r11, sp
|
||
|
// CHECK-NEXT: push {r11, lr}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r11, lr}
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: b.w <target>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func17
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 20
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 512
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #512
|
||
|
// CHECK-NEXT: push {r4}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #512
|
||
|
// CHECK-NEXT: pop {r4}
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func18
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 6
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 4
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r3, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r3, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func19
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 12
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r0-r4}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r0-r4}
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func20
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 14
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r0-r4}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: pop {r4}
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func21
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 14
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 16
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #16
|
||
|
// CHECK-NEXT: push {r4}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r0-r4}
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func22
|
||
|
// CHECK-NEXT: Fragment: Yes
|
||
|
// CHECK-NEXT: FunctionLength: 14
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 0
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 512
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #512
|
||
|
// CHECK-NEXT: push {r4, lr}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #512
|
||
|
// CHECK-NEXT: pop {r4}
|
||
|
// CHECK-NEXT: ldr pc, [sp], #20
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func24
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 16
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 3
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 8
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: add.w r11, sp, #24
|
||
|
// CHECK-NEXT: push {r2-r7, r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #8
|
||
|
// CHECK-NEXT: pop {r4-r7, r11, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func25
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 16
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 3
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: Yes
|
||
|
// CHECK-NEXT: StackAdjustment: 8
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #8
|
||
|
// CHECK-NEXT: add.w r11, sp, #16
|
||
|
// CHECK-NEXT: push {r4-r7, r11, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r2-r7, r11, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func26
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 8
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 12
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r1-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #12
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func27
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 8
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 12
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: sub sp, sp, #12
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r1-r3}
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func28
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 8
|
||
|
// CHECK-NEXT: ReturnType: bx <reg>
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: No
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: add sp, sp, #16
|
||
|
// CHECK-NEXT: bx <reg>
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func29
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 10
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: Yes
|
||
|
// CHECK-NEXT: Reg: 7
|
||
|
// CHECK-NEXT: R: 1
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {lr}
|
||
|
// CHECK-NEXT: push {r0-r3}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: ldr pc, [sp], #20
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func30
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 6
|
||
|
// CHECK-NEXT: ReturnType: pop {pc}
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 2
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r4-r6, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: Epilogue [
|
||
|
// CHECK-NEXT: pop {r4-r6, pc}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
// CHECK-NEXT: RuntimeFunction {
|
||
|
// CHECK-NEXT: Function: func31
|
||
|
// CHECK-NEXT: Fragment: No
|
||
|
// CHECK-NEXT: FunctionLength: 4
|
||
|
// CHECK-NEXT: ReturnType: (no epilogue)
|
||
|
// CHECK-NEXT: HomedParameters: No
|
||
|
// CHECK-NEXT: Reg: 2
|
||
|
// CHECK-NEXT: R: 0
|
||
|
// CHECK-NEXT: LinkRegister: Yes
|
||
|
// CHECK-NEXT: Chaining: No
|
||
|
// CHECK-NEXT: StackAdjustment: 0
|
||
|
// CHECK-NEXT: Prologue [
|
||
|
// CHECK-NEXT: push {r4-r6, lr}
|
||
|
// CHECK-NEXT: ]
|
||
|
// CHECK-NEXT: }
|
||
|
|
||
|
// CHECK: Function: notpacked1
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked2
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked3
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked4
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked5
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked6
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked7
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked8
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
// CHECK: Function: notpacked9
|
||
|
// CHECK-NEXT: ExceptionRecord:
|
||
|
|
||
|
.text
|
||
|
.syntax unified
|
||
|
|
||
|
.seh_proc func6
|
||
|
func6:
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func7
|
||
|
func7:
|
||
|
push {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func8
|
||
|
func8:
|
||
|
push {r4,lr}
|
||
|
.seh_save_regs {r4,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop.w {r4,lr}
|
||
|
.seh_save_regs_w {r4,lr}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func9
|
||
|
func9:
|
||
|
push {lr}
|
||
|
.seh_save_regs {lr}
|
||
|
vpush {d8}
|
||
|
.seh_save_fregs {d8}
|
||
|
sub sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #32
|
||
|
.seh_stackalloc 32
|
||
|
vpop {d8}
|
||
|
.seh_save_fregs {d8}
|
||
|
pop.w {lr}
|
||
|
.seh_save_regs_w {lr}
|
||
|
b.w tailcall
|
||
|
.seh_nop_w
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func10
|
||
|
func10:
|
||
|
push.w {r11,lr}
|
||
|
.seh_save_regs_w {r11,lr}
|
||
|
mov r11, sp
|
||
|
.seh_nop
|
||
|
vpush {d8-d9}
|
||
|
.seh_save_fregs {d8-d9}
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
vpop {d8-d9}
|
||
|
.seh_save_fregs {d8-d9}
|
||
|
pop.w {r11,lr}
|
||
|
.seh_save_regs_w {r11,lr}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func11
|
||
|
func11:
|
||
|
push.w {r11,lr}
|
||
|
.seh_save_regs_w {r11,lr}
|
||
|
mov r11, sp
|
||
|
.seh_nop
|
||
|
vpush {d8-d9}
|
||
|
.seh_save_fregs {d8-d9}
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
vpop {d8-d9}
|
||
|
.seh_save_fregs {d8-d9}
|
||
|
pop.w {r11,pc}
|
||
|
.seh_save_regs_w {r11,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func12
|
||
|
func12:
|
||
|
vpush {d8-d14}
|
||
|
.seh_save_fregs {d8-d14}
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
vpop {d8-d14}
|
||
|
.seh_save_fregs {d8-d14}
|
||
|
b.w tailcall
|
||
|
.seh_nop_w
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func13
|
||
|
func13:
|
||
|
push.w {r4-r11,lr}
|
||
|
.seh_save_regs_w {r4-r11,lr}
|
||
|
add.w r11, sp, #0x1c
|
||
|
.seh_nop_w
|
||
|
sub sp, sp, #20
|
||
|
.seh_stackalloc 20
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #20
|
||
|
.seh_stackalloc 20
|
||
|
pop.w {r4-r11,pc}
|
||
|
.seh_save_regs_w {r4-r11,lr}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func14
|
||
|
func14:
|
||
|
push.w {r4-r11,lr}
|
||
|
.seh_save_regs_w {r4-r11,lr}
|
||
|
sub sp, sp, #20
|
||
|
.seh_stackalloc 20
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #20
|
||
|
.seh_stackalloc 20
|
||
|
pop.w {r4-r11,pc}
|
||
|
.seh_save_regs_w {r4-r11,lr}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func15
|
||
|
func15:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {r4,lr}
|
||
|
.seh_save_regs {r4,lr}
|
||
|
sub.w sp, sp, #512
|
||
|
.seh_stackalloc_w 512
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add.w sp, sp, #512
|
||
|
.seh_stackalloc_w 512
|
||
|
pop {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
ldr pc, [sp], #20
|
||
|
.seh_save_lr 20
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func16
|
||
|
func16:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push.w {r11,lr}
|
||
|
.seh_save_regs_w {r11,lr}
|
||
|
mov r11, sp
|
||
|
.seh_nop
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop.w {r11, lr}
|
||
|
.seh_save_regs_w {r11,lr}
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
b.w tailcall
|
||
|
.seh_nop_w
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func17
|
||
|
func17:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
sub.w sp, sp, #512
|
||
|
.seh_stackalloc_w 512
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add.w sp, sp, #512
|
||
|
.seh_stackalloc_w 512
|
||
|
pop {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func18
|
||
|
func18:
|
||
|
push {r3,lr}
|
||
|
.seh_save_regs {r3,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r3,pc}
|
||
|
.seh_save_regs {r3,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func19
|
||
|
func19:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {r0-r4}
|
||
|
.seh_save_regs {r0-r4}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r0-r4}
|
||
|
.seh_save_regs {r0-r4}
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func20
|
||
|
func20:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {r0-r4}
|
||
|
.seh_save_regs {r0-r4}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
pop {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func21
|
||
|
func21:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r0-r4}
|
||
|
.seh_save_regs {r0-r4}
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func22
|
||
|
func22:
|
||
|
.seh_save_regs {r0-r3}
|
||
|
.seh_save_regs {r4,lr}
|
||
|
.seh_stackalloc_w 512
|
||
|
.seh_endprologue_fragment
|
||
|
nop
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add.w sp, sp, #512
|
||
|
.seh_stackalloc_w 512
|
||
|
pop {r4}
|
||
|
.seh_save_regs {r4}
|
||
|
ldr pc, [sp], #20
|
||
|
.seh_save_lr 20
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func24
|
||
|
func24:
|
||
|
push.w {r2-r7,r11,lr}
|
||
|
.seh_save_regs_w {r2-r7,r11,lr}
|
||
|
add.w r11, sp, #24
|
||
|
.seh_nop_w
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #8
|
||
|
.seh_stackalloc 8
|
||
|
pop.w {r4-r7,r11,pc}
|
||
|
.seh_save_regs_w {r4-r7,r11,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func25
|
||
|
func25:
|
||
|
push.w {r4-r7,r11,lr}
|
||
|
.seh_save_regs_w {r4-r7,r11,lr}
|
||
|
add.w r11, sp, #16
|
||
|
.seh_nop_w
|
||
|
sub sp, sp, #8
|
||
|
.seh_stackalloc 8
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop.w {r2-r7,r11,pc}
|
||
|
.seh_save_regs_w {r2-r7,r11,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func26
|
||
|
func26:
|
||
|
push {r1-r3}
|
||
|
.seh_save_regs {r1-r3}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #12
|
||
|
.seh_stackalloc 12
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func27
|
||
|
func27:
|
||
|
sub sp, sp, #12
|
||
|
.seh_stackalloc 12
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r1-r3}
|
||
|
.seh_save_regs {r1-r3}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func28
|
||
|
func28:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func29
|
||
|
func29:
|
||
|
push {r0-r3}
|
||
|
.seh_save_regs {r0-r3}
|
||
|
push {lr}
|
||
|
.seh_save_regs {lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
ldr pc, [sp], #20
|
||
|
.seh_save_lr 20
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func30
|
||
|
func30:
|
||
|
push {r4-r6,lr}
|
||
|
.seh_save_regs {r4-r6,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4-r6,pc}
|
||
|
.seh_save_regs {r4-r6,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc func31
|
||
|
func31:
|
||
|
push {r4-r6,lr}
|
||
|
.seh_save_regs {r4-r6,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked1
|
||
|
notpacked1:
|
||
|
push {r1-r3}
|
||
|
.seh_save_regs {r1-r3}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
// Mismatch with the folded prologue
|
||
|
add sp, sp, #8
|
||
|
.seh_stackalloc 8
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked2
|
||
|
notpacked2:
|
||
|
sub sp, sp, #8
|
||
|
.seh_stackalloc 8
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
// Folded epilogue is a mismatch to the regular stack adjust in the prologue
|
||
|
pop {r1-r3}
|
||
|
.seh_save_regs {r1-r3}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked3
|
||
|
notpacked3:
|
||
|
// Can't represent d8-d15 in the packed form
|
||
|
vpush {d8-d15}
|
||
|
.seh_save_fregs {d8-d15}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
vpop {d8-d15}
|
||
|
.seh_save_fregs {d8-d15}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked4
|
||
|
notpacked4:
|
||
|
push {r2-r7}
|
||
|
.seh_save_regs {r2-r7}
|
||
|
sub sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
// Can't have both a folded stack adjustment and a separate one
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
add sp, sp, #16
|
||
|
.seh_stackalloc 16
|
||
|
pop {r2-r7}
|
||
|
.seh_save_regs {r2-r7}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked5
|
||
|
notpacked5:
|
||
|
// Can't represent r11 in packed form when it's not contiguous
|
||
|
// with the rest and when it's not chained (missing "add.w r11, sp, #.."
|
||
|
// and .seh_nop_w).
|
||
|
push.w {r4-r7,r11,lr}
|
||
|
.seh_save_regs_w {r4-r7,r11,lr}
|
||
|
sub sp, sp, #8
|
||
|
.seh_stackalloc 8
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop.w {r2-r7,r11,pc}
|
||
|
.seh_save_regs_w {r2-r7,r11,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked6
|
||
|
notpacked6:
|
||
|
// Can't pack non-contiguous registers
|
||
|
push {r4,r7}
|
||
|
.seh_save_regs {r4,r7}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4,r7}
|
||
|
.seh_save_regs {r4,r7}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked7
|
||
|
notpacked7:
|
||
|
// Can't pack float registers ouside of d8-d14
|
||
|
vpush {d0-d3}
|
||
|
.seh_save_fregs {d0-d3}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
vpop {d0-d3}
|
||
|
.seh_save_fregs {d0-d3}
|
||
|
bx lr
|
||
|
.seh_nop
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked8
|
||
|
notpacked8:
|
||
|
push {r4-r7,lr}
|
||
|
.seh_save_regs {r4-r7,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4-r7,pc}
|
||
|
.seh_save_regs {r4-r7,pc}
|
||
|
.seh_endepilogue
|
||
|
// Epilogue isn't at the end of the function; can't be packed.
|
||
|
nop
|
||
|
.seh_endproc
|
||
|
|
||
|
.seh_proc notpacked9
|
||
|
notpacked9:
|
||
|
push {r4-r7,lr}
|
||
|
.seh_save_regs {r4-r7,lr}
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4-r7,pc}
|
||
|
.seh_save_regs {r4-r7,pc}
|
||
|
.seh_endepilogue
|
||
|
// Multiple epilogues, can't be packed
|
||
|
nop
|
||
|
.seh_startepilogue
|
||
|
pop {r4-r7,pc}
|
||
|
.seh_save_regs {r4-r7,pc}
|
||
|
.seh_endepilogue
|
||
|
.seh_endproc
|