ConstantPoolIndex is now the displacement portion of the address (rather
authorEvan Cheng <evan.cheng@apple.com>
Sun, 26 Feb 2006 09:12:34 +0000 (09:12 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 26 Feb 2006 09:12:34 +0000 (09:12 +0000)
than base).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26382 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CodeEmitter.cpp

index 772f1abc204861e1d5ec6b85ebacceab0dd1439b..5ef846b7dc641eb0909988b6a6ae6abc282dbc80 100644 (file)
@@ -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) {