[llvm] r335413 - [X86] Teach disassembler to use %eip instead of %rip when 0x67 prefix is used on a rip-relative address.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 22 23:03:48 PDT 2018


Author: ctopper
Date: Fri Jun 22 23:03:48 2018
New Revision: 335413

URL: http://llvm.org/viewvc/llvm-project?rev=335413&view=rev
Log:
[X86] Teach disassembler to use %eip instead of %rip when 0x67 prefix is used on a rip-relative address.

Modified:
    llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
    llvm/trunk/test/MC/Disassembler/X86/x86-64.txt

Modified: llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp?rev=335413&r1=335412&r2=335413&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp (original)
+++ llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp Fri Jun 22 23:03:48 2018
@@ -794,7 +794,9 @@ static bool translateRMMemory(MCInst &mc
         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);

Modified: llvm/trunk/test/MC/Disassembler/X86/x86-64.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/X86/x86-64.txt?rev=335413&r1=335412&r2=335413&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/X86/x86-64.txt (original)
+++ llvm/trunk/test/MC/Disassembler/X86/x86-64.txt Fri Jun 22 23:03:48 2018
@@ -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




More information about the llvm-commits mailing list