36 "mips-round-section-sizes",
cl::init(
false),
41 return STI->
hasFeature(Mips::FeatureMicroMips);
85 unsigned ReturnReg) {}
150 bool SaveLocationIsRegister) {}
228 unsigned Reg2,
SMLoc IDLoc,
247 int16_t Imm,
SMLoc IDLoc,
253 unsigned Reg1, int16_t Imm0, int16_t Imm1,
254 int16_t Imm2,
SMLoc IDLoc,
268 unsigned TrgReg,
bool Is64Bit,
270 emitRRR(Is64Bit ? Mips::DADDu : Mips::ADDu, DstReg, SrcReg, TrgReg,
SMLoc(),
275 int16_t ShiftAmount,
SMLoc IDLoc,
277 if (ShiftAmount >= 32) {
278 emitRRI(Mips::DSLL32, DstReg, SrcReg, ShiftAmount - 32, IDLoc, STI);
282 emitRRI(Mips::DSLL, DstReg, SrcReg, ShiftAmount, IDLoc, STI);
288 unsigned Opc = Mips::SLL;
290 Opc =
isMips32r6(STI) ? Mips::MOVE16_MMR6 : Mips::MOVE16_MM;
291 emitRR(Opc, Mips::ZERO, Mips::ZERO, IDLoc, STI);
296 Opc =
isMips32r6(STI) ? Mips::SLL_MMR6 : Mips::SLL_MM;
298 emitRRI(Opc, Mips::ZERO, Mips::ZERO, 0, IDLoc, STI);
303 emitRR(Mips::MOVE16_MM, Mips::ZERO, Mips::ZERO, IDLoc, STI);
305 emitRRI(Mips::SLL, Mips::ZERO, Mips::ZERO, 0, IDLoc, STI);
316 unsigned Opcode,
unsigned SrcReg,
unsigned BaseReg, int64_t
Offset,
328 unsigned ATReg = GetATReg();
332 unsigned LoOffset =
Offset & 0x0000ffff;
333 unsigned HiOffset = (
Offset & 0xffff0000) >> 16;
337 if (LoOffset & 0x8000)
341 emitRI(Mips::LUi, ATReg, HiOffset, IDLoc, STI);
342 if (BaseReg != Mips::ZERO)
343 emitRRR(Mips::ADDu, ATReg, ATReg, BaseReg, IDLoc, STI);
345 emitRRI(Opcode, SrcReg, ATReg, LoOffset, IDLoc, STI);
353 unsigned BaseReg, int64_t
Offset,
354 unsigned TmpReg,
SMLoc IDLoc,
368 unsigned LoOffset =
Offset & 0x0000ffff;
369 unsigned HiOffset = (
Offset & 0xffff0000) >> 16;
373 if (LoOffset & 0x8000)
377 emitRI(Mips::LUi, TmpReg, HiOffset, IDLoc, STI);
378 if (BaseReg != Mips::ZERO)
379 emitRRR(Mips::ADDu, TmpReg, TmpReg, BaseReg, IDLoc, STI);
381 emitRRI(Opcode, DstReg, TmpReg, LoOffset, IDLoc, STI);
389 OS <<
"\t.set\tmicromips\n";
394 OS <<
"\t.set\tnomicromips\n";
399 OS <<
"\t.set\tmips16\n";
404 OS <<
"\t.set\tnomips16\n";
409 OS <<
"\t.set\treorder\n";
414 OS <<
"\t.set\tnoreorder\n";
419 OS <<
"\t.set\tmacro\n";
424 OS <<
"\t.set\tnomacro\n";
429 OS <<
"\t.set\tmsa\n";
434 OS <<
"\t.set\tnomsa\n";
439 OS <<
"\t.set\tmt\n";
444 OS <<
"\t.set\tnomt\n";
449 OS <<
"\t.set\tcrc\n";
454 OS <<
"\t.set\tnocrc\n";
459 OS <<
"\t.set\tvirt\n";
464 OS <<
"\t.set\tnovirt\n";
469 OS <<
"\t.set\tginv\n";
474 OS <<
"\t.set\tnoginv\n";
479 OS <<
"\t.set\tat\n";
484 OS <<
"\t.set\tat=$" <<
Twine(RegNo) <<
"\n";
489 OS <<
"\t.set\tnoat\n";
494 OS <<
"\t.end\t" <<
Name <<
'\n';
498 OS <<
"\t.ent\t" << Symbol.getName() <<
'\n';
506 OS <<
"\t.nan\tlegacy\n";
510 OS <<
"\t.option\tpic0\n";
514 OS <<
"\t.option\tpic2\n";
523 unsigned ReturnReg) {
531 OS <<
"\t.set arch=" << Arch <<
"\n";
536 OS <<
"\t.set\tmips0\n";
541 OS <<
"\t.set\tmips1\n";
546 OS <<
"\t.set\tmips2\n";
551 OS <<
"\t.set\tmips3\n";
556 OS <<
"\t.set\tmips4\n";
561 OS <<
"\t.set\tmips5\n";
566 OS <<
"\t.set\tmips32\n";
571 OS <<
"\t.set\tmips32r2\n";
576 OS <<
"\t.set\tmips32r3\n";
581 OS <<
"\t.set\tmips32r5\n";
586 OS <<
"\t.set\tmips32r6\n";
591 OS <<
"\t.set\tmips64\n";
596 OS <<
"\t.set\tmips64r2\n";
601 OS <<
"\t.set\tmips64r3\n";
606 OS <<
"\t.set\tmips64r5\n";
611 OS <<
"\t.set\tmips64r6\n";
616 OS <<
"\t.set\tdsp\n";
621 OS <<
"\t.set\tdspr2\n";
626 OS <<
"\t.set\tnodsp\n";
631 OS <<
"\t.set\tmips3d\n";
636 OS <<
"\t.set\tnomips3d\n";
641 OS <<
"\t.set\tpop\n";
646 OS <<
"\t.set\tpush\n";
651 OS <<
"\t.set\tsoftfloat\n";
656 OS <<
"\t.set\thardfloat\n";
663 for (
int i = 7; i >= 0; i--)
668 int CPUTopSavedRegOff) {
671 OS <<
',' << CPUTopSavedRegOff <<
'\n';
675 int FPUTopSavedRegOff) {
678 OS <<
"," << FPUTopSavedRegOff <<
'\n';
694 OS <<
"\t.cplocal\t$"
703 OS <<
"\t.cprestore\t" <<
Offset <<
"\n";
711 OS <<
"\t.cpsetup\t$"
727 bool SaveLocationIsRegister) {
735 OS <<
"\t.module\tsoftfloat\n";
756 OS <<
"\t.set\toddspreg\n";
761 OS <<
"\t.set\tnooddspreg\n";
765 OS <<
"\t.module\tsoftfloat\n";
769 OS <<
"\t.module\thardfloat\n";
773 OS <<
"\t.module\tmt\n";
777 OS <<
"\t.module\tcrc\n";
781 OS <<
"\t.module\tnocrc\n";
785 OS <<
"\t.module\tvirt\n";
789 OS <<
"\t.module\tnovirt\n";
793 OS <<
"\t.module\tginv\n";
797 OS <<
"\t.module\tnoginv\n";
829 unsigned EFlags = W.getELFHeaderEFlags();
843 if (Features[Mips::FeatureMips64r6])
845 else if (Features[Mips::FeatureMips64r2] ||
846 Features[Mips::FeatureMips64r3] ||
847 Features[Mips::FeatureMips64r5])
849 else if (Features[Mips::FeatureMips64])
851 else if (Features[Mips::FeatureMips5])
853 else if (Features[Mips::FeatureMips4])
855 else if (Features[Mips::FeatureMips3])
857 else if (Features[Mips::FeatureMips32r6])
859 else if (Features[Mips::FeatureMips32r2] ||
860 Features[Mips::FeatureMips32r3] ||
861 Features[Mips::FeatureMips32r5])
863 else if (Features[Mips::FeatureMips32])
865 else if (Features[Mips::FeatureMips2])
871 if (Features[Mips::FeatureCnMips])
875 if (Features[Mips::FeatureNaN2008])
878 W.setELFHeaderEFlags(EFlags);
882 auto *Symbol = cast<MCSymbolELF>(S);
910 if (RoundSectionSizes) {
918 Align Alignment = Section.getAlign();
920 if (Section.useCodeAlign())
931 unsigned EFlags = W.getELFHeaderEFlags();
940 if (Features[Mips::FeatureGP64Bit]) {
943 }
else if (Features[Mips::FeatureMips64r2] || Features[Mips::FeatureMips64])
948 if (!Features[Mips::FeatureNoABICalls])
954 W.setELFHeaderEFlags(EFlags);
966 auto *Symbol = cast<MCSymbolELF>(S);
970 const auto &RhsSym = cast<MCSymbolELF>(
984 MicroMipsEnabled =
true;
989 MicroMipsEnabled =
false;
995 unsigned Flags = W.getELFHeaderEFlags();
997 W.setELFHeaderEFlags(Flags);
1002 unsigned Flags = W.getELFHeaderEFlags();
1004 W.setELFHeaderEFlags(Flags);
1010 unsigned Flags = W.getELFHeaderEFlags();
1012 W.setELFHeaderEFlags(Flags);
1023 OS.switchSection(Sec);
1030 OS.emitValueImpl(ExprRef, 4);
1050 OS.emitLabel(CurPCSym);
1070 unsigned Flags = W.getELFHeaderEFlags();
1072 W.setELFHeaderEFlags(Flags);
1077 unsigned Flags = W.getELFHeaderEFlags();
1079 W.setELFHeaderEFlags(Flags);
1084 unsigned Flags = W.getELFHeaderEFlags();
1085 Flags &= ~ELF::EF_MIPS_NAN2008;
1086 W.setELFHeaderEFlags(Flags);
1091 unsigned Flags = W.getELFHeaderEFlags();
1094 Flags &= ~ELF::EF_MIPS_PIC;
1095 W.setELFHeaderEFlags(Flags);
1100 unsigned Flags = W.getELFHeaderEFlags();
1107 W.setELFHeaderEFlags(Flags);
1117 unsigned ReturnReg_) {
1128 int CPUTopSavedRegOff) {
1135 int FPUTopSavedRegOff) {
1279 bool SaveLocationIsRegister) {
1286 if (SaveLocationIsRegister) {
1308 OS.switchSection(Sec);
static bool hasShortDelaySlot(MCInst &Inst)
static bool isMicroMips(const MCSubtargetInfo *STI)
static void printHex32(unsigned Value, raw_ostream &OS)
static bool isMips32r6(const MCSubtargetInfo *STI)
Container class for subtarget features.
MCContext & getContext() const
bool registerSymbol(const MCSymbol &Symbol)
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Context object for machine code objects.
const MCObjectFileInfo * getObjectFileInfo() const
MCSymbol * createTempSymbol()
Create a temporary symbol with a unique name.
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
const MCRegisterInfo * getRegisterInfo() const
MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
void emitValueToAlignment(Align, int64_t, unsigned, unsigned) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
ELFObjectWriter & getWriter()
Base class for the full range of assembler expressions which are needed for parsing.
@ SymbolRef
References to labels and assigned expressions.
Instances of this class represent a single low-level machine instruction.
void addOperand(const MCOperand Op)
void setOpcode(unsigned Op)
MCSection * getBSSSection() const
bool isPositionIndependent() const
MCSection * getTextSection() const
MCSection * getDataSection() const
MCAssembler & getAssembler()
void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override
Emit the given Instruction into the current section.
void emitCodeAlignment(Align ByteAlignment, const MCSubtargetInfo *STI, unsigned MaxBytesToEmit=0) override
Emit nops until the byte alignment ByteAlignment is reached.
Instances of this class represent operands of the MCInst class.
static MCOperand createExpr(const MCExpr *Val)
static MCOperand createReg(MCRegister Reg)
static MCOperand createImm(int64_t Val)
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
uint16_t getEncodingValue(MCRegister Reg) const
Returns the encoding for Reg.
This represents a section on linux, lots of unix variants and some bare metal systems.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
void setAlignment(Align Value)
void ensureMinAlignment(Align MinAlignment)
Makes sure that Alignment is at least MinAlignment.
Streaming machine code generation interface.
virtual void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI)
Emit the given Instruction into the current section.
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
const Triple & getTargetTriple() const
const FeatureBitset & getFeatureBits() const
Represent a reference to a symbol from inside an expression.
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Target specific streamer interface.
MCStreamer & getStreamer()
void EmitMipsOptionRecords()
Emits all the option records stored up until the point it's called.
void createPendingLabelRelocs()
Mark labels as microMIPS, if necessary for the subtarget.
static const char * getRegisterName(MCRegister Reg)
static const MipsMCExpr * create(MipsExprKind Kind, const MCExpr *Expr, MCContext &Ctx)
static const MipsMCExpr * createGpOff(MipsExprKind Kind, const MCExpr *Expr, MCContext &Ctx)
void emitDirectiveSetMips32R3() override
void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value) override
void emitDirectiveSetArch(StringRef Arch) override
void emitDirectiveModuleGINV() override
bool emitDirectiveCpRestore(int Offset, function_ref< unsigned()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
Emit a .cprestore directive.
MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
void emitDirectiveSetMips5() override
void emitDirectiveCpLoad(unsigned RegNo) override
void emitDirectiveSetNoVirt() override
void emitDirectiveSetNoAt() override
void emitDirectiveSetNoCRC() override
void emitDirectiveSetMips32R5() override
void emitDirectiveSetNoMacro() override
void emitDirectiveModuleMT() override
void emitDirectiveSetNoOddSPReg() override
void emitDirectiveModuleCRC() override
void emitDirectiveEnt(const MCSymbol &Symbol) override
void emitDirectiveSetDspr2() override
void emitDirectiveSetMips1() override
void emitDirectiveSetMips64R2() override
void emitDirectiveSetMips4() override
void emitDirectiveModuleSoftFloat() override
void emitDirectiveSetMips16() override
void emitDirectiveSetMt() override
void emitDirectiveInsn() override
void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
void emitDirectiveSetMicroMips() override
void emitDirectiveModuleNoCRC() override
void emitDirectiveSetMips32R6() override
void emitDirectiveSetNoGINV() override
void emitDirectiveSetMips64R5() override
void emitDirectiveSetMips32() override
void emitDirectiveCpLocal(unsigned RegNo) override
void emitDirectiveSetNoMips3D() override
void emitDirectiveSetPush() override
void emitDirectiveSetNoMips16() override
void emitDirectiveSetNoDsp() override
void emitDirectiveSetMips32R2() override
void emitDirectiveSetMips64() override
void emitDirectiveModuleHardFloat() override
void emitDirectiveOptionPic0() override
void emitDirectiveSetMacro() override
void emitDirectiveSetCRC() override
void emitDirectiveSetNoReorder() override
void emitDirectiveEnd(StringRef Name) override
void emitDirectiveSetMips64R3() override
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
void emitDirectiveSetNoMt() override
void emitDirectiveAbiCalls() override
void emitDirectiveSetMsa() override
void emitDirectiveOptionPic2() override
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
void emitDirectiveModuleVirt() override
void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg) override
void emitDirectiveSetGINV() override
void emitDirectiveSetNoMsa() override
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
void emitDirectiveCpAdd(unsigned RegNo) override
void emitDirectiveModuleNoVirt() override
void emitDirectiveNaN2008() override
void emitDirectiveSetPop() override
void emitDirectiveSetMips3() override
void emitDirectiveSetMips0() override
void emitDirectiveSetHardFloat() override
void emitDirectiveModuleNoGINV() override
void emitDirectiveSetVirt() override
void emitDirectiveModuleFP() override
void emitDirectiveSetMips2() override
void emitDirectiveSetMips3D() override
void emitDirectiveSetAtWithArg(unsigned RegNo) override
void emitDirectiveSetReorder() override
void emitDirectiveNaNLegacy() override
void emitDirectiveSetMips64R6() override
void emitDirectiveSetSoftFloat() override
void emitDirectiveSetNoMicroMips() override
void emitDirectiveSetAt() override
void emitDirectiveSetOddSPReg() override
void emitDirectiveModuleOddSPReg() override
void emitDirectiveSetDsp() override
void emitDirectiveCpAdd(unsigned RegNo) override
void emitDirectiveCpLoad(unsigned RegNo) override
MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
void emitDirectiveNaN2008() override
void emitDirectiveSetNoMicroMips() override
void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
void emitDirectiveInsn() override
void setUsesMicroMips() override
void emitDirectiveOptionPic2() override
bool isMicroMipsEnabled() const
void emitDirectiveEnd(StringRef Name) override
bool emitDirectiveCpRestore(int Offset, function_ref< unsigned()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
void emitDirectiveSetMicroMips() override
void emitLabel(MCSymbol *Symbol) override
void emitDirectiveCpLocal(unsigned RegNo) override
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
void emitDirectiveAbiCalls() override
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg) override
void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
void emitDirectiveSetMips16() override
void emitDirectiveOptionPic0() override
void emitDirectiveEnt(const MCSymbol &Symbol) override
void emitDirectiveSetNoReorder() override
void emitDirectiveNaNLegacy() override
MCELFStreamer & getStreamer()
std::optional< MipsABIInfo > ABI
virtual void emitDirectiveSetMips64R5()
virtual void emitDirectiveSetAt()
virtual void emitDirectiveModuleNoVirt()
virtual void emitDirectiveSetReorder()
void emitRRIII(unsigned Opcode, unsigned Reg0, unsigned Reg1, int16_t Imm0, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoCRC()
virtual void emitDirectiveModuleNoGINV()
void emitRRI(unsigned Opcode, unsigned Reg0, unsigned Reg1, int16_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetSoftFloat()
virtual void emitDirectiveSetNoDsp()
void forbidModuleDirective()
virtual void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister)
virtual void emitDirectiveSetNoMicroMips()
void emitStoreWithImmOffset(unsigned Opcode, unsigned SrcReg, unsigned BaseReg, int64_t Offset, function_ref< unsigned()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit a store instruction with an offset.
virtual void emitDirectiveSetDspr2()
void emitRX(unsigned Opcode, unsigned Reg0, MCOperand Op1, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveNaN2008()
virtual void emitDirectiveSetMips64R2()
virtual void emitDirectiveSetMips3D()
virtual void emitDirectiveEnd(StringRef Name)
virtual void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value)
virtual void emitDirectiveSetCRC()
virtual void emitDirectiveSetMips64R3()
void emitAddu(unsigned DstReg, unsigned SrcReg, unsigned TrgReg, bool Is64Bit, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoVirt()
virtual void emitDirectiveSetGINV()
virtual void emitDirectiveSetMacro()
virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg)
void emitR(unsigned Opcode, unsigned Reg0, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetMips3()
virtual void emitDirectiveSetNoGINV()
virtual void setUsesMicroMips()
virtual void emitDirectiveSetMips32R3()
virtual void emitDirectiveSetMips32R2()
virtual void emitDirectiveEnt(const MCSymbol &Symbol)
virtual void emitDirectiveSetMips1()
virtual void emitDirectiveSetDsp()
virtual void emitDirectiveSetNoMips3D()
virtual void emitDirectiveCpLocal(unsigned RegNo)
virtual void emitDirectiveCpLoad(unsigned RegNo)
virtual void emitDirectiveSetHardFloat()
void emitEmptyDelaySlot(bool hasShortDelaySlot, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoMips16()
virtual void emitDirectiveSetMips5()
virtual void emitDirectiveSetMips2()
virtual void emitDirectiveSetPush()
virtual void emitDirectiveSetMt()
virtual void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg)
virtual void emitDirectiveSetNoOddSPReg()
void emitII(unsigned Opcode, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetOddSPReg()
virtual void emitDirectiveSetNoMt()
virtual void emitDirectiveModuleCRC()
virtual void emitDirectiveModuleGINV()
void emitRRX(unsigned Opcode, unsigned Reg0, unsigned Reg1, MCOperand Op2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoAt()
virtual void emitDirectiveNaNLegacy()
virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff)
void emitRR(unsigned Opcode, unsigned Reg0, unsigned Reg1, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetPop()
virtual void emitDirectiveSetMicroMips()
void emitRI(unsigned Opcode, unsigned Reg0, int32_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetMips0()
void emitRRR(unsigned Opcode, unsigned Reg0, unsigned Reg1, unsigned Reg2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveModuleSoftFloat()
virtual void emitDirectiveSetArch(StringRef Arch)
virtual void emitDirectiveSetAtWithArg(unsigned RegNo)
void emitRRRX(unsigned Opcode, unsigned Reg0, unsigned Reg1, unsigned Reg2, MCOperand Op3, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual bool emitDirectiveCpRestore(int Offset, function_ref< unsigned()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
void emitLoadWithImmOffset(unsigned Opcode, unsigned DstReg, unsigned BaseReg, int64_t Offset, unsigned TmpReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit a load instruction with an immediate offset.
virtual void emitDirectiveModuleNoCRC()
virtual void emitDirectiveSetNoMacro()
const MipsABIInfo & getABI() const
virtual void emitDirectiveModuleOddSPReg()
virtual void emitDirectiveCpAdd(unsigned RegNo)
virtual void emitDirectiveInsn()
virtual void emitDirectiveSetMips64R6()
virtual void emitDirectiveSetNoMsa()
virtual void emitDirectiveSetVirt()
void emitGPRestore(int Offset, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit the $gp restore operation for .cprestore.
MipsTargetStreamer(MCStreamer &S)
virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff)
virtual void emitDirectiveModuleVirt()
void emitNop(SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoReorder()
void emitDSLL(unsigned DstReg, unsigned SrcReg, int16_t ShiftAmount, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetMips32()
virtual void emitDirectiveOptionPic0()
virtual void emitDirectiveModuleMT()
virtual void emitDirectiveModuleHardFloat()
virtual void emitDirectiveSetMips32R5()
virtual void emitDirectiveSetMsa()
virtual void emitDirectiveSetMips32R6()
virtual void emitDirectiveSetMips4()
virtual void emitDirectiveOptionPic2()
virtual void emitDirectiveSetMips16()
virtual void emitDirectiveSetMips64()
virtual void emitDirectiveAbiCalls()
virtual void emitDirectiveModuleFP()
MipsABIFlagsSection ABIFlagsSection
Represents a location in source code.
StringRef - Represent a constant reference to a string, i.e.
std::string lower() const
ArchType getArch() const
Get the parsed architecture type of this triple.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
An efficient, type-erasing, non-owning reference to a callable.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & write_hex(unsigned long long N)
Output N in hexadecimal, without any prefix or padding.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
This struct is a compact representation of a valid (non-zero power of two) alignment.
uint64_t value() const
This is a hole in the type system and should not be abused.
StringRef getFpABIString(FpABIKind Value)