diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-02-26 09:12:34 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-02-26 09:12:34 +0000 |
commit | 140a4c486829e1ade130ca1ce5ca5c934a79523e (patch) | |
tree | 9826241f0455907ad481273f3fe0a03000791606 /lib/Target/X86/X86CodeEmitter.cpp | |
parent | 38b7327ec02fbc6f163905ac85ea55d357dece51 (diff) |
ConstantPoolIndex is now the displacement portion of the address (rather
than base).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26382 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86CodeEmitter.cpp')
-rw-r--r-- | lib/Target/X86/X86CodeEmitter.cpp | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/lib/Target/X86/X86CodeEmitter.cpp b/lib/Target/X86/X86CodeEmitter.cpp index 772f1abc20..5ef846b7dc 100644 --- a/lib/Target/X86/X86CodeEmitter.cpp +++ b/lib/Target/X86/X86CodeEmitter.cpp @@ -239,6 +239,9 @@ void Emitter::emitMemModRMByte(const MachineInstr &MI, if (Op3.isGlobalAddress()) { GV = Op3.getGlobal(); DispVal = Op3.getOffset(); + } else if (Op3.isConstantPoolIndex()) { + DispVal += MCE.getConstantPoolEntryAddress(Op3.getConstantPoolIndex()); + DispVal += Op3.getOffset(); } else { DispVal = Op3.getImmedValue(); } @@ -247,16 +250,7 @@ void Emitter::emitMemModRMByte(const MachineInstr &MI, const MachineOperand &Scale = MI.getOperand(Op+1); const MachineOperand &IndexReg = MI.getOperand(Op+2); - unsigned BaseReg = 0; - - if (Base.isConstantPoolIndex()) { - // Emit a direct address reference [disp32] where the displacement of the - // constant pool entry is controlled by the MCE. - assert(!GV && "Constant Pool reference cannot be relative to global!"); - DispVal += MCE.getConstantPoolEntryAddress(Base.getConstantPoolIndex()); - } else { - BaseReg = Base.getReg(); - } + unsigned BaseReg = Base.getReg(); // Is a SIB byte needed? if (IndexReg.getReg() == 0 && BaseReg != X86::ESP) { |