diff options
author | Chris Lattner <sabre@nondot.org> | 2010-09-15 05:14:54 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-09-15 05:14:54 +0000 |
commit | 250b948f21b2910c5bc61fb364c6817727a3a972 (patch) | |
tree | 4939031859ca1879b4e41249d002394cb94da101 | |
parent | 6c1b3b1e32f960f44e47d8484510f5c5f8e5343f (diff) | |
download | llvm-250b948f21b2910c5bc61fb364c6817727a3a972.tar.gz llvm-250b948f21b2910c5bc61fb364c6817727a3a972.tar.bz2 llvm-250b948f21b2910c5bc61fb364c6817727a3a972.tar.xz |
Disambiguate lcall/ljmp to the 32-bit version. This happens
even in 64-bit mode apparently.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113945 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/AsmParser/X86AsmParser.cpp | 10 | ||||
-rw-r--r-- | test/MC/AsmParser/X86/x86_instructions.s | 6 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 7afa7e66d5..37334ad4ce 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -979,6 +979,16 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, NameLoc, NameLoc)); } + // lcall *x and ljmp *x -> lcalll and ljmpl + if ((Name == "lcall" || Name == "ljmp") && + Operands.size() == 3 && + static_cast<X86Operand*>(Operands[1])->isToken() && + static_cast<X86Operand*>(Operands[1])->getToken() == "*") { + delete Operands[0]; + Operands[0] = X86Operand::CreateToken(Name == "lcall" ? "lcalll" : "ljmpl", + NameLoc); + } + return false; } diff --git a/test/MC/AsmParser/X86/x86_instructions.s b/test/MC/AsmParser/X86/x86_instructions.s index 16b1aac619..092aff3b48 100644 --- a/test/MC/AsmParser/X86/x86_instructions.s +++ b/test/MC/AsmParser/X86/x86_instructions.s @@ -288,3 +288,9 @@ shrd $1, %bx,%bx sldt %ecx sldt %cx +// CHECK: lcalll *3135175374 +// CHECK: ljmpl *3135175374 +lcall *0xbadeface +ljmp *0xbadeface + + |