mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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:
parent
8f777a205e
commit
84f362d891
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user