summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-03-11 19:06:29 +0000
committerChris Lattner <sabre@nondot.org>2008-03-11 19:06:29 +0000
commit120ad01fcb938698410f5ad0124fa9f8f57a434d (patch)
tree1624b371375034f28044758da2b5617c2b1d21e5
parentd01efb547fe0841da4a3426b83845b77205f2838 (diff)
downloadbcm5719-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.cpp9
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);
OpenPOWER on IntegriCloud