• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: llvm-mc -filetype=asm < %s -triple i686-windows-msvc | FileCheck %s --check-prefix=ASM
2# RUN: llvm-mc -filetype=obj < %s -triple i686-windows-msvc | llvm-readobj -codeview | FileCheck %s --check-prefix=OBJ
3
4.globl _foo
5_foo:
6	.cv_fpo_proc _foo 4
7	pushl	%ebp
8	.cv_fpo_pushreg ebp # Test without %
9	pushl	%ebx
10	.cv_fpo_pushreg %ebx
11	pushl	%edi
12	.cv_fpo_pushreg %edi
13	pushl	%esi
14	.cv_fpo_pushreg esi
15	subl $20, %esp
16	.cv_fpo_stackalloc 20
17	.cv_fpo_endprologue
18
19	# ASM: .cv_fpo_proc _foo 4
20	# ASM: pushl	%ebp
21	# ASM: .cv_fpo_pushreg %ebp
22	# ASM: pushl	%ebx
23	# ASM: .cv_fpo_pushreg %ebx
24	# ASM: pushl	%edi
25	# ASM: .cv_fpo_pushreg %edi
26	# ASM: pushl	%esi
27	# ASM: .cv_fpo_pushreg %esi
28	# ASM: subl $20, %esp
29	# ASM: .cv_fpo_stackalloc 20
30	# ASM: .cv_fpo_endprologue
31
32	# Clobbers
33	xorl %ebp, %ebp
34	xorl %ebx, %ebx
35	xorl %edi, %edi
36	xorl %esi, %esi
37	# Use that stack memory
38	leal 4(%esp), %eax
39	movl %eax, (%esp)
40	calll _bar
41
42	# ASM: calll _bar
43
44	# Epilogue
45	# FIXME: Get FPO data for this once we get it for DWARF.
46	addl $20, %esp
47	popl %esi
48	popl %edi
49	popl %ebx
50	popl %ebp
51	retl
52	.cv_fpo_endproc
53
54	# ASM: .cv_fpo_endproc
55
56	.section	.debug$S,"dr"
57	.p2align	2
58	.long	4                       # Debug section magic
59	.cv_fpo_data _foo
60	.cv_stringtable
61
62	# ASM: .cv_fpo_data
63
64# OBJ:       Subsection [
65# OBJ-NEXT:    SubSectionType: FrameData (0xF5)
66# OBJ-NEXT:    SubSectionSize: 0xC4
67# OBJ-NEXT:    LinkageName: _foo
68# OBJ-NEXT:    FrameData {
69# OBJ-NEXT:      RvaStart: 0x0
70# OBJ-NEXT:      CodeSize: 0x23
71# OBJ-NEXT:      LocalSize: 0x0
72# OBJ-NEXT:      ParamsSize: 0x4
73# OBJ-NEXT:      MaxStackSize: 0x0
74# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
75# OBJ-NEXT:      PrologSize: 0x7
76# OBJ-NEXT:      SavedRegsSize: 0x0
77# OBJ-NEXT:      Flags [ (0x4)
78# OBJ-NEXT:        IsFunctionStart (0x4)
79# OBJ-NEXT:      ]
80# OBJ-NEXT:    }
81# OBJ-NEXT:    FrameData {
82# OBJ-NEXT:      RvaStart: 0x1
83# OBJ-NEXT:      CodeSize: 0x22
84# OBJ-NEXT:      LocalSize: 0x0
85# OBJ-NEXT:      ParamsSize: 0x4
86# OBJ-NEXT:      MaxStackSize: 0x0
87# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
88# OBJ-NEXT:      PrologSize: 0x6
89# OBJ-NEXT:      SavedRegsSize: 0x4
90# OBJ-NEXT:      Flags [ (0x0)
91# OBJ-NEXT:      ]
92# OBJ-NEXT:    }
93# OBJ-NEXT:    FrameData {
94# OBJ-NEXT:      RvaStart: 0x2
95# OBJ-NEXT:      CodeSize: 0x21
96# OBJ-NEXT:      LocalSize: 0x0
97# OBJ-NEXT:      ParamsSize: 0x4
98# OBJ-NEXT:      MaxStackSize: 0x0
99# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
100# OBJ-NEXT:      PrologSize: 0x5
101# OBJ-NEXT:      SavedRegsSize: 0x8
102# OBJ-NEXT:      Flags [ (0x0)
103# OBJ-NEXT:      ]
104# OBJ-NEXT:    }
105# OBJ-NEXT:    FrameData {
106# OBJ-NEXT:      RvaStart: 0x3
107# OBJ-NEXT:      CodeSize: 0x20
108# OBJ-NEXT:      LocalSize: 0x0
109# OBJ-NEXT:      ParamsSize: 0x4
110# OBJ-NEXT:      MaxStackSize: 0x0
111# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ =
112# OBJ-NEXT:      PrologSize: 0x4
113# OBJ-NEXT:      SavedRegsSize: 0xC
114# OBJ-NEXT:      Flags [ (0x0)
115# OBJ-NEXT:      ]
116# OBJ-NEXT:    }
117# OBJ-NEXT:    FrameData {
118# OBJ-NEXT:      RvaStart: 0x4
119# OBJ-NEXT:      CodeSize: 0x1F
120# OBJ-NEXT:      LocalSize: 0x0
121# OBJ-NEXT:      ParamsSize: 0x4
122# OBJ-NEXT:      MaxStackSize: 0x0
123# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ =
124# OBJ-NEXT:      PrologSize: 0x3
125# OBJ-NEXT:      SavedRegsSize: 0x10
126# OBJ-NEXT:      Flags [ (0x0)
127# OBJ-NEXT:      ]
128# OBJ-NEXT:    }
129# OBJ-NEXT:    FrameData {
130# OBJ-NEXT:      RvaStart: 0x7
131# OBJ-NEXT:      CodeSize: 0x1C
132# OBJ-NEXT:      LocalSize: 0x14
133# OBJ-NEXT:      ParamsSize: 0x4
134# OBJ-NEXT:      MaxStackSize: 0x0
135# OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ =
136# OBJ-NEXT:      PrologSize: 0x0
137# OBJ-NEXT:      SavedRegsSize: 0x10
138# OBJ-NEXT:      Flags [ (0x0)
139# OBJ-NEXT:      ]
140# OBJ-NEXT:    }
141# OBJ-NOT: FrameData
142