X86 asm parser: Avoid duplicating the list of aliased instructions

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Kleckner
2014-07-31 00:07:33 +00:00
parent cadb2a8a32
commit a749eccfed

View File

@@ -2302,27 +2302,22 @@ bool X86AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
// FIXME: This should be replaced with a real .td file alias mechanism. // FIXME: This should be replaced with a real .td file alias mechanism.
// Also, MatchInstructionImpl should actually *do* the EmitInstruction // Also, MatchInstructionImpl should actually *do* the EmitInstruction
// call. // call.
if (Op.getToken() == "fstsw" || Op.getToken() == "fstcw" || const char *Repl = StringSwitch<const char *>(Op.getToken())
Op.getToken() == "fstsww" || Op.getToken() == "fstcww" || .Case("finit", "fninit")
Op.getToken() == "finit" || Op.getToken() == "fsave" || .Case("fsave", "fnsave")
Op.getToken() == "fstenv" || Op.getToken() == "fclex") { .Case("fstcw", "fnstcw")
.Case("fstcww", "fnstcw")
.Case("fstenv", "fnstenv")
.Case("fstsw", "fnstsw")
.Case("fstsww", "fnstsw")
.Case("fclex", "fnclex")
.Default(nullptr);
if (Repl) {
MCInst Inst; MCInst Inst;
Inst.setOpcode(X86::WAIT); Inst.setOpcode(X86::WAIT);
Inst.setLoc(IDLoc); Inst.setLoc(IDLoc);
if (!MatchingInlineAsm) if (!MatchingInlineAsm)
EmitInstruction(Inst, Operands, Out); EmitInstruction(Inst, Operands, Out);
const char *Repl = StringSwitch<const char *>(Op.getToken())
.Case("finit", "fninit")
.Case("fsave", "fnsave")
.Case("fstcw", "fnstcw")
.Case("fstcww", "fnstcw")
.Case("fstenv", "fnstenv")
.Case("fstsw", "fnstsw")
.Case("fstsww", "fnstsw")
.Case("fclex", "fnclex")
.Default(nullptr);
assert(Repl && "Unknown wait-prefixed instruction");
Operands[0] = X86Operand::CreateToken(Repl, IDLoc); Operands[0] = X86Operand::CreateToken(Repl, IDLoc);
} }