From e7070e90066acc3460af1d6cac4036a80b0250b8 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 2 Feb 2010 23:46:47 +0000 Subject: [PATCH] AsmParser/X86: Add temporary hack to allow parsing "sal". Eventually we need some mechanism for specifying alternative syntaxes, but I'm not sure what form that should take yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95158 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 10 ++++++++-- test/MC/AsmParser/X86/x86_instructions.s | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 73e377086bb..3a8f5d55650 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -456,8 +456,14 @@ X86Operand *X86ATTAsmParser::ParseMemOperand() { bool X86ATTAsmParser:: ParseInstruction(const StringRef &Name, SMLoc NameLoc, SmallVectorImpl &Operands) { - - Operands.push_back(X86Operand::CreateToken(Name, NameLoc)); + // FIXME: Hack to recognize "sal..." for now. We need a way to represent + // alternative syntaxes in the .td file, without requiring instruction + // duplication. + if (Name.startswith("sal")) { + std::string Tmp = "shl" + Name.substr(3).str(); + Operands.push_back(X86Operand::CreateToken(Tmp, NameLoc)); + } else + Operands.push_back(X86Operand::CreateToken(Name, NameLoc)); if (getLexer().isNot(AsmToken::EndOfStatement)) { diff --git a/test/MC/AsmParser/X86/x86_instructions.s b/test/MC/AsmParser/X86/x86_instructions.s index 314fc1add1e..a1b881b3157 100644 --- a/test/MC/AsmParser/X86/x86_instructions.s +++ b/test/MC/AsmParser/X86/x86_instructions.s @@ -64,3 +64,9 @@ // FIXME: Check that this matches the correct instruction. // CHECK: shldl %cl, %eax, %ebx shldl %cl, %eax, %ebx + +// CHECK: shll $2, %eax + shll $2, %eax + +// CHECK: shll $2, %eax + sall $2, %eax -- 2.34.1