diff options
author | Chris Lattner <sabre@nondot.org> | 2010-09-22 05:49:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-09-22 05:49:14 +0000 |
commit | 1eb1b68e3a5241591bfa18d4beb0e0cf13a48ef2 (patch) | |
tree | ea46f1ec87dc011eea1a6f8f9f0b50826a3d825d /lib/Target/X86/AsmParser/X86AsmParser.cpp | |
parent | bc57c6db4a3a1f5df4450d8dbb100e1eb6944c28 (diff) |
Fix an inconsistency in the x86 backend that led it to reject "calll foo" on
x86-32: 32-bit calls were named "call" not "calll". 64-bit calls were correctly
named "callq", so this only impacted x86-32.
This fixes rdar://8456370 - llvm-mc rejects 'calll'
This also exposes that mingw/64 is generating a 32-bit call instead of a 64-bit call,
I will file a bugzilla.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114534 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r-- | lib/Target/X86/AsmParser/X86AsmParser.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 6826223fd8..bb6e05c286 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1020,6 +1020,14 @@ ParseInstruction(StringRef Name, SMLoc NameLoc, NameLoc); } + // call foo is not ambiguous with callw. + if (Name == "call" && Operands.size() == 2) { + const char *NewName = Is64Bit ? "callq" : "calll"; + delete Operands[0]; + Operands[0] = X86Operand::CreateToken(NewName, NameLoc); + Name = NewName; + } + // movsd -> movsl (when no operands are specified). if (Name == "movsd" && Operands.size() == 1) { delete Operands[0]; |