summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-06-23 06:03:48 +0000
committerCraig Topper <craig.topper@intel.com>2018-06-23 06:03:48 +0000
commit254552903491a3ede54f1b3f6475324641ef1506 (patch)
tree8a61d21f9d471d7597006c813efead4e89a96baa
parent68d64e3859c55482d156003de6a9622d2c639725 (diff)
downloadbcm5719-llvm-254552903491a3ede54f1b3f6475324641ef1506.tar.gz
bcm5719-llvm-254552903491a3ede54f1b3f6475324641ef1506.zip
[X86] Teach disassembler to use %eip instead of %rip when 0x67 prefix is used on a rip-relative address.
llvm-svn: 335413
-rw-r--r--llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp4
-rw-r--r--llvm/test/MC/Disassembler/X86/x86-64.txt4
2 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
index bac9d02d69c..b658963c846 100644
--- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -794,7 +794,9 @@ static bool translateRMMemory(MCInst &mcInst, InternalInstruction &insn,
tryAddingPcLoadReferenceComment(insn.startLocation +
insn.displacementOffset,
insn.displacement + pcrel, Dis);
- baseReg = MCOperand::createReg(X86::RIP); // Section 2.2.1.6
+ // Section 2.2.1.6
+ baseReg = MCOperand::createReg(insn.addressSize == 4 ? X86::EIP :
+ X86::RIP);
}
else
baseReg = MCOperand::createReg(0);
diff --git a/llvm/test/MC/Disassembler/X86/x86-64.txt b/llvm/test/MC/Disassembler/X86/x86-64.txt
index ce932469a0b..3ffd72103fa 100644
--- a/llvm/test/MC/Disassembler/X86/x86-64.txt
+++ b/llvm/test/MC/Disassembler/X86/x86-64.txt
@@ -588,3 +588,7 @@
# Make sure we ignore EVEX.X when modrm.rm encodes a k-register.
#CHECK: vpmovm2b %k0, %xmm0
0x62,0xb2,0x7e,0x08,0x28,0xc0
+
+# 0x67 prefix prints %eip instead of %rip
+#CHECK: addb %al, (%eip)
+0x67,0x00,0x05,0x00,0x00,0x00,0x00
OpenPOWER on IntegriCloud