mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-28 07:17:32 +00:00
Construct the MCStreamer before constructing the MCTargetStreamer.
This has a few advantages: * Only targets that use a MCTargetStreamer have to worry about it. * There is never a MCTargetStreamer without a MCStreamer, so we can use a reference. * A MCTargetStreamer can talk to the MCStreamer in its constructor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200129 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -29,15 +29,14 @@ class raw_ostream;
|
|||||||
|
|
||||||
class MCELFStreamer : public MCObjectStreamer {
|
class MCELFStreamer : public MCObjectStreamer {
|
||||||
public:
|
public:
|
||||||
MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
MCELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter)
|
MCCodeEmitter *Emitter)
|
||||||
: MCObjectStreamer(Context, TargetStreamer, TAB, OS, Emitter),
|
: MCObjectStreamer(Context, TAB, OS, Emitter),
|
||||||
SeenIdent(false) {}
|
SeenIdent(false) {}
|
||||||
|
|
||||||
MCELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
MCELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter, MCAssembler *Assembler)
|
||||||
MCAssembler *Assembler)
|
: MCObjectStreamer(Context, TAB, OS, Emitter, Assembler),
|
||||||
: MCObjectStreamer(Context, TargetStreamer, TAB, OS, Emitter, Assembler),
|
|
||||||
SeenIdent(false) {}
|
SeenIdent(false) {}
|
||||||
|
|
||||||
virtual ~MCELFStreamer();
|
virtual ~MCELFStreamer();
|
||||||
|
@@ -40,12 +40,10 @@ class MCObjectStreamer : public MCStreamer {
|
|||||||
virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame);
|
virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MCObjectStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &_OS,
|
||||||
MCAsmBackend &TAB, raw_ostream &_OS,
|
|
||||||
MCCodeEmitter *_Emitter);
|
MCCodeEmitter *_Emitter);
|
||||||
MCObjectStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &_OS,
|
||||||
MCAsmBackend &TAB, raw_ostream &_OS, MCCodeEmitter *_Emitter,
|
MCCodeEmitter *_Emitter, MCAssembler *_Assembler);
|
||||||
MCAssembler *_Assembler);
|
|
||||||
~MCObjectStreamer();
|
~MCObjectStreamer();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@@ -67,11 +67,11 @@ typedef std::pair<const MCSection *, const MCExpr *> MCSectionSubPair;
|
|||||||
/// be treated differently. Callers should always talk to a FooTargetStreamer.
|
/// be treated differently. Callers should always talk to a FooTargetStreamer.
|
||||||
class MCTargetStreamer {
|
class MCTargetStreamer {
|
||||||
protected:
|
protected:
|
||||||
MCStreamer *Streamer;
|
MCStreamer &Streamer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
MCTargetStreamer(MCStreamer &S);
|
||||||
virtual ~MCTargetStreamer();
|
virtual ~MCTargetStreamer();
|
||||||
void setStreamer(MCStreamer *S) { Streamer = S; }
|
|
||||||
|
|
||||||
// Allow a target to add behavior to the EmitLabel of MCStreamer.
|
// Allow a target to add behavior to the EmitLabel of MCStreamer.
|
||||||
virtual void emitLabel(MCSymbol *Symbol);
|
virtual void emitLabel(MCSymbol *Symbol);
|
||||||
@@ -82,6 +82,8 @@ public:
|
|||||||
class ARMTargetStreamer : public MCTargetStreamer {
|
class ARMTargetStreamer : public MCTargetStreamer {
|
||||||
virtual void anchor();
|
virtual void anchor();
|
||||||
public:
|
public:
|
||||||
|
ARMTargetStreamer(MCStreamer &S);
|
||||||
|
|
||||||
virtual void emitFnStart() = 0;
|
virtual void emitFnStart() = 0;
|
||||||
virtual void emitFnEnd() = 0;
|
virtual void emitFnEnd() = 0;
|
||||||
virtual void emitCantUnwind() = 0;
|
virtual void emitCantUnwind() = 0;
|
||||||
@@ -147,7 +149,7 @@ class MCStreamer {
|
|||||||
SmallVector<std::pair<MCSectionSubPair, MCSectionSubPair>, 4> SectionStack;
|
SmallVector<std::pair<MCSectionSubPair, MCSectionSubPair>, 4> SectionStack;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MCStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer);
|
MCStreamer(MCContext &Ctx);
|
||||||
|
|
||||||
const MCExpr *BuildSymbolDiff(MCContext &Context, const MCSymbol *A,
|
const MCExpr *BuildSymbolDiff(MCContext &Context, const MCSymbol *A,
|
||||||
const MCSymbol *B);
|
const MCSymbol *B);
|
||||||
@@ -170,6 +172,10 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual ~MCStreamer();
|
virtual ~MCStreamer();
|
||||||
|
|
||||||
|
void setTargetStreamer(MCTargetStreamer *TS) {
|
||||||
|
TargetStreamer.reset(TS);
|
||||||
|
}
|
||||||
|
|
||||||
/// State management
|
/// State management
|
||||||
///
|
///
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
@@ -708,9 +714,9 @@ MCStreamer *createNullStreamer(MCContext &Ctx);
|
|||||||
///
|
///
|
||||||
/// \param ShowInst - Whether to show the MCInst representation inline with
|
/// \param ShowInst - Whether to show the MCInst representation inline with
|
||||||
/// the assembly.
|
/// the assembly.
|
||||||
MCStreamer *createAsmStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer,
|
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
||||||
formatted_raw_ostream &OS, bool isVerboseAsm,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useLoc, bool useCFI, bool useDwarfDirectory,
|
bool useDwarfDirectory,
|
||||||
MCInstPrinter *InstPrint = 0,
|
MCInstPrinter *InstPrint = 0,
|
||||||
MCCodeEmitter *CE = 0, MCAsmBackend *TAB = 0,
|
MCCodeEmitter *CE = 0, MCAsmBackend *TAB = 0,
|
||||||
bool ShowInst = false);
|
bool ShowInst = false);
|
||||||
@@ -733,9 +739,8 @@ MCStreamer *createWinCOFFStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
|||||||
|
|
||||||
/// createELFStreamer - Create a machine code streamer which will generate
|
/// createELFStreamer - Create a machine code streamer which will generate
|
||||||
/// ELF format object files.
|
/// ELF format object files.
|
||||||
MCStreamer *createELFStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer,
|
MCStreamer *createELFStreamer(MCContext &Ctx, MCAsmBackend &TAB,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
raw_ostream &OS, MCCodeEmitter *CE, bool RelaxAll,
|
||||||
MCCodeEmitter *CE, bool RelaxAll,
|
|
||||||
bool NoExecStack);
|
bool NoExecStack);
|
||||||
|
|
||||||
/// createPureStreamer - Create a machine code streamer which will generate
|
/// createPureStreamer - Create a machine code streamer which will generate
|
||||||
|
@@ -46,13 +46,11 @@ namespace llvm {
|
|||||||
class MCRelocationInfo;
|
class MCRelocationInfo;
|
||||||
class MCTargetAsmParser;
|
class MCTargetAsmParser;
|
||||||
class TargetMachine;
|
class TargetMachine;
|
||||||
class MCTargetStreamer;
|
|
||||||
class TargetOptions;
|
class TargetOptions;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
class formatted_raw_ostream;
|
class formatted_raw_ostream;
|
||||||
|
|
||||||
MCStreamer *createAsmStreamer(MCContext &Ctx,
|
MCStreamer *createAsmStreamer(MCContext &Ctx,
|
||||||
MCTargetStreamer *TargetStreamer,
|
|
||||||
formatted_raw_ostream &OS, bool isVerboseAsm,
|
formatted_raw_ostream &OS, bool isVerboseAsm,
|
||||||
bool useLoc, bool useCFI,
|
bool useLoc, bool useCFI,
|
||||||
bool useDwarfDirectory,
|
bool useDwarfDirectory,
|
||||||
@@ -443,7 +441,7 @@ namespace llvm {
|
|||||||
return AsmStreamerCtorFn(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
return AsmStreamerCtorFn(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
useDwarfDirectory, InstPrint, CE, TAB,
|
||||||
ShowInst);
|
ShowInst);
|
||||||
return llvm::createAsmStreamer(Ctx, 0, OS, isVerboseAsm, useLoc, useCFI,
|
return llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
useDwarfDirectory, InstPrint, CE, TAB,
|
||||||
ShowInst);
|
ShowInst);
|
||||||
}
|
}
|
||||||
|
@@ -623,7 +623,7 @@ namespace {
|
|||||||
return Symbols.end();
|
return Symbols.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordStreamer(MCContext &Context) : MCStreamer(Context, 0) {}
|
RecordStreamer(MCContext &Context) : MCStreamer(Context) {}
|
||||||
|
|
||||||
virtual void EmitInstruction(const MCInst &Inst) {
|
virtual void EmitInstruction(const MCInst &Inst) {
|
||||||
// Scan for values.
|
// Scan for values.
|
||||||
|
@@ -66,11 +66,11 @@ private:
|
|||||||
virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame);
|
virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MCAsmStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os,
|
||||||
formatted_raw_ostream &os, bool isVerboseAsm, bool useLoc,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useCFI, bool useDwarfDirectory, MCInstPrinter *printer,
|
bool useDwarfDirectory, MCInstPrinter *printer,
|
||||||
MCCodeEmitter *emitter, MCAsmBackend *asmbackend, bool showInst)
|
MCCodeEmitter *emitter, MCAsmBackend *asmbackend, bool showInst)
|
||||||
: MCStreamer(Context, TargetStreamer), OS(os), MAI(Context.getAsmInfo()),
|
: MCStreamer(Context), OS(os), MAI(Context.getAsmInfo()),
|
||||||
InstPrinter(printer), Emitter(emitter), AsmBackend(asmbackend),
|
InstPrinter(printer), Emitter(emitter), AsmBackend(asmbackend),
|
||||||
CommentStream(CommentToEmit), IsVerboseAsm(isVerboseAsm),
|
CommentStream(CommentToEmit), IsVerboseAsm(isVerboseAsm),
|
||||||
ShowInst(showInst), UseLoc(useLoc), UseCFI(useCFI),
|
ShowInst(showInst), UseLoc(useLoc), UseCFI(useCFI),
|
||||||
@@ -1381,12 +1381,11 @@ void MCAsmStreamer::FinishImpl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MCStreamer *llvm::createAsmStreamer(MCContext &Context,
|
MCStreamer *llvm::createAsmStreamer(MCContext &Context,
|
||||||
MCTargetStreamer *TargetStreamer,
|
|
||||||
formatted_raw_ostream &OS,
|
formatted_raw_ostream &OS,
|
||||||
bool isVerboseAsm, bool useLoc, bool useCFI,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useDwarfDirectory, MCInstPrinter *IP,
|
bool useDwarfDirectory, MCInstPrinter *IP,
|
||||||
MCCodeEmitter *CE, MCAsmBackend *MAB,
|
MCCodeEmitter *CE, MCAsmBackend *MAB,
|
||||||
bool ShowInst) {
|
bool ShowInst) {
|
||||||
return new MCAsmStreamer(Context, TargetStreamer, OS, isVerboseAsm, useLoc,
|
return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc,
|
||||||
useCFI, useDwarfDirectory, IP, CE, MAB, ShowInst);
|
useCFI, useDwarfDirectory, IP, CE, MAB, ShowInst);
|
||||||
}
|
}
|
||||||
|
@@ -543,12 +543,10 @@ void MCELFStreamer::FinishImpl() {
|
|||||||
this->MCObjectStreamer::FinishImpl();
|
this->MCObjectStreamer::FinishImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
MCStreamer *llvm::createELFStreamer(MCContext &Context,
|
MCStreamer *llvm::createELFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
||||||
MCTargetStreamer *Streamer,
|
raw_ostream &OS, MCCodeEmitter *CE,
|
||||||
MCAsmBackend &MAB, raw_ostream &OS,
|
bool RelaxAll, bool NoExecStack) {
|
||||||
MCCodeEmitter *CE, bool RelaxAll,
|
MCELFStreamer *S = new MCELFStreamer(Context, MAB, OS, CE);
|
||||||
bool NoExecStack) {
|
|
||||||
MCELFStreamer *S = new MCELFStreamer(Context, Streamer, MAB, OS, CE);
|
|
||||||
if (RelaxAll)
|
if (RelaxAll)
|
||||||
S->getAssembler().setRelaxAll(true);
|
S->getAssembler().setRelaxAll(true);
|
||||||
if (NoExecStack)
|
if (NoExecStack)
|
||||||
|
@@ -38,7 +38,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
MCMachOStreamer(MCContext &Context, MCAsmBackend &MAB, raw_ostream &OS,
|
MCMachOStreamer(MCContext &Context, MCAsmBackend &MAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter)
|
MCCodeEmitter *Emitter)
|
||||||
: MCObjectStreamer(Context, 0, MAB, OS, Emitter) {}
|
: MCObjectStreamer(Context, MAB, OS, Emitter) {}
|
||||||
|
|
||||||
/// @name MCStreamer Interface
|
/// @name MCStreamer Interface
|
||||||
/// @{
|
/// @{
|
||||||
|
@@ -19,7 +19,7 @@ namespace {
|
|||||||
|
|
||||||
class MCNullStreamer : public MCStreamer {
|
class MCNullStreamer : public MCStreamer {
|
||||||
public:
|
public:
|
||||||
MCNullStreamer(MCContext &Context) : MCStreamer(Context, 0) {}
|
MCNullStreamer(MCContext &Context) : MCStreamer(Context) {}
|
||||||
|
|
||||||
/// @name MCStreamer Interface
|
/// @name MCStreamer Interface
|
||||||
/// @{
|
/// @{
|
||||||
|
@@ -22,22 +22,17 @@
|
|||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
MCObjectStreamer::MCObjectStreamer(MCContext &Context,
|
MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
MCTargetStreamer *TargetStreamer,
|
raw_ostream &OS, MCCodeEmitter *Emitter_)
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
: MCStreamer(Context),
|
||||||
MCCodeEmitter *Emitter_)
|
|
||||||
: MCStreamer(Context, TargetStreamer),
|
|
||||||
Assembler(new MCAssembler(Context, TAB, *Emitter_,
|
Assembler(new MCAssembler(Context, TAB, *Emitter_,
|
||||||
*TAB.createObjectWriter(OS), OS)),
|
*TAB.createObjectWriter(OS), OS)),
|
||||||
CurSectionData(0) {}
|
CurSectionData(0) {}
|
||||||
|
|
||||||
MCObjectStreamer::MCObjectStreamer(MCContext &Context,
|
MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
MCTargetStreamer *TargetStreamer,
|
raw_ostream &OS, MCCodeEmitter *Emitter_,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS,
|
|
||||||
MCCodeEmitter *Emitter_,
|
|
||||||
MCAssembler *_Assembler)
|
MCAssembler *_Assembler)
|
||||||
: MCStreamer(Context, TargetStreamer), Assembler(_Assembler),
|
: MCStreamer(Context), Assembler(_Assembler), CurSectionData(0) {}
|
||||||
CurSectionData(0) {}
|
|
||||||
|
|
||||||
MCObjectStreamer::~MCObjectStreamer() {
|
MCObjectStreamer::~MCObjectStreamer() {
|
||||||
delete &Assembler->getBackend();
|
delete &Assembler->getBackend();
|
||||||
|
@@ -29,7 +29,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
MCPureStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
MCPureStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter)
|
MCCodeEmitter *Emitter)
|
||||||
: MCObjectStreamer(Context, 0, TAB, OS, Emitter) {}
|
: MCObjectStreamer(Context, TAB, OS, Emitter) {}
|
||||||
|
|
||||||
/// @name MCStreamer Interface
|
/// @name MCStreamer Interface
|
||||||
/// @{
|
/// @{
|
||||||
|
@@ -25,14 +25,17 @@ using namespace llvm;
|
|||||||
|
|
||||||
// Pin the vtables to this file.
|
// Pin the vtables to this file.
|
||||||
MCTargetStreamer::~MCTargetStreamer() {}
|
MCTargetStreamer::~MCTargetStreamer() {}
|
||||||
|
|
||||||
|
MCTargetStreamer::MCTargetStreamer(MCStreamer &S) : Streamer(S) {
|
||||||
|
S.setTargetStreamer(this);
|
||||||
|
}
|
||||||
|
|
||||||
void MCTargetStreamer::emitLabel(MCSymbol *Symbol) {}
|
void MCTargetStreamer::emitLabel(MCSymbol *Symbol) {}
|
||||||
|
|
||||||
MCStreamer::MCStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer)
|
MCStreamer::MCStreamer(MCContext &Ctx)
|
||||||
: Context(Ctx), TargetStreamer(TargetStreamer), EmitEHFrame(true),
|
: Context(Ctx), EmitEHFrame(true), EmitDebugFrame(false),
|
||||||
EmitDebugFrame(false), CurrentW64UnwindInfo(0), LastSymbol(0) {
|
CurrentW64UnwindInfo(0), LastSymbol(0) {
|
||||||
SectionStack.push_back(std::pair<MCSectionSubPair, MCSectionSubPair>());
|
SectionStack.push_back(std::pair<MCSectionSubPair, MCSectionSubPair>());
|
||||||
if (TargetStreamer)
|
|
||||||
TargetStreamer->setStreamer(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MCStreamer::~MCStreamer() {
|
MCStreamer::~MCStreamer() {
|
||||||
|
@@ -99,7 +99,7 @@ private:
|
|||||||
|
|
||||||
WinCOFFStreamer::WinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
WinCOFFStreamer::WinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
|
||||||
MCCodeEmitter &CE, raw_ostream &OS)
|
MCCodeEmitter &CE, raw_ostream &OS)
|
||||||
: MCObjectStreamer(Context, 0, MAB, OS, &CE), CurSymbol(NULL) {}
|
: MCObjectStreamer(Context, MAB, OS, &CE), CurSymbol(NULL) {}
|
||||||
|
|
||||||
void WinCOFFStreamer::AddCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
void WinCOFFStreamer::AddCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||||
unsigned ByteAlignment, bool External) {
|
unsigned ByteAlignment, bool External) {
|
||||||
|
@@ -57,7 +57,7 @@ class AArch64ELFStreamer : public MCELFStreamer {
|
|||||||
public:
|
public:
|
||||||
AArch64ELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
AArch64ELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCCodeEmitter *Emitter)
|
MCCodeEmitter *Emitter)
|
||||||
: MCELFStreamer(Context, 0, TAB, OS, Emitter), MappingSymbolCounter(0),
|
: MCELFStreamer(Context, TAB, OS, Emitter), MappingSymbolCounter(0),
|
||||||
LastEMS(EMS_None) {}
|
LastEMS(EMS_None) {}
|
||||||
|
|
||||||
~AArch64ELFStreamer() {}
|
~AArch64ELFStreamer() {}
|
||||||
|
@@ -105,6 +105,7 @@ static unsigned GetArchDefaultCPUArch(unsigned ID) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ARMTargetStreamer::anchor() {}
|
void ARMTargetStreamer::anchor() {}
|
||||||
|
ARMTargetStreamer::ARMTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@@ -139,14 +140,16 @@ class ARMTargetAsmStreamer : public ARMTargetStreamer {
|
|||||||
virtual void finishAttributeSection();
|
virtual void finishAttributeSection();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ARMTargetAsmStreamer(formatted_raw_ostream &OS, MCInstPrinter &InstPrinter,
|
ARMTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS,
|
||||||
bool VerboseAsm);
|
MCInstPrinter &InstPrinter, bool VerboseAsm);
|
||||||
};
|
};
|
||||||
|
|
||||||
ARMTargetAsmStreamer::ARMTargetAsmStreamer(formatted_raw_ostream &OS,
|
ARMTargetAsmStreamer::ARMTargetAsmStreamer(MCStreamer &S,
|
||||||
|
formatted_raw_ostream &OS,
|
||||||
MCInstPrinter &InstPrinter,
|
MCInstPrinter &InstPrinter,
|
||||||
bool VerboseAsm)
|
bool VerboseAsm)
|
||||||
: OS(OS), InstPrinter(InstPrinter), IsVerboseAsm(VerboseAsm) {}
|
: ARMTargetStreamer(S), OS(OS), InstPrinter(InstPrinter),
|
||||||
|
IsVerboseAsm(VerboseAsm) {}
|
||||||
void ARMTargetAsmStreamer::emitFnStart() { OS << "\t.fnstart\n"; }
|
void ARMTargetAsmStreamer::emitFnStart() { OS << "\t.fnstart\n"; }
|
||||||
void ARMTargetAsmStreamer::emitFnEnd() { OS << "\t.fnend\n"; }
|
void ARMTargetAsmStreamer::emitFnEnd() { OS << "\t.fnend\n"; }
|
||||||
void ARMTargetAsmStreamer::emitCantUnwind() { OS << "\t.cantunwind\n"; }
|
void ARMTargetAsmStreamer::emitCantUnwind() { OS << "\t.cantunwind\n"; }
|
||||||
@@ -397,10 +400,9 @@ private:
|
|||||||
size_t calculateContentSize() const;
|
size_t calculateContentSize() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ARMTargetELFStreamer()
|
ARMTargetELFStreamer(MCStreamer &S)
|
||||||
: ARMTargetStreamer(), CurrentVendor("aeabi"), FPU(ARM::INVALID_FPU),
|
: ARMTargetStreamer(S), CurrentVendor("aeabi"), FPU(ARM::INVALID_FPU),
|
||||||
Arch(ARM::INVALID_ARCH), AttributeSection(0) {
|
Arch(ARM::INVALID_ARCH), AttributeSection(0) {}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Extend the generic ELFStreamer class so that it can emit mapping symbols at
|
/// Extend the generic ELFStreamer class so that it can emit mapping symbols at
|
||||||
@@ -419,11 +421,10 @@ class ARMELFStreamer : public MCELFStreamer {
|
|||||||
public:
|
public:
|
||||||
friend class ARMTargetELFStreamer;
|
friend class ARMTargetELFStreamer;
|
||||||
|
|
||||||
ARMELFStreamer(MCContext &Context, MCTargetStreamer *TargetStreamer,
|
ARMELFStreamer(MCContext &Context, MCAsmBackend &TAB, raw_ostream &OS,
|
||||||
MCAsmBackend &TAB, raw_ostream &OS, MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter, bool IsThumb)
|
||||||
bool IsThumb)
|
: MCELFStreamer(Context, TAB, OS, Emitter), IsThumb(IsThumb),
|
||||||
: MCELFStreamer(Context, TargetStreamer, TAB, OS, Emitter),
|
MappingSymbolCounter(0), LastEMS(EMS_None) {
|
||||||
IsThumb(IsThumb), MappingSymbolCounter(0), LastEMS(EMS_None) {
|
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,8 +628,7 @@ private:
|
|||||||
} // end anonymous namespace
|
} // end anonymous namespace
|
||||||
|
|
||||||
ARMELFStreamer &ARMTargetELFStreamer::getStreamer() {
|
ARMELFStreamer &ARMTargetELFStreamer::getStreamer() {
|
||||||
ARMELFStreamer *S = static_cast<ARMELFStreamer *>(Streamer);
|
return static_cast<ARMELFStreamer &>(Streamer);
|
||||||
return *S;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMTargetELFStreamer::emitFnStart() { getStreamer().emitFnStart(); }
|
void ARMTargetELFStreamer::emitFnStart() { getStreamer().emitFnStart(); }
|
||||||
@@ -1237,21 +1237,19 @@ MCStreamer *createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
|||||||
bool useDwarfDirectory,
|
bool useDwarfDirectory,
|
||||||
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
MCInstPrinter *InstPrint, MCCodeEmitter *CE,
|
||||||
MCAsmBackend *TAB, bool ShowInst) {
|
MCAsmBackend *TAB, bool ShowInst) {
|
||||||
ARMTargetAsmStreamer *S = new ARMTargetAsmStreamer(OS, *InstPrint,
|
MCStreamer *S =
|
||||||
isVerboseAsm);
|
llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
|
useDwarfDirectory, InstPrint, CE, TAB, ShowInst);
|
||||||
return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI,
|
new ARMTargetAsmStreamer(*S, OS, *InstPrint, isVerboseAsm);
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
return S;
|
||||||
ShowInst);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MCELFStreamer* createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
MCELFStreamer* createARMELFStreamer(MCContext &Context, MCAsmBackend &TAB,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll, bool NoExecStack,
|
bool RelaxAll, bool NoExecStack,
|
||||||
bool IsThumb) {
|
bool IsThumb) {
|
||||||
ARMTargetELFStreamer *TS = new ARMTargetELFStreamer();
|
ARMELFStreamer *S = new ARMELFStreamer(Context, TAB, OS, Emitter, IsThumb);
|
||||||
ARMELFStreamer *S =
|
new ARMTargetELFStreamer(*S);
|
||||||
new ARMELFStreamer(Context, TS, TAB, OS, Emitter, IsThumb);
|
|
||||||
// FIXME: This should eventually end up somewhere else where more
|
// FIXME: This should eventually end up somewhere else where more
|
||||||
// intelligent flag decisions can be made. For now we are just maintaining
|
// intelligent flag decisions can be made. For now we are just maintaining
|
||||||
// the status quo for ARM and setting EF_ARM_EABI_VER5 as the default.
|
// the status quo for ARM and setting EF_ARM_EABI_VER5 as the default.
|
||||||
|
@@ -131,8 +131,10 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
|||||||
MCContext &Context, MCAsmBackend &MAB,
|
MCContext &Context, MCAsmBackend &MAB,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll, bool NoExecStack) {
|
bool RelaxAll, bool NoExecStack) {
|
||||||
MipsTargetELFStreamer *S = new MipsTargetELFStreamer();
|
MCStreamer *S =
|
||||||
return createELFStreamer(Context, S, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
createELFStreamer(Context, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||||
|
new MipsTargetELFStreamer(*S);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *
|
static MCStreamer *
|
||||||
@@ -140,11 +142,11 @@ createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
|||||||
bool isVerboseAsm, bool useLoc, bool useCFI,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
||||||
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
||||||
MipsTargetAsmStreamer *S = new MipsTargetAsmStreamer(OS);
|
MCStreamer *S =
|
||||||
|
llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI,
|
useDwarfDirectory, InstPrint, CE, TAB, ShowInst);
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
new MipsTargetAsmStreamer(*S, OS);
|
||||||
ShowInst);
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMInitializeMipsTargetMC() {
|
extern "C" void LLVMInitializeMipsTargetMC() {
|
||||||
|
@@ -27,8 +27,11 @@ static cl::opt<bool> PrintHackDirectives("print-hack-directives",
|
|||||||
// Pin vtable to this file.
|
// Pin vtable to this file.
|
||||||
void MipsTargetStreamer::anchor() {}
|
void MipsTargetStreamer::anchor() {}
|
||||||
|
|
||||||
MipsTargetAsmStreamer::MipsTargetAsmStreamer(formatted_raw_ostream &OS)
|
MipsTargetStreamer::MipsTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
||||||
: OS(OS) {}
|
|
||||||
|
MipsTargetAsmStreamer::MipsTargetAsmStreamer(MCStreamer &S,
|
||||||
|
formatted_raw_ostream &OS)
|
||||||
|
: MipsTargetStreamer(S), OS(OS) {}
|
||||||
|
|
||||||
void MipsTargetAsmStreamer::emitMipsHackELFFlags(unsigned Flags) {
|
void MipsTargetAsmStreamer::emitMipsHackELFFlags(unsigned Flags) {
|
||||||
if (!PrintHackDirectives)
|
if (!PrintHackDirectives)
|
||||||
@@ -93,7 +96,8 @@ void MipsTargetAsmStreamer::emitDirectiveOptionPic0() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This part is for ELF object output.
|
// This part is for ELF object output.
|
||||||
MipsTargetELFStreamer::MipsTargetELFStreamer() : MicroMipsEnabled(false) {}
|
MipsTargetELFStreamer::MipsTargetELFStreamer(MCStreamer &S)
|
||||||
|
: MipsTargetStreamer(S), MicroMipsEnabled(false) {}
|
||||||
|
|
||||||
void MipsTargetELFStreamer::emitLabel(MCSymbol *Symbol) {
|
void MipsTargetELFStreamer::emitLabel(MCSymbol *Symbol) {
|
||||||
if (!isMicroMipsEnabled())
|
if (!isMicroMipsEnabled())
|
||||||
@@ -110,7 +114,7 @@ void MipsTargetELFStreamer::emitLabel(MCSymbol *Symbol) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MCELFStreamer &MipsTargetELFStreamer::getStreamer() {
|
MCELFStreamer &MipsTargetELFStreamer::getStreamer() {
|
||||||
return static_cast<MCELFStreamer &>(*Streamer);
|
return static_cast<MCELFStreamer &>(Streamer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MipsTargetELFStreamer::emitMipsHackELFFlags(unsigned Flags) {
|
void MipsTargetELFStreamer::emitMipsHackELFFlags(unsigned Flags) {
|
||||||
|
@@ -18,6 +18,7 @@ class MipsTargetStreamer : public MCTargetStreamer {
|
|||||||
virtual void anchor();
|
virtual void anchor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
MipsTargetStreamer(MCStreamer &S);
|
||||||
virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
|
virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
|
||||||
virtual void emitDirectiveSetMicroMips() = 0;
|
virtual void emitDirectiveSetMicroMips() = 0;
|
||||||
virtual void emitDirectiveSetNoMicroMips() = 0;
|
virtual void emitDirectiveSetNoMicroMips() = 0;
|
||||||
@@ -42,7 +43,7 @@ class MipsTargetAsmStreamer : public MipsTargetStreamer {
|
|||||||
formatted_raw_ostream &OS;
|
formatted_raw_ostream &OS;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MipsTargetAsmStreamer(formatted_raw_ostream &OS);
|
MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
|
||||||
virtual void emitMipsHackELFFlags(unsigned Flags);
|
virtual void emitMipsHackELFFlags(unsigned Flags);
|
||||||
virtual void emitDirectiveSetMicroMips();
|
virtual void emitDirectiveSetMicroMips();
|
||||||
virtual void emitDirectiveSetNoMicroMips();
|
virtual void emitDirectiveSetNoMicroMips();
|
||||||
@@ -69,7 +70,7 @@ class MipsTargetELFStreamer : public MipsTargetStreamer {
|
|||||||
public:
|
public:
|
||||||
bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
|
bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
|
||||||
MCELFStreamer &getStreamer();
|
MCELFStreamer &getStreamer();
|
||||||
MipsTargetELFStreamer();
|
MipsTargetELFStreamer(MCStreamer &S);
|
||||||
|
|
||||||
virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
|
virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
|
||||||
|
|
||||||
|
@@ -39,6 +39,7 @@ using namespace llvm;
|
|||||||
|
|
||||||
// Pin the vtable to this file.
|
// Pin the vtable to this file.
|
||||||
PPCTargetStreamer::~PPCTargetStreamer() {}
|
PPCTargetStreamer::~PPCTargetStreamer() {}
|
||||||
|
PPCTargetStreamer::PPCTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
||||||
|
|
||||||
static MCInstrInfo *createPPCMCInstrInfo() {
|
static MCInstrInfo *createPPCMCInstrInfo() {
|
||||||
MCInstrInfo *X = new MCInstrInfo();
|
MCInstrInfo *X = new MCInstrInfo();
|
||||||
@@ -112,7 +113,8 @@ class PPCTargetAsmStreamer : public PPCTargetStreamer {
|
|||||||
formatted_raw_ostream &OS;
|
formatted_raw_ostream &OS;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PPCTargetAsmStreamer(formatted_raw_ostream &OS) : OS(OS) {}
|
PPCTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
|
||||||
|
: PPCTargetStreamer(S), OS(OS) {}
|
||||||
virtual void emitTCEntry(const MCSymbol &S) {
|
virtual void emitTCEntry(const MCSymbol &S) {
|
||||||
OS << "\t.tc ";
|
OS << "\t.tc ";
|
||||||
OS << S.getName();
|
OS << S.getName();
|
||||||
@@ -126,9 +128,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class PPCTargetELFStreamer : public PPCTargetStreamer {
|
class PPCTargetELFStreamer : public PPCTargetStreamer {
|
||||||
|
public:
|
||||||
|
PPCTargetELFStreamer(MCStreamer &S) : PPCTargetStreamer(S) {}
|
||||||
virtual void emitTCEntry(const MCSymbol &S) {
|
virtual void emitTCEntry(const MCSymbol &S) {
|
||||||
// Creates a R_PPC64_TOC relocation
|
// Creates a R_PPC64_TOC relocation
|
||||||
Streamer->EmitSymbolValue(&S, 8);
|
Streamer.EmitSymbolValue(&S, 8);
|
||||||
}
|
}
|
||||||
virtual void emitMachine(StringRef CPU) {
|
virtual void emitMachine(StringRef CPU) {
|
||||||
// FIXME: Is there anything to do in here or does this directive only
|
// FIXME: Is there anything to do in here or does this directive only
|
||||||
@@ -147,8 +151,10 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
|||||||
if (Triple(TT).isOSDarwin())
|
if (Triple(TT).isOSDarwin())
|
||||||
return createMachOStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
return createMachOStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
|
||||||
|
|
||||||
PPCTargetStreamer *S = new PPCTargetELFStreamer();
|
MCStreamer *S =
|
||||||
return createELFStreamer(Ctx, S, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||||
|
new PPCTargetELFStreamer(*S);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *
|
static MCStreamer *
|
||||||
@@ -156,11 +162,12 @@ createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
|||||||
bool isVerboseAsm, bool useLoc, bool useCFI,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
||||||
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
||||||
PPCTargetStreamer *S = new PPCTargetAsmStreamer(OS);
|
|
||||||
|
|
||||||
return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI,
|
MCStreamer *S =
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
ShowInst);
|
useDwarfDirectory, InstPrint, CE, TAB, ShowInst);
|
||||||
|
new PPCTargetAsmStreamer(*S, OS);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCInstPrinter *createPPCMCInstPrinter(const Target &T,
|
static MCInstPrinter *createPPCMCInstPrinter(const Target &T,
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
namespace llvm {
|
namespace llvm {
|
||||||
class PPCTargetStreamer : public MCTargetStreamer {
|
class PPCTargetStreamer : public MCTargetStreamer {
|
||||||
public:
|
public:
|
||||||
|
PPCTargetStreamer(MCStreamer &S);
|
||||||
virtual ~PPCTargetStreamer();
|
virtual ~PPCTargetStreamer();
|
||||||
virtual void emitTCEntry(const MCSymbol &S) = 0;
|
virtual void emitTCEntry(const MCSymbol &S) = 0;
|
||||||
virtual void emitMachine(StringRef CPU) = 0;
|
virtual void emitMachine(StringRef CPU) = 0;
|
||||||
|
@@ -88,7 +88,7 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
|||||||
MCCodeEmitter *_Emitter,
|
MCCodeEmitter *_Emitter,
|
||||||
bool RelaxAll,
|
bool RelaxAll,
|
||||||
bool NoExecStack) {
|
bool NoExecStack) {
|
||||||
return createELFStreamer(Ctx, 0, MAB, _OS, _Emitter, false, false);
|
return createELFStreamer(Ctx, MAB, _OS, _Emitter, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMInitializeR600TargetMC() {
|
extern "C" void LLVMInitializeR600TargetMC() {
|
||||||
|
@@ -105,8 +105,10 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
|||||||
MCContext &Context, MCAsmBackend &MAB,
|
MCContext &Context, MCAsmBackend &MAB,
|
||||||
raw_ostream &OS, MCCodeEmitter *Emitter,
|
raw_ostream &OS, MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll, bool NoExecStack) {
|
bool RelaxAll, bool NoExecStack) {
|
||||||
SparcTargetELFStreamer *S = new SparcTargetELFStreamer();
|
MCStreamer *S =
|
||||||
return createELFStreamer(Context, S, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
createELFStreamer(Context, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||||
|
new SparcTargetELFStreamer(*S);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCStreamer *
|
static MCStreamer *
|
||||||
@@ -114,11 +116,12 @@ createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
|||||||
bool isVerboseAsm, bool useLoc, bool useCFI,
|
bool isVerboseAsm, bool useLoc, bool useCFI,
|
||||||
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
bool useDwarfDirectory, MCInstPrinter *InstPrint,
|
||||||
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) {
|
||||||
SparcTargetAsmStreamer *S = new SparcTargetAsmStreamer(OS);
|
|
||||||
|
|
||||||
return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI,
|
MCStreamer *S =
|
||||||
useDwarfDirectory, InstPrint, CE, TAB,
|
llvm::createAsmStreamer(Ctx, OS, isVerboseAsm, useLoc, useCFI,
|
||||||
ShowInst);
|
useDwarfDirectory, InstPrint, CE, TAB, ShowInst);
|
||||||
|
new SparcTargetAsmStreamer(*S, OS);
|
||||||
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCInstPrinter *createSparcMCInstPrinter(const Target &T,
|
static MCInstPrinter *createSparcMCInstPrinter(const Target &T,
|
||||||
|
@@ -18,10 +18,13 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
// pin vtable to this file
|
// pin vtable to this file
|
||||||
|
SparcTargetStreamer::SparcTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
|
||||||
|
|
||||||
void SparcTargetStreamer::anchor() {}
|
void SparcTargetStreamer::anchor() {}
|
||||||
|
|
||||||
SparcTargetAsmStreamer::SparcTargetAsmStreamer(formatted_raw_ostream &OS)
|
SparcTargetAsmStreamer::SparcTargetAsmStreamer(MCStreamer &S,
|
||||||
: OS(OS) {}
|
formatted_raw_ostream &OS)
|
||||||
|
: SparcTargetStreamer(S), OS(OS) {}
|
||||||
|
|
||||||
void SparcTargetAsmStreamer::emitSparcRegisterIgnore(unsigned reg) {
|
void SparcTargetAsmStreamer::emitSparcRegisterIgnore(unsigned reg) {
|
||||||
OS << "\t.register "
|
OS << "\t.register "
|
||||||
@@ -35,6 +38,9 @@ void SparcTargetAsmStreamer::emitSparcRegisterScratch(unsigned reg) {
|
|||||||
<< ", #scratch\n";
|
<< ", #scratch\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SparcTargetELFStreamer::SparcTargetELFStreamer(MCStreamer &S)
|
||||||
|
: SparcTargetStreamer(S) {}
|
||||||
|
|
||||||
MCELFStreamer &SparcTargetELFStreamer::getStreamer() {
|
MCELFStreamer &SparcTargetELFStreamer::getStreamer() {
|
||||||
return static_cast<MCELFStreamer &>(*Streamer);
|
return static_cast<MCELFStreamer &>(Streamer);
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ class SparcTargetStreamer : public MCTargetStreamer {
|
|||||||
virtual void anchor();
|
virtual void anchor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
SparcTargetStreamer(MCStreamer &S);
|
||||||
/// Emit ".register <reg>, #ignore".
|
/// Emit ".register <reg>, #ignore".
|
||||||
virtual void emitSparcRegisterIgnore(unsigned reg) = 0;
|
virtual void emitSparcRegisterIgnore(unsigned reg) = 0;
|
||||||
/// Emit ".register <reg>, #scratch".
|
/// Emit ".register <reg>, #scratch".
|
||||||
@@ -29,7 +30,7 @@ class SparcTargetAsmStreamer : public SparcTargetStreamer {
|
|||||||
formatted_raw_ostream &OS;
|
formatted_raw_ostream &OS;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SparcTargetAsmStreamer(formatted_raw_ostream &OS);
|
SparcTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
|
||||||
virtual void emitSparcRegisterIgnore(unsigned reg);
|
virtual void emitSparcRegisterIgnore(unsigned reg);
|
||||||
virtual void emitSparcRegisterScratch(unsigned reg);
|
virtual void emitSparcRegisterScratch(unsigned reg);
|
||||||
|
|
||||||
@@ -38,6 +39,7 @@ public:
|
|||||||
// This part is for ELF object output
|
// This part is for ELF object output
|
||||||
class SparcTargetELFStreamer : public SparcTargetStreamer {
|
class SparcTargetELFStreamer : public SparcTargetStreamer {
|
||||||
public:
|
public:
|
||||||
|
SparcTargetELFStreamer(MCStreamer &S);
|
||||||
MCELFStreamer &getStreamer();
|
MCELFStreamer &getStreamer();
|
||||||
virtual void emitSparcRegisterIgnore(unsigned reg) {}
|
virtual void emitSparcRegisterIgnore(unsigned reg) {}
|
||||||
virtual void emitSparcRegisterScratch(unsigned reg) {}
|
virtual void emitSparcRegisterScratch(unsigned reg) {}
|
||||||
|
@@ -187,7 +187,7 @@ static MCStreamer *createSystemZMCObjectStreamer(const Target &T, StringRef TT,
|
|||||||
MCCodeEmitter *Emitter,
|
MCCodeEmitter *Emitter,
|
||||||
bool RelaxAll,
|
bool RelaxAll,
|
||||||
bool NoExecStack) {
|
bool NoExecStack) {
|
||||||
return createELFStreamer(Ctx, 0, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
return createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll, NoExecStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMInitializeSystemZTargetMC() {
|
extern "C" void LLVMInitializeSystemZTargetMC() {
|
||||||
|
@@ -371,7 +371,7 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
|||||||
if (TheTriple.isOSWindows() && TheTriple.getEnvironment() != Triple::ELF)
|
if (TheTriple.isOSWindows() && TheTriple.getEnvironment() != Triple::ELF)
|
||||||
return createWinCOFFStreamer(Ctx, MAB, *_Emitter, _OS, RelaxAll);
|
return createWinCOFFStreamer(Ctx, MAB, *_Emitter, _OS, RelaxAll);
|
||||||
|
|
||||||
return createELFStreamer(Ctx, 0, MAB, _OS, _Emitter, RelaxAll, NoExecStack);
|
return createELFStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll, NoExecStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MCInstPrinter *createX86MCInstPrinter(const Target &T,
|
static MCInstPrinter *createX86MCInstPrinter(const Target &T,
|
||||||
|
Reference in New Issue
Block a user