mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 21:50:40 +00:00
mcstreamerize gprel32 emission.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94452 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0988639963
commit
718fb59801
@ -188,6 +188,13 @@ namespace llvm {
|
||||
/// to pass in a MCExpr for constant integers.
|
||||
virtual void EmitIntValue(uint64_t Value, unsigned Size,unsigned AddrSpace);
|
||||
|
||||
/// EmitGPRel32Value - Emit the expression @param Value into the output as a
|
||||
/// gprel32 (32-bit GP relative) value.
|
||||
///
|
||||
/// This is used to implement assembler directives such as .gprel32 on
|
||||
/// targets that support them.
|
||||
virtual void EmitGPRel32Value(const MCExpr *Value) = 0;
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
/// FillValue. This implements directives such as '.space'.
|
||||
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
|
@ -544,8 +544,9 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
|
||||
const MachineBasicBlock *MBB,
|
||||
unsigned uid) const {
|
||||
// If the target supports GPRel, use it.
|
||||
if (const char *GPRel32Dir = MAI->getGPRel32Directive()) {
|
||||
O << GPRel32Dir << *GetMBBSymbol(MBB->getNumber()) << '\n';
|
||||
if (MAI->getGPRel32Directive() != 0) {
|
||||
MCSymbol *MBBSym = GetMBBSymbol(MBB->getNumber());
|
||||
OutStreamer.EmitGPRel32Value(MCSymbolRefExpr::Create(MBBSym, OutContext));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -110,6 +110,8 @@ public:
|
||||
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size,unsigned AddrSpace);
|
||||
virtual void EmitIntValue(uint64_t Value, unsigned Size, unsigned AddrSpace);
|
||||
virtual void EmitGPRel32Value(const MCExpr *Value);
|
||||
|
||||
|
||||
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
unsigned AddrSpace);
|
||||
@ -182,12 +184,6 @@ static inline int64_t truncateToSize(int64_t Value, unsigned Bytes) {
|
||||
return Value & ((uint64_t) (int64_t) -1 >> (64 - Bytes * 8));
|
||||
}
|
||||
|
||||
static inline const MCExpr *truncateToSize(const MCExpr *Value,
|
||||
unsigned Bytes) {
|
||||
// FIXME: Do we really need this routine?
|
||||
return Value;
|
||||
}
|
||||
|
||||
void MCAsmStreamer::SwitchSection(const MCSection *Section) {
|
||||
assert(Section && "Cannot switch to a null section!");
|
||||
if (Section != CurSection) {
|
||||
@ -425,10 +421,17 @@ void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size,
|
||||
}
|
||||
|
||||
assert(Directive && "Invalid size for machine code value!");
|
||||
OS << Directive << *truncateToSize(Value, Size);
|
||||
OS << Directive << *Value;
|
||||
EmitEOL();
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitGPRel32Value(const MCExpr *Value) {
|
||||
assert(MAI.getGPRel32Directive() != 0);
|
||||
OS << MAI.getGPRel32Directive() << *Value;
|
||||
EmitEOL();
|
||||
}
|
||||
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
/// FillValue. This implements directives such as '.space'.
|
||||
void MCAsmStreamer::EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
|
@ -46,13 +46,9 @@ class MCMachOStreamer : public MCStreamer {
|
||||
|
||||
private:
|
||||
MCAssembler Assembler;
|
||||
|
||||
MCCodeEmitter *Emitter;
|
||||
|
||||
MCSectionData *CurSectionData;
|
||||
|
||||
DenseMap<const MCSection*, MCSectionData*> SectionMap;
|
||||
|
||||
DenseMap<const MCSymbol*, MCSymbolData*> SymbolMap;
|
||||
|
||||
private:
|
||||
@ -134,6 +130,9 @@ public:
|
||||
unsigned Size = 0, unsigned ByteAlignment = 0);
|
||||
virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size,unsigned AddrSpace);
|
||||
virtual void EmitGPRel32Value(const MCExpr *Value) {
|
||||
assert(0 && "macho doesn't support this directive");
|
||||
}
|
||||
virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
|
||||
unsigned ValueSize = 1,
|
||||
unsigned MaxBytesToEmit = 0);
|
||||
|
@ -50,7 +50,7 @@ namespace {
|
||||
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size,
|
||||
unsigned AddrSpace) {}
|
||||
|
||||
virtual void EmitGPRel32Value(const MCExpr *Value) {}
|
||||
virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
|
||||
unsigned ValueSize = 1,
|
||||
unsigned MaxBytesToEmit = 0) {}
|
||||
|
Loading…
Reference in New Issue
Block a user