diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-11-21 06:46:22 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-11-21 06:46:22 +0000 |
| commit | 618981fd03f323f008dde4d5b6f9593de08a33c8 (patch) | |
| tree | e6a8ded338dd605d680322414e83246355105206 /llvm/lib/Target/X86 | |
| parent | e927c3ff4ec748fe403708b7e12163f39b0039e2 (diff) | |
| download | bcm5719-llvm-618981fd03f323f008dde4d5b6f9593de08a33c8.tar.gz bcm5719-llvm-618981fd03f323f008dde4d5b6f9593de08a33c8.zip | |
Naturally align doubles in the constant pool, set PrivateGlobalPrefix on
darwin, use it when printing the constant pool indices so the labels are
appropriately private, emit cp entries to .const instead of .data on darwin
and only emit a single .section for the constant pool, not one for each
entry.
llvm-svn: 24440
Diffstat (limited to 'llvm/lib/Target/X86')
| -rwxr-xr-x | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 21 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86IntelAsmPrinter.cpp | 2 |
3 files changed, 17 insertions, 8 deletions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 14f47c0cd55..70332a38a23 100755 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/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/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index ac06cbc89d6..18c7c4b81b1 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/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/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp b/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp index 9cf7c29d77d..a9d7c63ccda 100755 --- a/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/llvm/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()) { |

