diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 9e31833fca9..111afbf47a6 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -620,13 +620,10 @@ X86Operand *X86ATTAsmParser::ParseMemOperand(unsigned SegReg, SMLoc MemStart) { bool X86ATTAsmParser:: ParseInstruction(StringRef Name, SMLoc NameLoc, SmallVectorImpl &Operands) { - // FIXME: Hack to recognize "sal..." and "rep..." for now. We need a way to - // represent alternative syntaxes in the .td file, without requiring - // instruction duplication. + // FIXME: Hack to recognize some aliases. StringRef PatchedName = StringSwitch(Name) .Case("repe", "rep") .Case("repz", "rep") - .Case("repnz", "repne") .Case("push", Is64Bit ? "pushq" : "pushl") .Case("pop", Is64Bit ? "popq" : "popl") .Case("pushf", Is64Bit ? "pushfq" : "pushfl") @@ -721,7 +718,8 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, // Determine whether this is an instruction prefix. bool isPrefix = PatchedName == "lock" || PatchedName == "rep" || - PatchedName == "repne"; + PatchedName == "repe" || PatchedName == "repz" || + PatchedName == "repne" || PatchedName == "repnz"; // This does the actual operand parsing. Don't parse any more if we have a diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 71e90c0ae6d..9df65293890 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -1269,6 +1269,10 @@ def : MnemonicAlias<"cdqe", "cltq">; def : MnemonicAlias<"pushfd", "pushfl">; def : MnemonicAlias<"popfd", "popfl">; +def : MnemonicAlias<"repe", "rep">; +def : MnemonicAlias<"repz", "rep">; +def : MnemonicAlias<"repnz", "repne">; + def : MnemonicAlias<"salb", "shlb">; def : MnemonicAlias<"salw", "shlw">; def : MnemonicAlias<"sall", "shll">;