diff options
author | Chris Lattner <sabre@nondot.org> | 2010-09-15 04:15:16 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-09-15 04:15:16 +0000 |
commit | 81ce17386075dcdbae3891837ce0316ad9bcbd19 (patch) | |
tree | 85407fa95d87ec64962bd11a92ac5349df4e34ce /llvm/lib | |
parent | bc9a848e04bb77149fa39c562a4a9943515a5396 (diff) | |
download | bcm5719-llvm-81ce17386075dcdbae3891837ce0316ad9bcbd19.tar.gz bcm5719-llvm-81ce17386075dcdbae3891837ce0316ad9bcbd19.zip |
add various broken forms of fnstsw. I didn't add the %rax
version because it adds a prefix and makes even less sense
than the other broken forms. This wraps up rdar://8431422
llvm-svn: 113932
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index c21fc7ab56e..7098c58cde9 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -943,6 +943,25 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, NameLoc, NameLoc)); } + // The assembler accepts various amounts of brokenness for fnstsw. + if (Name == "fnstsw") { + if (Operands.size() == 2 && + static_cast<X86Operand*>(Operands[1])->isReg()) { + // "fnstsw al" and "fnstsw eax" -> "fnstw" + unsigned Reg = static_cast<X86Operand*>(Operands[1])->Reg.RegNo; + if (Reg == MatchRegisterName("eax") || + Reg == MatchRegisterName("al")) { + delete Operands[1]; + Operands.pop_back(); + } + } + + // "fnstw" -> "fnstw %ax" + if (Operands.size() == 1) + Operands.push_back(X86Operand::CreateReg(MatchRegisterName("ax"), + NameLoc, NameLoc)); + } + return false; } |