summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86InstrInfo.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-03-21 06:38:26 +0000
committerChris Lattner <sabre@nondot.org>2008-03-21 06:38:26 +0000
commit24e0a546b40d67dd3662273eb4aef30c230a15ef (patch)
treea13ccd51a3a64ca1fc6a6703e714c91cfa9778f1 /lib/Target/X86/X86InstrInfo.cpp
parentae60ddc22ad243ea9ae2f4353e143190063f2322 (diff)
downloadllvm-24e0a546b40d67dd3662273eb4aef30c230a15ef.tar.gz
llvm-24e0a546b40d67dd3662273eb4aef30c230a15ef.tar.bz2
llvm-24e0a546b40d67dd3662273eb4aef30c230a15ef.tar.xz
Add support for calls that return two FP values in
ST(0)/ST(1). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48634 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86InstrInfo.cpp')
-rw-r--r--lib/Target/X86/X86InstrInfo.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp
index 650ab415ee..dc267942e1 100644
--- a/lib/Target/X86/X86InstrInfo.cpp
+++ b/lib/Target/X86/X86InstrInfo.cpp
@@ -1487,16 +1487,18 @@ void X86InstrInfo::copyRegToReg(MachineBasicBlock &MBB,
// Moving from ST(0) turns into FpGET_ST0_32 etc.
if (SrcRC == &X86::RSTRegClass) {
- // Copying from ST(0). FIXME: handle ST(1) also
- assert(SrcReg == X86::ST0 && "Can only copy from TOS right now");
+ // Copying from ST(0)/ST(1).
+ assert((SrcReg == X86::ST0 || SrcReg == X86::ST1) &&
+ "Can only copy from ST(0)/ST(1) right now");
+ bool isST0 = SrcReg == X86::ST0;
unsigned Opc;
if (DestRC == &X86::RFP32RegClass)
- Opc = X86::FpGET_ST0_32;
+ Opc = isST0 ? X86::FpGET_ST0_32 : X86::FpGET_ST1_32;
else if (DestRC == &X86::RFP64RegClass)
- Opc = X86::FpGET_ST0_64;
+ Opc = isST0 ? X86::FpGET_ST0_64 : X86::FpGET_ST1_64;
else {
assert(DestRC == &X86::RFP80RegClass);
- Opc = X86::FpGET_ST0_80;
+ Opc = isST0 ? X86::FpGET_ST0_80 : X86::FpGET_ST1_80;
}
BuildMI(MBB, MI, get(Opc), DestReg);
return;