Compiler projects using llvm
// REQUIRES: arm-registered-target
// RUN: llvm-mc -filetype=obj -triple thumbv7-windows-gnu %s -o %t.o
// RUN: llvm-readobj --unwind %t.o | FileCheck --strict-whitespace %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: func23
// CHECK-NEXT:    Fragment: No
// CHECK-NEXT:    FunctionLength: 12
// CHECK-NEXT:    ReturnType: (no epilogue)
// 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:  }
// 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: No
// CHECK-NEXT:    Reg: 0
// CHECK-NEXT:    R: 1
// CHECK-NEXT:    LinkRegister: No
// CHECK-NEXT:    Chaining: No
// CHECK-NEXT:    StackAdjustment: 4
// CHECK-NEXT:    Prologue [
// CHECK-NEXT:      vpush {d8}
// CHECK-NEXT:      push {r3}
// CHECK-NEXT:    ]
// CHECK-NEXT:    Epilogue [
// CHECK-NEXT:      vpop {d8}
// CHECK-NEXT:      pop {r3}
// CHECK-NEXT:      bx <reg>
// CHECK-NEXT:    ]
// CHECK-NEXT:  }
// CHECK-NEXT:  RuntimeFunction {
// CHECK-NEXT:    Function: func29
// CHECK-NEXT:    Fragment: Yes
// 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: 16
// CHECK-NEXT:    Prologue [
// CHECK-NEXT:      sub sp, sp, #16
// CHECK-NEXT:      push {r4-r6, lr}
// CHECK-NEXT:    ]
// CHECK-NEXT:    Epilogue [
// CHECK-NEXT:      add sp, sp, #16
// CHECK-NEXT:      pop {r4-r6, pc}
// CHECK-NEXT:    ]
// CHECK-NEXT:  }

        .thumb
        .syntax unified

func6:
        nop
        nop
        nop
        bx lr

func7:
        push {r4}
        nop
        pop {r4}
        bx lr

func8:
        push {r4,lr}
        nop
        pop {r4,lr}
        bx lr

func9:
        push {lr}
        vpush {d8}
        sub sp, sp, #32
        nop
        add sp, sp, #32
        vpop {d8}
        pop {lr}
        b tailcall

func10:
        push {r11,lr}
        mov r11, sp
        vpush {d8-d9}
        sub sp, sp, #16
        nop
        add sp, sp, #16
        vpop {d8-d9}
        pop {r11,lr}
        bx lr

func11:
        push {r11,lr}
        mov r11, sp
        vpush {d8-d9}
        sub sp, sp, #16
        nop
        add sp, sp, #16
        vpop {d8-d9}
        pop {r11,pc}

func12:
        vpush {d8-d14}
        sub sp, sp, #16
        nop
        add sp, sp, #16
        vpop {d8-d14}
        b tailcall

func13:
        push {r4-r11,lr}
        add r11, sp, #0x1c
        sub sp, sp, #20
        nop
        add sp, sp, #20
        pop {r4-r11,pc}

func14:
        push {r4-r11,lr}
        sub sp, sp, #20
        nop
        add sp, sp, #20
        pop {r4-r11,pc}

func15:
        push {r0-r3}
        push {r4,lr}
        sub sp, sp, #512
        nop
        add sp, sp, #512
        pop {r4}
        ldr pc, [sp], #20

func16:
        push {r0-r3}
        push {r11,lr}
        mov r11, sp
        nop
        pop {r11, lr}
        add sp, sp, #16
        b tailcall

func17:
        push {r0-r3}
        push {r4}
        sub sp, sp, #512
        nop
        add sp, sp, #512
        pop {r4}
        add sp, sp, #16
        bx lr

func18:
        push {r3,lr}
        nop
        pop {r3,pc}

func19:
        push {r0-r3}
        push {r0-r4}
        nop
        pop {r0-r4}
        add sp, sp, #16
        bx lr

func20:
        push {r0-r3}
        push {r0-r4}
        nop
        add sp, sp, #16
        pop {r4}
        add sp, sp, #16
        bx lr

func21:
        push {r0-r3}
        push {r4}
        sub sp, sp, #16
        nop
        pop {r0-r4}
        add sp, sp, #16
        bx lr

func22:
        nop
        nop
        add sp, sp, #512
        pop {r4}
        ldr pc, [sp], #20

func23:
        push {r0-r3}
        push {r4,lr}
        sub sp, sp, #512
        nop
        nop

func24:
        push {r2-r7,r11,lr}
        add r11, sp, #24
        nop
        add sp, sp, #8
        pop {r4-r7,r11,pc}

func25:
        push {r4-r7,r11,lr}
        add r11, sp, #16
        sub sp, sp, #8
        nop
        pop {r2-r7,r11,pc}

func26:
        push {r1-r3}
        nop
        add sp, sp, #12
        bx lr

func27:
        sub sp, sp, #12
        nop
        pop {r1-r3}
        bx lr

func28:
        push {r3}
        vpush {d8}
        nop
        vpop {d8}
        pop {r3}
        bx lr

func29:
        nop
        pop {r4-r11,pc}

        .section .pdata,"dr"
        .rva func6
        .long 0x000f2011
        .rva func7
        .long 0x00002011
        .rva func8
        .long 0x00102015
        .rva func9
        .long 0x02184031
        .rva func10
        .long 0x01392035
        .rva func11
        .long 0x01390031
        .rva func12
        .long 0x010e4025
        .rva func13
        .long 0x01760025
        .rva func14
        .long 0x0157001d
        .rva func15
        .long 0x20108029
        .rva func16
        .long 0x003fc029
        .rva func17
        .long 0x2000a029
        .rva func18
        .long 0xff1f000d
        .rva func19
        .long 0xffc0a019
        .rva func20
        .long 0xfdc0a01d
        .rva func21
        .long 0xfec0a01d
        .rva func22
        .long 0x2010801e
        .rva func23
        .long 0x2010e019
        .rva func24
        .long 0xfd730021
        .rva func25
        .long 0xfe730021
        .rva func26
        .long 0xfd8f2011
        .rva func27
        .long 0xfe8f2011
        .rva func28
        .long 0xff082011
        .rva func29
        .long 0x0112000e