35 #define GET_INSTRINFO_MC_DESC
36 #include "PPCGenInstrInfo.inc"
38 #define GET_SUBTARGETINFO_MC_DESC
39 #include "PPCGenSubtargetInfo.inc"
41 #define GET_REGINFO_MC_DESC
42 #include "PPCGenRegisterInfo.inc"
50 InitPPCMCInstrInfo(X);
57 unsigned Flavour = isPPC64 ? 0 : 1;
58 unsigned RA = isPPC64 ? PPC::LR8 : PPC::LR;
61 InitPPCMCRegisterInfo(X, RA, Flavour, Flavour);
67 return createPPCMCSubtargetInfoImpl(TT, CPU, FS);
82 unsigned Reg = isPPC64 ? PPC::X1 : PPC::R1;
117 void emitTCEntry(
const MCSymbol &S)
override {
124 void emitMachine(
StringRef CPU)
override {
125 OS <<
"\t.machine " << CPU <<
'\n';
127 void emitAbiVersion(
int AbiVersion)
override {
128 OS <<
"\t.abiversion " << AbiVersion <<
'\n';
131 const MCAsmInfo *MAI = Streamer.getContext().getAsmInfo();
133 OS <<
"\t.localentry\t";
136 LocalOffset->
print(OS, MAI);
147 void emitTCEntry(
const MCSymbol &S)
override {
150 Streamer.EmitSymbolValue(&S, 8);
152 void emitMachine(
StringRef CPU)
override {
156 void emitAbiVersion(
int AbiVersion)
override {
167 if (!LocalOffset->evaluateAsAbsolute(Res, MCA))
186 auto *
Symbol = cast<MCSymbolELF>(S);
191 const auto &RhsSym = cast<MCSymbolELF>(
193 unsigned Other =
Symbol->getOther();
203 void emitTCEntry(
const MCSymbol &S)
override {
206 void emitMachine(
StringRef CPU)
override {
210 void emitAbiVersion(
int AbiVersion)
override {
223 return new PPCTargetAsmStreamer(S, OS);
230 return new PPCTargetELFStreamer(S);
231 return new PPCTargetMachOStreamer(S);
235 unsigned SyntaxVariant,
void setELFHeaderEFlags(unsigned Flags)
int getDwarfRegNum(unsigned RegNum, bool isEH) const
Map a target register to an equivalent dwarf register number.
void print(raw_ostream &OS, const MCAsmInfo *MAI) const
print - Print the value to the stream OS.
static MCAsmInfo * createPPCMCAsmInfo(const MCRegisterInfo &MRI, const Triple &TheTriple)
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Target specific streamer interface.
static void RegisterMCInstPrinter(Target &T, Target::MCInstPrinterCtorTy Fn)
RegisterMCInstPrinter - Register a MCInstPrinter implementation for the given target.
unsigned getELFHeaderEFlags() const
ELF e_header flags.
static void RegisterAsmTargetStreamer(Target &T, Target::AsmTargetStreamerCtorTy Fn)
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const char *reason, bool gen_crash_diag=true)
Reports a serious error, calling any installed error handler.
static int64_t decodePPC64LocalEntryOffset(unsigned Other)
~PPCTargetStreamer() override
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Base class for the full range of assembler expressions which are needed for parsing.
Reg
All possible values of the reg field in the ModR/M byte.
Represent a reference to a symbol from inside an expression.
static unsigned encodePPC64LocalEntryOffset(int64_t Offset)
void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
void addInitialFrameState(const MCCFIInstruction &Inst)
ArchType getArch() const
getArch - Get the parsed architecture type of this triple.
void LLVMInitializePowerPCTargetMC()
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This class is intended to be used as a base class for asm properties and features specific to the tar...
static void RegisterMCAsmBackend(Target &T, Target::MCAsmBackendCtorTy Fn)
RegisterMCAsmBackend - Register a MCAsmBackend implementation for the given target.
void print(raw_ostream &OS, const MCAsmInfo *MAI) const
Streaming machine code generation interface.
static MCCFIInstruction createDefCfa(MCSymbol *L, unsigned Register, int Offset)
.cfi_def_cfa defines a rule for computing CFA as: take address from Register and add Offset to it...
MCAsmBackend * createPPCAsmBackend(const Target &T, const MCRegisterInfo &MRI, const Triple &TT, StringRef CPU)
void setOther(unsigned Other)
unsigned getOther() const
Interface to description of machine instruction set.
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang","erlang-compatible garbage collector")
static void RegisterMCCodeGenInfo(Target &T, Target::MCCodeGenInfoCtorFnTy Fn)
RegisterMCCodeGenInfo - Register a MCCodeGenInfo implementation for the given target.
static MCInstPrinter * createPPCMCInstPrinter(const Triple &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
static void RegisterMCSubtargetInfo(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)
RegisterMCSubtargetInfo - Register a MCSubtargetInfo implementation for the given target...
static void RegisterObjectTargetStreamer(Target &T, Target::ObjectTargetStreamerCtorTy Fn)
static MCInstrInfo * createPPCMCInstrInfo()
static MCSubtargetInfo * createPPCMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
Triple - Helper class for working with autoconf configuration names.
bool isOSDarwin() const
isOSDarwin - Is this a "Darwin" OS (OS X or iOS).
static void RegisterMCCodeEmitter(Target &T, Target::MCCodeEmitterCtorTy Fn)
RegisterMCCodeEmitter - Register a MCCodeEmitter implementation for the given target.
static void RegisterMCRegInfo(Target &T, Target::MCRegInfoCtorFnTy Fn)
RegisterMCRegInfo - Register a MCRegisterInfo implementation for the given target.
Target - Wrapper for Target specific information.
RegisterMCAsmInfoFn - Helper template for registering a target assembly info implementation.
static MCRegisterInfo * createPPCMCRegisterInfo(const Triple &TT)
static MCCodeGenInfo * createPPCMCCodeGenInfo(const Triple &TT, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL)
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
bool isOSBinFormatELF() const
Tests whether the OS uses the ELF binary format.
StringRef getName() const
getName - Get the symbol name.
void initMCCodeGenInfo(Reloc::Model RM=Reloc::Default, CodeModel::Model CM=CodeModel::Default, CodeGenOpt::Level OL=CodeGenOpt::Default)
static void RegisterMCInstrInfo(Target &T, Target::MCInstrInfoCtorFnTy Fn)
RegisterMCInstrInfo - Register a MCInstrInfo implementation for the given target. ...
MCSubtargetInfo - Generic base class for all target subtargets.
static MCTargetStreamer * createAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint, bool isVerboseAsm)
References to labels and assigned expressions.
const Triple & getTargetTriple() const
getTargetTriple - Return the target triple string.
PPCTargetStreamer(MCStreamer &S)
LLVM Value Representation.
StringRef - Represent a constant reference to a string, i.e.
static MCTargetStreamer * createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
MCCodeEmitter * createPPCMCCodeEmitter(const MCInstrInfo &MCII, const MCRegisterInfo &MRI, MCContext &Ctx)