// 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 // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func7 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 8 // CHECK-NEXT: ReturnType: bx // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func8 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 10 // CHECK-NEXT: ReturnType: bx // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func9 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 24 // CHECK-NEXT: ReturnType: b.w // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func10 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 26 // CHECK-NEXT: ReturnType: bx // 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 // 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 // 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 // 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 // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func17 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 20 // CHECK-NEXT: ReturnType: bx // 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 // 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 // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func20 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 14 // CHECK-NEXT: ReturnType: bx // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func21 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 14 // CHECK-NEXT: ReturnType: bx // 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 // 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 // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func27 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 8 // CHECK-NEXT: ReturnType: bx // 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 // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: RuntimeFunction { // CHECK-NEXT: Function: func28 // CHECK-NEXT: Fragment: No // CHECK-NEXT: FunctionLength: 8 // CHECK-NEXT: ReturnType: bx // 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 // 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