180 lines
4.7 KiB
ArmAsm
180 lines
4.7 KiB
ArmAsm
|
# RUN: llvm-mc -filetype=asm < %s -triple i686-windows-msvc | FileCheck %s --check-prefix=ASM
|
||
|
# RUN: llvm-mc -filetype=obj < %s -triple i686-windows-msvc | llvm-readobj --codeview - | FileCheck %s --check-prefix=OBJ
|
||
|
|
||
|
.globl _foo
|
||
|
_foo:
|
||
|
.cv_fpo_proc _foo 4
|
||
|
pushl %ebp
|
||
|
.cv_fpo_pushreg ebp # Test without %
|
||
|
pushl %ebx
|
||
|
.cv_fpo_pushreg %ebx
|
||
|
pushl %edi
|
||
|
.cv_fpo_pushreg %edi
|
||
|
pushl %esi
|
||
|
.cv_fpo_pushreg esi
|
||
|
subl $20, %esp
|
||
|
.cv_fpo_stackalloc 20
|
||
|
.cv_fpo_endprologue
|
||
|
|
||
|
# ASM: .cv_fpo_proc _foo 4
|
||
|
# ASM: pushl %ebp
|
||
|
# ASM: .cv_fpo_pushreg %ebp
|
||
|
# ASM: pushl %ebx
|
||
|
# ASM: .cv_fpo_pushreg %ebx
|
||
|
# ASM: pushl %edi
|
||
|
# ASM: .cv_fpo_pushreg %edi
|
||
|
# ASM: pushl %esi
|
||
|
# ASM: .cv_fpo_pushreg %esi
|
||
|
# ASM: subl $20, %esp
|
||
|
# ASM: .cv_fpo_stackalloc 20
|
||
|
# ASM: .cv_fpo_endprologue
|
||
|
|
||
|
# Clobbers
|
||
|
xorl %ebp, %ebp
|
||
|
xorl %ebx, %ebx
|
||
|
xorl %edi, %edi
|
||
|
xorl %esi, %esi
|
||
|
# Use that stack memory
|
||
|
leal 4(%esp), %eax
|
||
|
movl %eax, (%esp)
|
||
|
calll _bar
|
||
|
|
||
|
# ASM: calll _bar
|
||
|
|
||
|
# Epilogue
|
||
|
# FIXME: Get FPO data for this once we get it for DWARF.
|
||
|
addl $20, %esp
|
||
|
popl %esi
|
||
|
popl %edi
|
||
|
popl %ebx
|
||
|
popl %ebp
|
||
|
retl
|
||
|
.cv_fpo_endproc
|
||
|
|
||
|
# ASM: .cv_fpo_endproc
|
||
|
|
||
|
.section .debug$S,"dr"
|
||
|
.p2align 2
|
||
|
.long 4 # Debug section magic
|
||
|
.cv_fpo_data _foo
|
||
|
.cv_stringtable
|
||
|
|
||
|
# ASM: .cv_fpo_data
|
||
|
|
||
|
# OBJ: Subsection [
|
||
|
# OBJ-NEXT: SubSectionType: FrameData (0xF5)
|
||
|
# OBJ-NEXT: SubSectionSize: 0xC4
|
||
|
# OBJ-NEXT: LinkageName: _foo
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x0
|
||
|
# OBJ-NEXT: CodeSize: 0x23
|
||
|
# OBJ-NEXT: LocalSize: 0x0
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x7
|
||
|
# OBJ-NEXT: SavedRegsSize: 0x0
|
||
|
# OBJ-NEXT: Flags [ (0x4)
|
||
|
# OBJ-NEXT: IsFunctionStart (0x4)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x1
|
||
|
# OBJ-NEXT: CodeSize: 0x22
|
||
|
# OBJ-NEXT: LocalSize: 0x0
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x6
|
||
|
# OBJ-NEXT: SavedRegsSize: 0x4
|
||
|
# OBJ-NEXT: Flags [ (0x0)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: $ebp $T0 4 - ^ =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x2
|
||
|
# OBJ-NEXT: CodeSize: 0x21
|
||
|
# OBJ-NEXT: LocalSize: 0x0
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x5
|
||
|
# OBJ-NEXT: SavedRegsSize: 0x8
|
||
|
# OBJ-NEXT: Flags [ (0x0)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: $ebp $T0 4 - ^ =
|
||
|
# OBJ-NEXT: $ebx $T0 8 - ^ =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x3
|
||
|
# OBJ-NEXT: CodeSize: 0x20
|
||
|
# OBJ-NEXT: LocalSize: 0x0
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x4
|
||
|
# OBJ-NEXT: SavedRegsSize: 0xC
|
||
|
# OBJ-NEXT: Flags [ (0x0)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: $ebp $T0 4 - ^ =
|
||
|
# OBJ-NEXT: $ebx $T0 8 - ^ =
|
||
|
# OBJ-NEXT: $edi $T0 12 - ^ =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x4
|
||
|
# OBJ-NEXT: CodeSize: 0x1F
|
||
|
# OBJ-NEXT: LocalSize: 0x0
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x3
|
||
|
# OBJ-NEXT: SavedRegsSize: 0x10
|
||
|
# OBJ-NEXT: Flags [ (0x0)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: $ebp $T0 4 - ^ =
|
||
|
# OBJ-NEXT: $ebx $T0 8 - ^ =
|
||
|
# OBJ-NEXT: $edi $T0 12 - ^ =
|
||
|
# OBJ-NEXT: $esi $T0 16 - ^ =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NEXT: FrameData {
|
||
|
# OBJ-NEXT: RvaStart: 0x7
|
||
|
# OBJ-NEXT: CodeSize: 0x1C
|
||
|
# OBJ-NEXT: LocalSize: 0x14
|
||
|
# OBJ-NEXT: ParamsSize: 0x4
|
||
|
# OBJ-NEXT: MaxStackSize: 0x0
|
||
|
# OBJ-NEXT: PrologSize: 0x0
|
||
|
# OBJ-NEXT: SavedRegsSize: 0x10
|
||
|
# OBJ-NEXT: Flags [ (0x0)
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: FrameFunc [
|
||
|
# OBJ-NEXT: $T0 .raSearch =
|
||
|
# OBJ-NEXT: $eip $T0 ^ =
|
||
|
# OBJ-NEXT: $esp $T0 4 + =
|
||
|
# OBJ-NEXT: $ebp $T0 4 - ^ =
|
||
|
# OBJ-NEXT: $ebx $T0 8 - ^ =
|
||
|
# OBJ-NEXT: $edi $T0 12 - ^ =
|
||
|
# OBJ-NEXT: $esi $T0 16 - ^ =
|
||
|
# OBJ-NEXT: ]
|
||
|
# OBJ-NEXT: }
|
||
|
# OBJ-NOT: FrameData
|