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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113932 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-09-15 04:15:16 +00:00
parent 8f777a205e
commit 84f362d891
2 changed files with 27 additions and 0 deletions

View File

@ -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;
}

View File

@ -248,4 +248,12 @@ fucomi
fucomi %st(2)
fucomi %st(2), %st
// CHECK: fnstsw %ax
// CHECK: fnstsw %ax
// CHECK: fnstsw %ax
// CHECK: fnstsw %ax
fnstsw
fnstsw %ax
fnstsw %eax
fnstsw %al