diff options
author | Chris Lattner <sabre@nondot.org> | 2008-03-11 19:06:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-03-11 19:06:29 +0000 |
commit | 120ad01fcb938698410f5ad0124fa9f8f57a434d (patch) | |
tree | 1624b371375034f28044758da2b5617c2b1d21e5 | |
parent | d01efb547fe0841da4a3426b83845b77205f2838 (diff) | |
download | bcm5719-llvm-120ad01fcb938698410f5ad0124fa9f8f57a434d.tar.gz bcm5719-llvm-120ad01fcb938698410f5ad0124fa9f8f57a434d.zip |
start handling the 'f' x87 constraint.
llvm-svn: 48239
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index d603e1bb986..2587188006b 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -6238,6 +6238,7 @@ X86TargetLowering::getConstraintType(const std::string &Constraint) const { if (Constraint.size() == 1) { switch (Constraint[0]) { case 'A': + case 'f': case 'r': case 'R': case 'l': @@ -6399,6 +6400,14 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint, else if (VT == MVT::i8) return std::make_pair(0U, X86::GR8RegisterClass); break; + case 'f': // FP Stack registers. + // If SSE is enabled for this VT, use f80 to ensure the isel moves the + // value to the correct fpstack register class. + if (VT == MVT::f32 && !isScalarFPTypeInSSEReg(VT)) + return std::make_pair(0U, X86::RFP32RegisterClass); + if (VT == MVT::f64 && !isScalarFPTypeInSSEReg(VT)) + return std::make_pair(0U, X86::RFP64RegisterClass); + return std::make_pair(0U, X86::RFP80RegisterClass); case 'y': // MMX_REGS if MMX allowed. if (!Subtarget->hasMMX()) break; return std::make_pair(0U, X86::VR64RegisterClass); |