mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Move .literal4 and .literal8 support into AsmPrinter.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28978 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2d2cec1e9e
commit
d3f6981174
@ -59,6 +59,8 @@ bool X86SharedAsmPrinter::doInitialization(Module &M) {
|
|||||||
PrivateGlobalPrefix = "L"; // Marker for constant pool idxs
|
PrivateGlobalPrefix = "L"; // Marker for constant pool idxs
|
||||||
ConstantPoolSection = "\t.const\n";
|
ConstantPoolSection = "\t.const\n";
|
||||||
JumpTableSection = "\t.const\n"; // FIXME: depends on PIC mode
|
JumpTableSection = "\t.const\n"; // FIXME: depends on PIC mode
|
||||||
|
FourByteConstantSection = "\t.literal4\n";
|
||||||
|
EightByteConstantSection = "\t.literal8\n";
|
||||||
LCOMMDirective = "\t.lcomm\t";
|
LCOMMDirective = "\t.lcomm\t";
|
||||||
COMMDirectiveTakesAlignment = false;
|
COMMDirectiveTakesAlignment = false;
|
||||||
HasDotTypeDotSizeDirective = false;
|
HasDotTypeDotSizeDirective = false;
|
||||||
@ -222,57 +224,6 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
|
|||||||
return false; // success
|
return false; // success
|
||||||
}
|
}
|
||||||
|
|
||||||
void X86SharedAsmPrinter::EmitConstantPool(MachineConstantPool *MCP) {
|
|
||||||
if (Subtarget->TargetType != X86Subtarget::isDarwin) {
|
|
||||||
AsmPrinter::EmitConstantPool(MCP);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<MachineConstantPoolEntry> &CP = MCP->getConstants();
|
|
||||||
if (CP.empty()) return;
|
|
||||||
|
|
||||||
std::vector<std::pair<MachineConstantPoolEntry,unsigned> > FloatCPs;
|
|
||||||
std::vector<std::pair<MachineConstantPoolEntry,unsigned> > DoubleCPs;
|
|
||||||
std::vector<std::pair<MachineConstantPoolEntry,unsigned> > OtherCPs;
|
|
||||||
for (unsigned i = 0, e = CP.size(); i != e; ++i) {
|
|
||||||
MachineConstantPoolEntry CPE = CP[i];
|
|
||||||
const Constant *CV = CPE.Val;
|
|
||||||
const Type *Ty = CV->getType();
|
|
||||||
if (Ty->getTypeID() == Type::FloatTyID)
|
|
||||||
FloatCPs.push_back(std::make_pair(CPE, i));
|
|
||||||
else if (Ty->getTypeID() == Type::DoubleTyID)
|
|
||||||
DoubleCPs.push_back(std::make_pair(CPE, i));
|
|
||||||
else
|
|
||||||
OtherCPs.push_back(std::make_pair(CPE, i));
|
|
||||||
}
|
|
||||||
EmitConstantPool(MCP, FloatCPs, "\t.literal4");
|
|
||||||
EmitConstantPool(MCP, DoubleCPs, "\t.literal8");
|
|
||||||
EmitConstantPool(MCP, OtherCPs, ConstantPoolSection);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
X86SharedAsmPrinter::EmitConstantPool(MachineConstantPool *MCP,
|
|
||||||
std::vector<std::pair<MachineConstantPoolEntry,unsigned> > &CP,
|
|
||||||
const char *Section) {
|
|
||||||
if (CP.empty()) return;
|
|
||||||
|
|
||||||
SwitchToDataSection(Section, 0);
|
|
||||||
EmitAlignment(MCP->getConstantPoolAlignment());
|
|
||||||
for (unsigned i = 0, e = CP.size(); i != e; ++i) {
|
|
||||||
O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << '_'
|
|
||||||
<< CP[i].second << ":\t\t\t\t\t" << CommentString << " ";
|
|
||||||
WriteTypeSymbolic(O, CP[i].first.Val->getType(), 0) << '\n';
|
|
||||||
EmitGlobalConstant(CP[i].first.Val);
|
|
||||||
if (i != e-1) {
|
|
||||||
unsigned EntSize =
|
|
||||||
TM.getTargetData()->getTypeSize(CP[i].first.Val->getType());
|
|
||||||
unsigned ValEnd = CP[i].first.Offset + EntSize;
|
|
||||||
// Emit inter-object padding for alignment.
|
|
||||||
EmitZeros(CP[i+1].first.Offset-ValEnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// createX86CodePrinterPass - Returns a pass that prints the X86 assembly code
|
/// createX86CodePrinterPass - Returns a pass that prints the X86 assembly code
|
||||||
/// for a MachineFunction to the given output stream, using the given target
|
/// for a MachineFunction to the given output stream, using the given target
|
||||||
/// machine description.
|
/// machine description.
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include "X86TargetMachine.h"
|
#include "X86TargetMachine.h"
|
||||||
#include "llvm/CodeGen/AsmPrinter.h"
|
#include "llvm/CodeGen/AsmPrinter.h"
|
||||||
#include "llvm/CodeGen/DwarfWriter.h"
|
#include "llvm/CodeGen/DwarfWriter.h"
|
||||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
|
||||||
#include "llvm/CodeGen/MachineDebugInfo.h"
|
#include "llvm/CodeGen/MachineDebugInfo.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
@ -93,11 +92,6 @@ struct X86SharedAsmPrinter : public AsmPrinter {
|
|||||||
MI->getOperand(Op+3).isGlobalAddress() ||
|
MI->getOperand(Op+3).isGlobalAddress() ||
|
||||||
MI->getOperand(Op+3).isConstantPoolIndex());
|
MI->getOperand(Op+3).isConstantPoolIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void EmitConstantPool(MachineConstantPool *MCP);
|
|
||||||
void EmitConstantPool(MachineConstantPool *MCP,
|
|
||||||
std::vector<std::pair<MachineConstantPoolEntry, unsigned> > &CP,
|
|
||||||
const char *Section);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
Loading…
Reference in New Issue
Block a user