diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-07-08 23:46:44 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-07-08 23:46:44 +0000 |
| commit | f469307c77637ddbbf6b7167b9d31cb20f39a040 (patch) | |
| tree | 638f23bd62e727da11e9b95b9d86e8f903f53107 /llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp | |
| parent | 45879695553e4fcf007227eba100d3b4b366d477 (diff) | |
| download | bcm5719-llvm-f469307c77637ddbbf6b7167b9d31cb20f39a040.tar.gz bcm5719-llvm-f469307c77637ddbbf6b7167b9d31cb20f39a040.zip | |
Change LEA to have 5 operands for its memory operand, just
like all other instructions, even though a segment is not
allowed. This resolves a bunch of gross hacks in the
encoder and makes LEA more consistent with the rest of the
instruction set.
No functionality change.
llvm-svn: 107934
Diffstat (limited to 'llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp b/llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp index 7e0a9bb891f..a632047f659 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp +++ b/llvm/lib/Target/X86/AsmPrinter/X86IntelInstPrinter.cpp @@ -81,12 +81,19 @@ void X86IntelInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, } } -void X86IntelInstPrinter::printLeaMemReference(const MCInst *MI, unsigned Op, - raw_ostream &O) { +void X86IntelInstPrinter::printMemReference(const MCInst *MI, unsigned Op, + raw_ostream &O) { const MCOperand &BaseReg = MI->getOperand(Op); unsigned ScaleVal = MI->getOperand(Op+1).getImm(); const MCOperand &IndexReg = MI->getOperand(Op+2); const MCOperand &DispSpec = MI->getOperand(Op+3); + const MCOperand &SegReg = MI->getOperand(Op+4); + + // If this has a segment register, print it. + if (SegReg.getReg()) { + printOperand(MI, Op+4, O); + O << ':'; + } O << '['; @@ -104,7 +111,7 @@ void X86IntelInstPrinter::printLeaMemReference(const MCInst *MI, unsigned Op, NeedPlus = true; } - + if (!DispSpec.isImm()) { if (NeedPlus) O << " + "; assert(DispSpec.isExpr() && "non-immediate displacement for LEA?"); @@ -126,13 +133,3 @@ void X86IntelInstPrinter::printLeaMemReference(const MCInst *MI, unsigned Op, O << ']'; } - -void X86IntelInstPrinter::printMemReference(const MCInst *MI, unsigned Op, - raw_ostream &O) { - // If this has a segment register, print it. - if (MI->getOperand(Op+4).getReg()) { - printOperand(MI, Op+4, O); - O << ':'; - } - printLeaMemReference(MI, Op, O); -} |

