diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 14f47c0cd55..70332a38a23 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -174,7 +174,7 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){ O << "]"; return; } else if (BaseReg.isConstantPoolIndex()) { - O << ".CPI" << CurrentFnName << "_" + O << PrivateGlobalPrefix << "CPI" << CurrentFnName << "_" << BaseReg.getConstantPoolIndex(); if (DispSpec.getImmedValue()) O << "+" << DispSpec.getImmedValue(); diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index ac06cbc89d6..18c7c4b81b1 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -18,6 +18,7 @@ #include "X86IntelAsmPrinter.h" #include "X86.h" #include "llvm/Module.h" +#include "llvm/Type.h" #include "llvm/Assembly/Writer.h" #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/Support/Mangler.h" @@ -66,6 +67,7 @@ bool X86SharedAsmPrinter::doInitialization(Module& M) { AlignmentIsInBytes = false; Data64bitsDirective = 0; // we can't emit a 64-bit unit ZeroDirective = "\t.space\t"; // ".space N" emits N zeros. + PrivateGlobalPrefix = "L"; // Marker for constant pool idxs } return AsmPrinter::doInitialization(M); @@ -82,14 +84,21 @@ void X86SharedAsmPrinter::printConstantPool(MachineConstantPool *MCP) { if (CP.empty()) return; + if (forDarwin) { + O << "\t.const\n"; + } else { + O << "\t.section .rodata\n"; + } + for (unsigned i = 0, e = CP.size(); i != e; ++i) { - if (forDarwin) - O << "\t.data\n"; + // FIXME: force doubles to be naturally aligned. We should handle this + // more correctly in the future. + if (CP[i]->getType() == Type::DoubleTy) + emitAlignment(3); else - O << "\t.section .rodata\n"; - emitAlignment(TD.getTypeAlignmentShift(CP[i]->getType())); - O << ".CPI" << CurrentFnName << "_" << i << ":\t\t\t\t\t" << CommentString - << *CP[i] << "\n"; + emitAlignment(TD.getTypeAlignmentShift(CP[i]->getType())); + O << PrivateGlobalPrefix << "CPI" << CurrentFnName << "_" << i + << ":\t\t\t\t\t" << CommentString << *CP[i] << "\n"; emitGlobalConstant(CP[i]); } } diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp index 9cf7c29d77d..a9d7c63ccda 100755 --- a/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/X86IntelAsmPrinter.cpp @@ -141,7 +141,7 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){ O << "]"; return; } else if (BaseReg.isConstantPoolIndex()) { - O << "[.CPI" << CurrentFnName << "_" + O << "[" << PrivateGlobalPrefix << "CPI" << CurrentFnName << "_" << BaseReg.getConstantPoolIndex(); if (IndexReg.getReg()) {