gn build: Merge r374476
[llvm-complete.git] / test / MC / COFF / cv-fpo-realign.s
blobdf94b133acdb124c84e885ef974d97792e9108ef
1 # RUN: llvm-mc -triple=i686-windows-msvc -filetype=obj < %s | llvm-readobj --codeview | FileCheck %s
3 # Test for .cv_fpo_stackalign. We should generate FPO data that restores CSRs
4 # at each instruction, and in the last FrameData we should use the '@'
5 # alignment operator to define $T0, the vframe value.
7 # Based on this C code:
8 # void usevals(int, int, double*);
9 # int realign_with_csrs() {
10 # int a = getval();
11 # int b = getval();
12 # double __declspec(align(8)) force_alignment = 0.42;
13 # usevals(a, b, &force_alignment);
14 # return a + b;
15 # }
17 # CHECK: Subsection [
18 # CHECK: SubSectionType: Symbols (0xF1)
19 # CHECK: Compile3Sym {
20 # CHECK: Kind: S_COMPILE3 (0x113C)
21 # CHECK: }
22 # CHECK: ]
23 # CHECK: Subsection [
24 # CHECK: SubSectionType: FrameData (0xF5)
25 # CHECK: FrameData {
26 # CHECK: FrameFunc [
27 # CHECK: $T0 .raSearch =
28 # CHECK: $eip $T0 ^ =
29 # CHECK: $esp $T0 4 + =
30 # CHECK: ]
31 # CHECK: }
32 # CHECK: FrameData {
33 # CHECK: FrameFunc [
34 # CHECK: $T0 .raSearch =
35 # CHECK: $eip $T0 ^ =
36 # CHECK: $esp $T0 4 + =
37 # CHECK: $ebp $T0 4 - ^ =
38 # CHECK: ]
39 # CHECK: }
40 # CHECK: FrameData {
41 # CHECK: FrameFunc [
42 # CHECK: $T0 $ebp 4 + =
43 # CHECK: $eip $T0 ^ =
44 # CHECK: $esp $T0 4 + =
45 # CHECK: $ebp $T0 4 - ^ =
46 # CHECK: ]
47 # CHECK: }
48 # CHECK: FrameData {
49 # CHECK: FrameFunc [
50 # CHECK: $T0 $ebp 4 + =
51 # CHECK: $eip $T0 ^ =
52 # CHECK: $esp $T0 4 + =
53 # CHECK: $ebp $T0 4 - ^ =
54 # CHECK: $edi $T0 8 - ^ =
55 # CHECK: ]
56 # CHECK: }
57 # CHECK: FrameData {
58 # CHECK: FrameFunc [
59 # CHECK: $T0 $ebp 4 + =
60 # CHECK: $eip $T0 ^ =
61 # CHECK: $esp $T0 4 + =
62 # CHECK: $ebp $T0 4 - ^ =
63 # CHECK: $edi $T0 8 - ^ =
64 # CHECK: $esi $T0 12 - ^ =
65 # CHECK: ]
66 # CHECK: }
67 # CHECK: FrameData {
68 # CHECK: FrameFunc [
69 # CHECK: $T1 $ebp 4 + =
70 # CHECK: $T0 $T1 12 - 8 @ =
71 # CHECK: $eip $T1 ^ =
72 # CHECK: $esp $T1 4 + =
73 # CHECK: $ebp $T1 4 - ^ =
74 # CHECK: $edi $T1 8 - ^ =
75 # CHECK: $esi $T1 12 - ^ =
76 # CHECK: ]
77 # CHECK: }
78 # CHECK: ]
79 # CHECK: Subsection [
80 # CHECK: SubSectionType: Symbols (0xF1)
81 # CHECK: ]
82 # CHECK: Subsection [
83 # CHECK: SubSectionType: FileChecksums (0xF4)
84 # CHECK: ]
85 # CHECK: Subsection [
86 # CHECK: SubSectionType: StringTable (0xF3)
87 # CHECK: ]
89 .text
90 .def _realign_with_csrs; .scl 2; .type 32; .endef
91 .globl _realign_with_csrs # -- Begin function realign_with_csrs
92 _realign_with_csrs: # @realign_with_csrs
93 Lfunc_begin0:
94 .cv_func_id 0
95 .cv_file 1 "C:\\src\\llvm-project\\build\\t.c" "2A4F9B6BBBF7845521201755D1B14ACC" 1
96 .cv_loc 0 1 4 0 # t.c:4:0
97 .cv_fpo_proc _realign_with_csrs 0
98 # %bb.0: # %entry
99 pushl %ebp
100 .cv_fpo_pushreg %ebp
101 movl %esp, %ebp
102 .cv_fpo_setframe %ebp
103 Ltmp0:
104 pushl %edi
105 .cv_fpo_pushreg %edi
106 pushl %esi
107 .cv_fpo_pushreg %esi
108 andl $-8, %esp
109 .cv_fpo_stackalign 8
110 subl $8, %esp
111 .cv_fpo_stackalloc 8
112 .cv_fpo_endprologue
113 .cv_loc 0 1 5 0 # t.c:5:0
114 calll _getval
115 movl %eax, %esi
116 .cv_loc 0 1 6 0 # t.c:6:0
117 calll _getval
118 movl %eax, %edi
119 movl %esp, %eax
120 .cv_loc 0 1 7 0 # t.c:7:0
121 movl $1071309127, 4(%esp) # imm = 0x3FDAE147
122 movl $-1374389535, (%esp) # imm = 0xAE147AE1
123 .cv_loc 0 1 8 0 # t.c:8:0
124 pushl %eax
125 pushl %edi
126 pushl %esi
127 calll _usevals
128 addl $12, %esp
129 .cv_loc 0 1 9 0 # t.c:9:0
130 addl %esi, %edi
131 movl %edi, %eax
132 leal -8(%ebp), %esp
133 popl %esi
134 popl %edi
135 popl %ebp
136 retl
137 Ltmp1:
138 .cv_fpo_endproc
139 Lfunc_end0:
140 # -- End function
141 .section .debug$S,"dr"
142 .p2align 2
143 .long 4 # Debug section magic
144 .long 241
145 .long Ltmp3-Ltmp2 # Subsection size
146 Ltmp2:
147 .short Ltmp5-Ltmp4 # Record length
148 Ltmp4:
149 .short 4412 # Record kind: S_COMPILE3
150 .long 0 # Flags and language
151 .short 7 # CPUType
152 .short 8 # Frontend version
153 .short 0
154 .short 0
155 .short 0
156 .short 8000 # Backend version
157 .short 0
158 .short 0
159 .short 0
160 .asciz "clang version 8.0.0 " # Null-terminated compiler version string
161 Ltmp5:
162 Ltmp3:
163 .p2align 2
164 .cv_fpo_data _realign_with_csrs
165 .long 241 # Symbol subsection for realign_with_csrs
166 .long Ltmp7-Ltmp6 # Subsection size
167 Ltmp6:
168 .short Ltmp9-Ltmp8 # Record length
169 Ltmp8:
170 .short 4423 # Record kind: S_GPROC32_ID
171 .long 0 # PtrParent
172 .long 0 # PtrEnd
173 .long 0 # PtrNext
174 .long Lfunc_end0-_realign_with_csrs # Code size
175 .long 0 # Offset after prologue
176 .long 0 # Offset before epilogue
177 .long 0 # Function type index
178 .secrel32 _realign_with_csrs # Function section relative address
179 .secidx _realign_with_csrs # Function section index
180 .byte 0 # Flags
181 .asciz "realign_with_csrs" # Function name
182 Ltmp9:
183 .short Ltmp11-Ltmp10 # Record length
184 Ltmp10:
185 .short 4114 # Record kind: S_FRAMEPROC
186 .long 12 # FrameSize
187 .long 0 # Padding
188 .long 0 # Offset of padding
189 .long 8 # Bytes of callee saved registers
190 .long 0 # Exception handler offset
191 .short 0 # Exception handler section
192 .long 1196032 # Flags (defines frame register)
193 Ltmp11:
194 .short 2 # Record length
195 .short 4431 # Record kind: S_PROC_ID_END
196 Ltmp7:
197 .p2align 2
198 .cv_filechecksums # File index to string table offset subsection
199 .cv_stringtable # String table