mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 04:35:00 +00:00
Mark that the _ftol2 function used by windows on x86 to handle fptoui modifies ECX.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186787 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
68ccbf648e
commit
3cd645701a
@ -1662,6 +1662,7 @@ void FPS::handleSpecialFP(MachineBasicBlock::iterator &I) {
|
||||
BuildMI(*MBB, I, MI->getDebugLoc(), TII->get(X86::CALLpcrel32))
|
||||
.addExternalSymbol("_ftol2")
|
||||
.addReg(X86::ST0, RegState::ImplicitKill)
|
||||
.addReg(X86::ECX, RegState::ImplicitDefine)
|
||||
.addReg(X86::EAX, RegState::Define | RegState::Implicit)
|
||||
.addReg(X86::EDX, RegState::Define | RegState::Implicit)
|
||||
.addReg(X86::EFLAGS, RegState::Define | RegState::Implicit);
|
||||
|
@ -129,12 +129,13 @@ def SEG_ALLOCA_64 : I<0, Pseudo, (outs GR64:$dst), (ins GR64:$size),
|
||||
|
||||
// The MSVC runtime contains an _ftol2 routine for converting floating-point
|
||||
// to integer values. It has a strange calling convention: the input is
|
||||
// popped from the x87 stack, and the return value is given in EDX:EAX. No
|
||||
// other registers (aside from flags) are touched.
|
||||
// popped from the x87 stack, and the return value is given in EDX:EAX. ECX is
|
||||
// used as a temporary register. No other registers (aside from flags) are
|
||||
// touched.
|
||||
// Microsoft toolchains do not support 80-bit precision, so a WIN_FTOL_80
|
||||
// variant is unnecessary.
|
||||
|
||||
let Defs = [EAX, EDX, EFLAGS], FPForm = SpecialFP in {
|
||||
let Defs = [EAX, EDX, ECX, EFLAGS], FPForm = SpecialFP in {
|
||||
def WIN_FTOL_32 : I<0, Pseudo, (outs), (ins RFP32:$src),
|
||||
"# win32 fptoui",
|
||||
[(X86WinFTOL RFP32:$src)]>,
|
||||
|
Loading…
x
Reference in New Issue
Block a user