summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-10-31 19:42:44 +0000
committerChris Lattner <sabre@nondot.org>2006-10-31 19:42:44 +0000
commitf6a6966cd2b5cf94fe94634dc4599cdbb28e8f7e (patch)
tree8800ca2f10cc2f16dd4baeacbeb01b22eaef7620 /llvm/lib
parent6f043b90ea2db8c67a25d51a1abd3f054a6e9fd6 (diff)
downloadbcm5719-llvm-f6a6966cd2b5cf94fe94634dc4599cdbb28e8f7e.tar.gz
bcm5719-llvm-f6a6966cd2b5cf94fe94634dc4599cdbb28e8f7e.zip
handle "st" as "st(0)"
llvm-svn: 31320
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 96ab93949d2..83bf2807333 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -32,6 +32,7 @@
#include "llvm/Support/MathExtras.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/StringExtras.h"
using namespace llvm;
// FIXME: temporary.
@@ -5532,9 +5533,17 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint,
// constraint into a member of a register class.
std::pair<unsigned, const TargetRegisterClass*> Res;
Res = TargetLowering::getRegForInlineAsmConstraint(Constraint, VT);
-
- // Not found? Bail out.
- if (Res.second == 0) return Res;
+
+ // Not found as a standard register?
+ if (Res.second == 0) {
+ // GCC calls "st(0)" just plain "st".
+ if (StringsEqualNoCase("{st}", Constraint)) {
+ Res.first = X86::ST0;
+ Res.second = X86::RSTRegisterClass;
+ }
+
+ return Res;
+ }
// Otherwise, check to see if this is a register class of the wrong value
// type. For example, we want to map "{ax},i32" -> {eax}, we don't want it to
OpenPOWER on IntegriCloud