Fixed ConstantPoolIndex operand asm print bug. This fixed 2005-07-17-INT-To-FP
authorEvan Cheng <evan.cheng@apple.com>
Sun, 26 Feb 2006 08:28:12 +0000 (08:28 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 26 Feb 2006 08:28:12 +0000 (08:28 +0000)
and 2005-05-12-Int64ToFP.

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

lib/Target/X86/X86ATTAsmPrinter.cpp
lib/Target/X86/X86IntelAsmPrinter.cpp

index f8f54d434a143044a11668d982632f670e2ad4f2..e9da1855ddd5b86d1acdbc576bd72f589044b39b 100755 (executable)
@@ -115,6 +115,20 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
     std::cerr << "Shouldn't use addPCDisp() when building X86 MachineInstrs";
     abort ();
     return;
+  case MachineOperand::MO_ConstantPoolIndex: {
+    bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
+    if (!isMemOp) O << '$';
+    O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
+      << MO.getConstantPoolIndex();
+    if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
+      O << "-\"L" << getFunctionNumber() << "$pb\"";
+    int Offset = MO.getOffset();
+    if (Offset > 0)
+      O << "+" << Offset;
+    else if (Offset < 0)
+      O << Offset;
+    return;
+  }
   case MachineOperand::MO_GlobalAddress: {
     bool isCallOp = Modifier && !strcmp(Modifier, "call");
     bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
@@ -198,16 +212,8 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){
     return;
   }
 
-  if (DispSpec.isGlobalAddress()) {
+  if (DispSpec.isGlobalAddress() || DispSpec.isConstantPoolIndex()) {
     printOperand(MI, Op+3, "mem");
-  } else if (DispSpec.isConstantPoolIndex()) {
-    O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
-      << DispSpec.getConstantPoolIndex();
-    if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
-      O << "-\"L" << getFunctionNumber() << "$pb\"";
-    if (DispSpec.getOffset())
-      O << "+" << DispSpec.getOffset();
-    return;
   } else {
     int DispVal = DispSpec.getImmedValue();
     if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg()))
index 7f4592bb5b57a3ef5e34fa08d82e019dacfb7ee6..ed673df9fe56c0028d38616f859eff66267ac4ca 100755 (executable)
@@ -109,6 +109,21 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
     assert(0 && "Shouldn't use addPCDisp() when building X86 MachineInstrs");
     abort ();
     return;
+  case MachineOperand::MO_ConstantPoolIndex: {
+    bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
+    if (!isMemOp) O << "OFFSET ";
+    O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
+      << MO.getConstantPoolIndex();
+    if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
+      O << "-\"L" << getFunctionNumber() << "$pb\"";
+    int Offset = MO.getOffset();
+    if (Offset > 0)
+      O << " + " << Offset;
+    else if (Offset < 0)
+      O << Offset;
+    O << "]";
+    return;
+  }
   case MachineOperand::MO_GlobalAddress: {
     bool isCallOp = Modifier && !strcmp(Modifier, "call");
     bool isMemOp  = Modifier && !strcmp(Modifier, "mem");
@@ -192,19 +207,10 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){
     NeedPlus = true;
   }
 
-  if (DispSpec.isGlobalAddress()) {
+  if (DispSpec.isGlobalAddress() || DispSpec.isConstantPoolIndex()) {
     if (NeedPlus)
       O << " + ";
     printOp(DispSpec, "mem");
-  } else if (DispSpec.isConstantPoolIndex()) {
-    O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
-      << DispSpec.getConstantPoolIndex();
-    if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
-      O << "-\"L" << getFunctionNumber() << "$pb\"";
-    if (DispSpec.getOffset())
-      O << " + " << DispSpec.getOffset();
-    O << "]";
-    return;
   } else {
     int DispVal = DispSpec.getImmedValue();
     if (DispVal || (!BaseReg.getReg() && !IndexReg.getReg())) {