diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-10-31 19:42:44 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-10-31 19:42:44 +0000 |
| commit | f6a6966cd2b5cf94fe94634dc4599cdbb28e8f7e (patch) | |
| tree | 8800ca2f10cc2f16dd4baeacbeb01b22eaef7620 /llvm/lib | |
| parent | 6f043b90ea2db8c67a25d51a1abd3f054a6e9fd6 (diff) | |
| download | bcm5719-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.cpp | 15 |
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 |

