reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
  180
  181
  182
  183
  184
  185
  186
  187
  188
  189
  190
  191
  192
  193
  194
  195
  196
  197
  198
  199
# RUN: llvm-mc -triple=i686-windows-msvc -filetype=obj < %s | llvm-readobj --codeview | FileCheck %s

# Test for .cv_fpo_stackalign. We should generate FPO data that restores CSRs
# at each instruction, and in the last FrameData we should use the '@'
# alignment operator to define $T0, the vframe value.

# Based on this C code:
# void usevals(int, int, double*);
# int realign_with_csrs() {
#   int a = getval();
#   int b = getval();
#   double __declspec(align(8)) force_alignment = 0.42;
#   usevals(a, b, &force_alignment);
#   return a + b;
# }

# CHECK: Subsection [
# CHECK:   SubSectionType: Symbols (0xF1)
# CHECK:   Compile3Sym {
# CHECK:     Kind: S_COMPILE3 (0x113C)
# CHECK:   }
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: FrameData (0xF5)
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 .raSearch =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 .raSearch =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:       $edi $T0 8 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:       $edi $T0 8 - ^ =
# CHECK:       $esi $T0 12 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T1 $ebp 4 + =
# CHECK:       $T0 $T1 12 - 8 @ =
# CHECK:       $eip $T1 ^ =
# CHECK:       $esp $T1 4 + =
# CHECK:       $ebp $T1 4 - ^ =
# CHECK:       $edi $T1 8 - ^ =
# CHECK:       $esi $T1 12 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: Symbols (0xF1)
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: FileChecksums (0xF4)
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: StringTable (0xF3)
# CHECK: ]

	.text
	.def	 _realign_with_csrs; .scl	2; .type	32; .endef
	.globl	_realign_with_csrs      # -- Begin function realign_with_csrs
_realign_with_csrs:                     # @realign_with_csrs
Lfunc_begin0:
	.cv_func_id 0
	.cv_file	1 "C:\\src\\llvm-project\\build\\t.c" "2A4F9B6BBBF7845521201755D1B14ACC" 1
	.cv_loc	0 1 4 0                 # t.c:4:0
	.cv_fpo_proc	_realign_with_csrs 0
# %bb.0:                                # %entry
	pushl	%ebp
	.cv_fpo_pushreg	%ebp
	movl	%esp, %ebp
	.cv_fpo_setframe	%ebp
Ltmp0:
	pushl	%edi
	.cv_fpo_pushreg	%edi
	pushl	%esi
	.cv_fpo_pushreg	%esi
	andl	$-8, %esp
	.cv_fpo_stackalign	8
	subl	$8, %esp
	.cv_fpo_stackalloc	8
	.cv_fpo_endprologue
	.cv_loc	0 1 5 0                 # t.c:5:0
	calll	_getval
	movl	%eax, %esi
	.cv_loc	0 1 6 0                 # t.c:6:0
	calll	_getval
	movl	%eax, %edi
	movl	%esp, %eax
	.cv_loc	0 1 7 0                 # t.c:7:0
	movl	$1071309127, 4(%esp)    # imm = 0x3FDAE147
	movl	$-1374389535, (%esp)    # imm = 0xAE147AE1
	.cv_loc	0 1 8 0                 # t.c:8:0
	pushl	%eax
	pushl	%edi
	pushl	%esi
	calll	_usevals
	addl	$12, %esp
	.cv_loc	0 1 9 0                 # t.c:9:0
	addl	%esi, %edi
	movl	%edi, %eax
	leal	-8(%ebp), %esp
	popl	%esi
	popl	%edi
	popl	%ebp
	retl
Ltmp1:
	.cv_fpo_endproc
Lfunc_end0:
                                        # -- End function
	.section	.debug$S,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	.long	241
	.long	Ltmp3-Ltmp2             # Subsection size
Ltmp2:
	.short	Ltmp5-Ltmp4             # Record length
Ltmp4:
	.short	4412                    # Record kind: S_COMPILE3
	.long	0                       # Flags and language
	.short	7                       # CPUType
	.short	8                       # Frontend version
	.short	0
	.short	0
	.short	0
	.short	8000                    # Backend version
	.short	0
	.short	0
	.short	0
	.asciz	"clang version 8.0.0 "  # Null-terminated compiler version string
Ltmp5:
Ltmp3:
	.p2align 2
	.cv_fpo_data	_realign_with_csrs
	.long	241                     # Symbol subsection for realign_with_csrs
	.long	Ltmp7-Ltmp6             # Subsection size
Ltmp6:
	.short	Ltmp9-Ltmp8             # Record length
Ltmp8:
	.short	4423                    # Record kind: S_GPROC32_ID
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	0                       # PtrNext
	.long	Lfunc_end0-_realign_with_csrs # Code size
	.long	0                       # Offset after prologue
	.long	0                       # Offset before epilogue
	.long	0                    # Function type index
	.secrel32	_realign_with_csrs # Function section relative address
	.secidx	_realign_with_csrs      # Function section index
	.byte	0                       # Flags
	.asciz	"realign_with_csrs"     # Function name
Ltmp9:
	.short	Ltmp11-Ltmp10           # Record length
Ltmp10:
	.short	4114                    # Record kind: S_FRAMEPROC
	.long	12                      # FrameSize
	.long	0                       # Padding
	.long	0                       # Offset of padding
	.long	8                       # Bytes of callee saved registers
	.long	0                       # Exception handler offset
	.short	0                       # Exception handler section
	.long	1196032                 # Flags (defines frame register)
Ltmp11:
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
Ltmp7:
	.p2align	2
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table