diff options
author | Chris Lattner <sabre@nondot.org> | 2010-09-15 05:25:21 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-09-15 05:25:21 +0000 |
commit | 09bfe645f666df86abb3e3f9b9ce7528ab91644e (patch) | |
tree | a95fe90c8e91480b8abf660803539ebe2678e54a /llvm/lib | |
parent | 86c3f345c6e1e8f16fdc364c5a7556b68a7e588d (diff) | |
download | bcm5719-llvm-09bfe645f666df86abb3e3f9b9ce7528ab91644e.tar.gz bcm5719-llvm-09bfe645f666df86abb3e3f9b9ce7528ab91644e.zip |
apparently jmpl $1,$2 is an alias for ljmpl, similiarly
for call. Add this.
llvm-svn: 113948
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 37334ad4ceb..acee68c54ef 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -989,6 +989,27 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, NameLoc); } + // jmp $42,$5 -> ljmp, similarly for call. + if ((Name.startswith("call") || Name.startswith("jmp")) && + Operands.size() == 3 && + static_cast<X86Operand*>(Operands[1])->isImm() && + static_cast<X86Operand*>(Operands[2])->isImm()) { + const char *NewOpName = StringSwitch<const char *>(Name) + .Case("jmp", "ljmp") + .Case("jmpw", "ljmpw") + .Case("jmpl", "ljmpl") + .Case("jmpq", "ljmpq") + .Case("call", "lcall") + .Case("callw", "lcallw") + .Case("calll", "lcalll") + .Case("callq", "lcallq") + .Default(0); + if (NewOpName) { + delete Operands[0]; + Operands[0] = X86Operand::CreateToken(NewOpName, NameLoc); + } + } + return false; } |