diff options
author | Craig Topper <craig.topper@gmail.com> | 2014-01-16 07:36:58 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2014-01-16 07:36:58 +0000 |
commit | 85026d937558b1ab5f8e84ee756ed925459085e2 (patch) | |
tree | c9210deca8b2885567cf7d1c29ec8db3c267b50a /lib/Target/X86/InstPrinter | |
parent | 4500ebda777981acc701c3baddc439cfe3625d17 (diff) | |
download | llvm-85026d937558b1ab5f8e84ee756ed925459085e2.tar.gz llvm-85026d937558b1ab5f8e84ee756ed925459085e2.tar.bz2 llvm-85026d937558b1ab5f8e84ee756ed925459085e2.tar.xz |
Allow x86 mov instructions to/from memory with absolute address to be encoded and disassembled with a segment override prefix. Fixes PR16962.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199364 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/InstPrinter')
-rw-r--r-- | lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp | 7 | ||||
-rw-r--r-- | lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp b/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp index 8c2bb0f9e9..11a9ada41e 100644 --- a/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp +++ b/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp @@ -229,9 +229,16 @@ void X86ATTInstPrinter::printMemReference(const MCInst *MI, unsigned Op, void X86ATTInstPrinter::printMemOffset(const MCInst *MI, unsigned Op, raw_ostream &O) { const MCOperand &DispSpec = MI->getOperand(Op); + const MCOperand &SegReg = MI->getOperand(Op+1); O << markup("<mem:"); + // If this has a segment register, print it. + if (SegReg.getReg()) { + printOperand(MI, Op+1, O); + O << ':'; + } + if (DispSpec.isImm()) { O << formatImm(DispSpec.getImm()); } else { diff --git a/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp b/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp index 7255d560cc..59634f9ad8 100644 --- a/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp +++ b/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp @@ -215,6 +215,13 @@ void X86IntelInstPrinter::printMemReference(const MCInst *MI, unsigned Op, void X86IntelInstPrinter::printMemOffset(const MCInst *MI, unsigned Op, raw_ostream &O) { const MCOperand &DispSpec = MI->getOperand(Op); + const MCOperand &SegReg = MI->getOperand(Op+1); + + // If this has a segment register, print it. + if (SegReg.getReg()) { + printOperand(MI, Op+1, O); + O << ':'; + } O << '['; |