aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/Target/X86/X86ATTAsmPrinter.cpp2
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp21
-rwxr-xr-xlib/Target/X86/X86IntelAsmPrinter.cpp2
3 files changed, 17 insertions, 8 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp
index 14f47c0cd5..70332a38a2 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 ac06cbc89d..18c7c4b81b 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 9cf7c29d77..a9d7c63ccd 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()) {