LLVM: lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
32
33using namespace llvm;
34
35namespace {
37 "mips-round-section-sizes", cl::init(false),
38 cl::desc("Round section sizes up to the section alignment"), cl::Hidden);
39}
40
42 return STI->hasFeature(Mips::FeatureMicroMips);
43}
44
46 return STI->hasFeature(Mips::FeatureMips32r6);
47}
48
53
132
133
134
135
136
137
138
139
140
142 return;
143
145
147}
155 const MCSymbol &Sym, bool IsReg) {
156}
158 bool SaveLocationIsRegister) {}
159
161
183
189 TmpInst.setLoc(IDLoc);
191}
192
199 TmpInst.setLoc(IDLoc);
201}
202
207
213
220 TmpInst.setLoc(IDLoc);
222}
223
232 TmpInst.setLoc(IDLoc);
234}
235
241
252 TmpInst.setLoc(IDLoc);
254}
255
261
263 MCRegister Reg1, int16_t Imm0, int16_t Imm1,
264 int16_t Imm2, SMLoc IDLoc,
273 TmpInst.setLoc(IDLoc);
275}
276
280 emitRRR(Is64Bit ? Mips::DADDu : Mips::ADDu, DstReg, SrcReg, TrgReg, SMLoc(),
281 STI);
282}
283
285 int16_t ShiftAmount, SMLoc IDLoc,
287 if (ShiftAmount >= 32) {
288 emitRRI(Mips::DSLL32, DstReg, SrcReg, ShiftAmount - 32, IDLoc, STI);
289 return;
290 }
291
292 emitRRI(Mips::DSLL, DstReg, SrcReg, ShiftAmount, IDLoc, STI);
293}
294
297
298 unsigned Opc = Mips::SLL;
300 Opc = isMips32r6(STI) ? Mips::MOVE16_MMR6 : Mips::MOVE16_MM;
301 emitRR(Opc, Mips::ZERO, Mips::ZERO, IDLoc, STI);
302 return;
303 }
304
306 Opc = isMips32r6(STI) ? Mips::SLL_MMR6 : Mips::SLL_MM;
307
308 emitRRI(Opc, Mips::ZERO, Mips::ZERO, 0, IDLoc, STI);
309}
310
313 emitRR(Mips::MOVE16_MM, Mips::ZERO, Mips::ZERO, IDLoc, STI);
314 else
315 emitRRI(Mips::SLL, Mips::ZERO, Mips::ZERO, 0, IDLoc, STI);
316}
317
318
323
324
330 emitRRI(Opcode, SrcReg, BaseReg, Offset, IDLoc, STI);
331 return;
332 }
333
334
335
336
337
339 if (!ATReg)
340 return;
341
342 unsigned LoOffset = Offset & 0x0000ffff;
343 unsigned HiOffset = (Offset & 0xffff0000) >> 16;
344
345
346
347 if (LoOffset & 0x8000)
348 HiOffset++;
349
350
351 emitRI(Mips::LUi, ATReg, HiOffset, IDLoc, STI);
352 if (BaseReg != Mips::ZERO)
353 emitRRR(Mips::ADDu, ATReg, ATReg, BaseReg, IDLoc, STI);
354
355 emitRRI(Opcode, SrcReg, ATReg, LoOffset, IDLoc, STI);
356}
357
358
359
360
361
366 emitRRI(Opcode, DstReg, BaseReg, Offset, IDLoc, STI);
367 return;
368 }
369
370
371
372
373
374
375
376
377 unsigned LoOffset = Offset & 0x0000ffff;
378 unsigned HiOffset = (Offset & 0xffff0000) >> 16;
379
380
381
382 if (LoOffset & 0x8000)
383 HiOffset++;
384
385
386 emitRI(Mips::LUi, TmpReg, HiOffset, IDLoc, STI);
387 if (BaseReg != Mips::ZERO)
388 emitRRR(Mips::ADDu, TmpReg, TmpReg, BaseReg, IDLoc, STI);
389
390 emitRRI(Opcode, DstReg, TmpReg, LoOffset, IDLoc, STI);
391}
392
396
399 OS << "\t.dtprelword\t";
401 OS << '\n';
402}
403
406 OS << "\t.dtpreldword\t";
408 OS << '\n';
409}
410
413 OS << "\t.tprelword\t";
415 OS << '\n';
416}
417
420 OS << "\t.tpreldword\t";
422 OS << '\n';
423}
424
427 OS << "\t.gpword\t";
429 OS << '\n';
430}
431
434 OS << "\t.gpdword\t";
436 OS << '\n';
437}
438
440 OS << "\t.set\tmicromips\n";
442}
443
445 OS << "\t.set\tnomicromips\n";
447}
448
450 OS << "\t.set\tmips16\n";
452}
453
455 OS << "\t.set\tnomips16\n";
457}
458
460 OS << "\t.set\treorder\n";
462}
463
465 OS << "\t.set\tnoreorder\n";
467}
468
470 OS << "\t.set\tmacro\n";
472}
473
475 OS << "\t.set\tnomacro\n";
477}
478
480 OS << "\t.set\tmsa\n";
482}
483
485 OS << "\t.set\tnomsa\n";
487}
488
490 OS << "\t.set\tmt\n";
492}
493
495 OS << "\t.set\tnomt\n";
497}
498
500 OS << "\t.set\tcrc\n";
502}
503
505 OS << "\t.set\tnocrc\n";
507}
508
510 OS << "\t.set\tvirt\n";
512}
513
515 OS << "\t.set\tnovirt\n";
517}
518
520 OS << "\t.set\tginv\n";
522}
523
525 OS << "\t.set\tnoginv\n";
527}
528
530 OS << "\t.set\tat\n";
532}
533
535 OS << "\t.set\tat=$" << Twine(RegNo) << "\n";
537}
538
540 OS << "\t.set\tnoat\n";
542}
543
545 OS << "\t.end\t" << Name << '\n';
546}
547
549 OS << "\t.ent\t" << Symbol.getName() << '\n';
550}
551
553
555
557 OS << "\t.nan\tlegacy\n";
558}
559
561 OS << "\t.option\tpic0\n";
562}
563
565 OS << "\t.option\tpic2\n";
566}
567
570 OS << "\t.insn\n";
571}
572
575 OS << "\t.frame\t$"
577 << StackSize << ",$"
579}
580
582 OS << "\t.set arch=" << Arch << "\n";
584}
585
587 OS << "\t.set\tmips0\n";
589}
590
592 OS << "\t.set\tmips1\n";
594}
595
597 OS << "\t.set\tmips2\n";
599}
600
602 OS << "\t.set\tmips3\n";
604}
605
607 OS << "\t.set\tmips4\n";
609}
610
612 OS << "\t.set\tmips5\n";
614}
615
617 OS << "\t.set\tmips32\n";
619}
620
622 OS << "\t.set\tmips32r2\n";
624}
625
627 OS << "\t.set\tmips32r3\n";
629}
630
632 OS << "\t.set\tmips32r5\n";
634}
635
637 OS << "\t.set\tmips32r6\n";
639}
640
642 OS << "\t.set\tmips64\n";
644}
645
647 OS << "\t.set\tmips64r2\n";
649}
650
652 OS << "\t.set\tmips64r3\n";
654}
655
657 OS << "\t.set\tmips64r5\n";
659}
660
662 OS << "\t.set\tmips64r6\n";
664}
665
667 OS << "\t.set\tdsp\n";
669}
670
672 OS << "\t.set\tdspr2\n";
674}
675
677 OS << "\t.set\tnodsp\n";
679}
680
682 OS << "\t.set\tmips3d\n";
684}
685
687 OS << "\t.set\tnomips3d\n";
689}
690
692 OS << "\t.set\tpop\n";
694}
695
697 OS << "\t.set\tpush\n";
699}
700
702 OS << "\t.set\tsoftfloat\n";
704}
705
707 OS << "\t.set\thardfloat\n";
709}
710
711
713 OS << "0x";
714 for (int i = 7; i >= 0; i--)
716}
717
719 int CPUTopSavedRegOff) {
720 OS << "\t.mask \t";
722 OS << ',' << CPUTopSavedRegOff << '\n';
723}
724
726 int FPUTopSavedRegOff) {
727 OS << "\t.fmask\t";
729 OS << "," << FPUTopSavedRegOff << '\n';
730}
731
733 OS << "\t.cpadd\t$"
736}
737
739 OS << "\t.cpload\t$"
742}
743
745 OS << "\t.cplocal\t$"
748}
749
754 OS << "\t.cprestore\t" << Offset << "\n";
755 return true;
756}
757
759 int RegOrOffset,
761 bool IsReg) {
762 OS << "\t.cpsetup\t$"
764
765 if (IsReg)
766 OS << "$"
768 else
769 OS << RegOrOffset;
770
771 OS << ", ";
772
775}
776
778 bool SaveLocationIsRegister) {
779 OS << "\t.cpreturn";
781}
782
786 OS << "\t.module\tsoftfloat\n";
787 else
788 OS << "\t.module\tfp=" << ABIFlagsSection.getFpABIString(FpABI) << "\n";
789}
790
794
795 OS << "\t.set\tfp=";
797}
798
801
802 OS << "\t.module\t" << (ABIFlagsSection.OddSPReg ? "" : "no") << "oddspreg\n";
803}
804
807 OS << "\t.set\toddspreg\n";
808}
809
812 OS << "\t.set\tnooddspreg\n";
813}
814
816 OS << "\t.module\tsoftfloat\n";
817}
818
820 OS << "\t.module\thardfloat\n";
821}
822
824 OS << "\t.module\tmt\n";
825}
826
828 OS << "\t.module\tcrc\n";
829}
830
832 OS << "\t.module\tnocrc\n";
833}
834
836 OS << "\t.module\tvirt\n";
837}
838
840 OS << "\t.module\tnovirt\n";
841}
842
844 OS << "\t.module\tginv\n";
845}
846
848 OS << "\t.module\tnoginv\n";
849}
850
851
857
858
859
860
861
862
863
864
866
867 const FeatureBitset &Features = STI.getFeatureBits();
868
869
870
871
872
873
874
875
876
877
878
879
880 unsigned EFlags = W.getELFHeaderEFlags();
881
882
883
884
885
886
892
893
894 if (Features[Mips::FeatureMips64r6])
896 else if (Features[Mips::FeatureMips64r2] ||
897 Features[Mips::FeatureMips64r3] ||
898 Features[Mips::FeatureMips64r5])
900 else if (Features[Mips::FeatureMips64])
902 else if (Features[Mips::FeatureMips5])
904 else if (Features[Mips::FeatureMips4])
906 else if (Features[Mips::FeatureMips3])
908 else if (Features[Mips::FeatureMips32r6])
910 else if (Features[Mips::FeatureMips32r2] ||
911 Features[Mips::FeatureMips32r3] ||
912 Features[Mips::FeatureMips32r5])
914 else if (Features[Mips::FeatureMips32])
916 else if (Features[Mips::FeatureMips2])
918 else
920
921
922 if (Features[Mips::FeatureCnMips])
924
925
926 if (Features[Mips::FeatureNaN2008])
928
929 W.setELFHeaderEFlags(EFlags);
930}
931
933 auto *Symbol = static_cast<MCSymbolELF *>(S);
937 return;
938
941}
942
948
949
956
960
961 if (RoundSectionSizes) {
962
963
964
965
968
969 Align Alignment = Section.getAlign();
971 if (getContext().getAsmInfo()->useCodeAlign(Section))
973 else
975 }
976 }
977
978 const FeatureBitset &Features = STI.getFeatureBits();
979
980
981
982 unsigned EFlags = W.getELFHeaderEFlags();
983
984
985
986 if (getABI().IsO32())
988 else if (getABI().IsN32())
990
991 if (Features[Mips::FeatureGP64Bit]) {
992 if (getABI().IsO32())
994 } else if (Features[Mips::FeatureMips64r2] || Features[Mips::FeatureMips64])
996
997
998
999 if (!Features[Mips::FeatureNoABICalls])
1001
1002 if (Pic)
1004
1005 W.setELFHeaderEFlags(EFlags);
1006
1007
1008
1009
1012
1014}
1015
1017 auto *Symbol = static_cast<MCSymbolELF *>(S);
1018
1020 return;
1021 auto &RhsSym = static_cast<const MCSymbolELF &>(
1023
1025 return;
1026
1028}
1029
1033
1036 S.ensureHeadroom(4);
1038 S.appendContents(4, 0);
1039}
1040
1043 S.ensureHeadroom(8);
1044
1046 S.appendContents(8, 0);
1047}
1048
1051 S.ensureHeadroom(4);
1053 S.appendContents(4, 0);
1054}
1055
1058 S.ensureHeadroom(8);
1060 S.appendContents(8, 0);
1061}
1062
1065 S.ensureHeadroom(4);
1067 S.appendContents(4, 0);
1068}
1069
1072 S.ensureHeadroom(8);
1074 S.appendContents(8, 0);
1075}
1076
1078 MicroMipsEnabled = true;
1080}
1081
1083 MicroMipsEnabled = false;
1085}
1086
1089 unsigned Flags = W.getELFHeaderEFlags();
1091 W.setELFHeaderEFlags(Flags);
1092}
1093
1096 unsigned Flags = W.getELFHeaderEFlags();
1098 W.setELFHeaderEFlags(Flags);
1100}
1101
1104 unsigned Flags = W.getELFHeaderEFlags();
1106 W.setELFHeaderEFlags(Flags);
1108}
1109
1114
1119
1120 MCSymbol *Sym = Context.getOrCreateSymbol(Name);
1123
1126
1129
1133
1134
1135
1137
1139
1140
1141 MCSymbol *CurPCSym = Context.createTempSymbol();
1145
1146
1147
1148
1150}
1151
1158
1161 unsigned Flags = W.getELFHeaderEFlags();
1163 W.setELFHeaderEFlags(Flags);
1164}
1165
1168 unsigned Flags = W.getELFHeaderEFlags();
1170 W.setELFHeaderEFlags(Flags);
1171}
1172
1175 unsigned Flags = W.getELFHeaderEFlags();
1176 Flags &= ~ELF::EF_MIPS_NAN2008;
1177 W.setELFHeaderEFlags(Flags);
1178}
1179
1182 unsigned Flags = W.getELFHeaderEFlags();
1183
1184 Pic = false;
1185 Flags &= ~ELF::EF_MIPS_PIC;
1186 W.setELFHeaderEFlags(Flags);
1187}
1188
1191 unsigned Flags = W.getELFHeaderEFlags();
1192 Pic = true;
1193
1194
1195
1196
1198 W.setELFHeaderEFlags(Flags);
1199}
1200
1206
1210 const MCRegisterInfo *RegInfo = Context.getRegisterInfo();
1211
1213 FrameReg = RegInfo->getEncodingValue(StackReg);
1215 ReturnReg = RegInfo->getEncodingValue(ReturnReg_);
1216}
1217
1219 int CPUTopSavedRegOff) {
1223}
1224
1226 int FPUTopSavedRegOff) {
1230}
1231
1233
1234
1235
1236 if (!Pic)
1237 return;
1238
1241}
1242
1244
1245
1246
1247
1248
1249
1250 if (!Pic || (getABI().IsN32() || getABI().IsN64()))
1251 return;
1252
1253
1254
1255
1256
1257
1258
1259
1264
1271
1272 TmpInst.clear();
1273
1280
1281 TmpInst.clear();
1282
1288
1290}
1291
1296
1301
1302
1303
1304
1305
1306
1307
1308
1309 if (!Pic || (getABI().IsN32() || getABI().IsN64()))
1310 return true;
1311
1312
1314 STI);
1315 return true;
1316}
1317
1319 int RegOrOffset,
1321 bool IsReg) {
1322
1323 if (!Pic || !(getABI().IsN32() || getABI().IsN64()))
1324 return;
1325
1327
1330
1331
1332 if (IsReg) {
1333
1334 emitRRR(Mips::OR64, RegOrOffset, GPReg, Mips::ZERO, SMLoc(), &STI);
1335 } else {
1336
1338 }
1339
1340 auto *HiExpr =
1343 auto *LoExpr =
1346
1347
1349
1350
1352 &STI);
1353
1354
1355 if (getABI().IsN32())
1357 else
1359}
1360
1362 bool SaveLocationIsRegister) {
1363
1364 if (!Pic || !(getABI().IsN32() || getABI().IsN64()))
1365 return;
1366
1368
1369 if (SaveLocationIsRegister) {
1374 } else {
1379 }
1381
1383}
1384
static bool hasShortDelaySlot(MCInst &Inst)
static bool isMicroMips(const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:41
static void printHex32(unsigned Value, raw_ostream &OS)
Definition MipsTargetStreamer.cpp:712
static bool isMips32r6(const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:45
Container class for subtarget features.
void printExpr(raw_ostream &, const MCExpr &) const
MCContext & getContext() const
LLVM_ABI 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
const MCAsmInfo * getAsmInfo() const
LLVM_ABI MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
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
void emitValueToAlignment(Align Alignment, int64_t Fill=0, uint8_t FillLen=1, unsigned MaxBytesToEmit=0) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
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...
Wrapper class representing physical registers. Should be passed by value.
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.
static const MCSpecifierExpr * create(const MCExpr *Expr, Spec S, MCContext &Ctx, SMLoc Loc=SMLoc())
Streaming machine code generation interface.
virtual bool popSection()
Restore the current and previous section from the section stack.
virtual void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI)
Emit the given Instruction into the current section.
MCContext & getContext() const
virtual void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
virtual void emitIntValue(uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers.
void pushSection()
Save the current and previous section on the section stack.
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
virtual void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc())
Emit the expression Value into the output as a native integer of the given Size bytes.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
void setOther(unsigned Other)
Represent a reference to a symbol from inside an expression.
const MCSymbol & getSymbol() const
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx, SMLoc Loc=SMLoc())
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
StringRef getName() const
getName - Get the symbol name.
MCStreamer & getStreamer()
MCTargetStreamer(MCStreamer &S)
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)
void emitDirectiveSetMips32R3() override
Definition MipsTargetStreamer.cpp:626
void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value) override
Definition MipsTargetStreamer.cpp:791
void emitDirectiveSetArch(StringRef Arch) override
Definition MipsTargetStreamer.cpp:581
void emitDirectiveModuleGINV() override
Definition MipsTargetStreamer.cpp:843
void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
Definition MipsTargetStreamer.cpp:758
MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
Definition MipsTargetStreamer.cpp:393
void emitDirectiveSetMips5() override
Definition MipsTargetStreamer.cpp:611
void emitDirectiveSetNoVirt() override
Definition MipsTargetStreamer.cpp:514
void emitDirectiveSetNoAt() override
Definition MipsTargetStreamer.cpp:539
void emitDirectiveSetNoCRC() override
Definition MipsTargetStreamer.cpp:504
void emitDirectiveSetMips32R5() override
Definition MipsTargetStreamer.cpp:631
void emitDirectiveSetNoMacro() override
Definition MipsTargetStreamer.cpp:474
void emitDirectiveModuleMT() override
Definition MipsTargetStreamer.cpp:823
void emitDirectiveSetNoOddSPReg() override
Definition MipsTargetStreamer.cpp:810
void emitDirectiveCpLocal(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:744
void emitDirectiveModuleCRC() override
Definition MipsTargetStreamer.cpp:827
void emitDirectiveEnt(const MCSymbol &Symbol) override
Definition MipsTargetStreamer.cpp:548
void emitDirectiveSetDspr2() override
Definition MipsTargetStreamer.cpp:671
void emitDirectiveSetMips1() override
Definition MipsTargetStreamer.cpp:591
void emitDirectiveSetMips64R2() override
Definition MipsTargetStreamer.cpp:646
void emitDirectiveSetMips4() override
Definition MipsTargetStreamer.cpp:606
void emitDirectiveModuleSoftFloat() override
Definition MipsTargetStreamer.cpp:815
void emitDirectiveSetMips16() override
Definition MipsTargetStreamer.cpp:449
void emitDirectiveSetMt() override
Definition MipsTargetStreamer.cpp:489
void emitDirectiveInsn() override
Definition MipsTargetStreamer.cpp:568
void emitDTPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:404
void emitDirectiveSetMicroMips() override
Definition MipsTargetStreamer.cpp:439
void emitTPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:418
void emitDirectiveModuleNoCRC() override
Definition MipsTargetStreamer.cpp:831
void emitDirectiveSetMips32R6() override
Definition MipsTargetStreamer.cpp:636
bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
Emit a .cprestore directive.
Definition MipsTargetStreamer.cpp:750
void emitDirectiveCpAdd(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:732
void emitDirectiveSetNoGINV() override
Definition MipsTargetStreamer.cpp:524
void emitDirectiveSetMips64R5() override
Definition MipsTargetStreamer.cpp:656
void emitDirectiveSetMips32() override
Definition MipsTargetStreamer.cpp:616
void emitDirectiveCpLoad(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:738
void emitDirectiveSetNoMips3D() override
Definition MipsTargetStreamer.cpp:686
void emitDirectiveSetPush() override
Definition MipsTargetStreamer.cpp:696
void emitDirectiveSetNoMips16() override
Definition MipsTargetStreamer.cpp:454
void emitDirectiveSetNoDsp() override
Definition MipsTargetStreamer.cpp:676
void emitDirectiveSetMips32R2() override
Definition MipsTargetStreamer.cpp:621
void emitDirectiveSetMips64() override
Definition MipsTargetStreamer.cpp:641
void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg) override
Definition MipsTargetStreamer.cpp:573
void emitDirectiveModuleHardFloat() override
Definition MipsTargetStreamer.cpp:819
void emitDirectiveOptionPic0() override
Definition MipsTargetStreamer.cpp:560
void emitDirectiveSetMacro() override
Definition MipsTargetStreamer.cpp:469
void emitDirectiveSetCRC() override
Definition MipsTargetStreamer.cpp:499
void emitDirectiveSetNoReorder() override
Definition MipsTargetStreamer.cpp:464
void emitDirectiveEnd(StringRef Name) override
Definition MipsTargetStreamer.cpp:544
void emitDirectiveSetMips64R3() override
Definition MipsTargetStreamer.cpp:651
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
Definition MipsTargetStreamer.cpp:725
void emitDirectiveSetNoMt() override
Definition MipsTargetStreamer.cpp:494
void emitDirectiveAbiCalls() override
Definition MipsTargetStreamer.cpp:552
void emitDirectiveSetMsa() override
Definition MipsTargetStreamer.cpp:479
void emitDirectiveOptionPic2() override
Definition MipsTargetStreamer.cpp:564
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
Definition MipsTargetStreamer.cpp:718
void emitDirectiveModuleVirt() override
Definition MipsTargetStreamer.cpp:835
void emitDirectiveSetGINV() override
Definition MipsTargetStreamer.cpp:519
void emitDirectiveSetNoMsa() override
Definition MipsTargetStreamer.cpp:484
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
Definition MipsTargetStreamer.cpp:777
void emitDirectiveModuleNoVirt() override
Definition MipsTargetStreamer.cpp:839
void emitDirectiveNaN2008() override
Definition MipsTargetStreamer.cpp:554
void emitDirectiveSetPop() override
Definition MipsTargetStreamer.cpp:691
void emitDTPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:397
void emitDirectiveSetMips3() override
Definition MipsTargetStreamer.cpp:601
void emitDirectiveSetMips0() override
Definition MipsTargetStreamer.cpp:586
void emitTPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:411
void emitDirectiveSetHardFloat() override
Definition MipsTargetStreamer.cpp:706
void emitDirectiveModuleNoGINV() override
Definition MipsTargetStreamer.cpp:847
void emitDirectiveSetVirt() override
Definition MipsTargetStreamer.cpp:509
void emitDirectiveModuleFP() override
Definition MipsTargetStreamer.cpp:783
void emitDirectiveSetMips2() override
Definition MipsTargetStreamer.cpp:596
void emitDirectiveSetMips3D() override
Definition MipsTargetStreamer.cpp:681
void emitDirectiveSetAtWithArg(unsigned RegNo) override
Definition MipsTargetStreamer.cpp:534
void emitDirectiveSetReorder() override
Definition MipsTargetStreamer.cpp:459
void emitDirectiveNaNLegacy() override
Definition MipsTargetStreamer.cpp:556
void emitGPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:432
void emitDirectiveSetMips64R6() override
Definition MipsTargetStreamer.cpp:661
void emitDirectiveSetSoftFloat() override
Definition MipsTargetStreamer.cpp:701
void emitDirectiveSetNoMicroMips() override
Definition MipsTargetStreamer.cpp:444
void emitGPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:425
void emitDirectiveSetAt() override
Definition MipsTargetStreamer.cpp:529
void emitDirectiveSetOddSPReg() override
Definition MipsTargetStreamer.cpp:805
void emitDirectiveModuleOddSPReg() override
Definition MipsTargetStreamer.cpp:799
void emitDirectiveSetDsp() override
Definition MipsTargetStreamer.cpp:666
bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
Definition MipsTargetStreamer.cpp:1297
void emitDTPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1049
MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
Definition MipsTargetStreamer.cpp:852
void emitDirectiveNaN2008() override
Definition MipsTargetStreamer.cpp:1166
void emitDirectiveSetNoMicroMips() override
Definition MipsTargetStreamer.cpp:1082
void emitGPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1041
void emitDirectiveInsn() override
Definition MipsTargetStreamer.cpp:1201
void setUsesMicroMips() override
Definition MipsTargetStreamer.cpp:1087
void emitDirectiveOptionPic2() override
Definition MipsTargetStreamer.cpp:1189
void emitGPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1034
bool isMicroMipsEnabled() const
void emitDirectiveEnd(StringRef Name) override
Definition MipsTargetStreamer.cpp:1110
void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg) override
Definition MipsTargetStreamer.cpp:1207
void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
Definition MipsTargetStreamer.cpp:1318
void emitDirectiveCpAdd(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:1232
void emitDirectiveCpLocal(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:1292
void emitTPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1070
void emitDirectiveSetMicroMips() override
Definition MipsTargetStreamer.cpp:1077
void emitLabel(MCSymbol *Symbol) override
Definition MipsTargetStreamer.cpp:932
void emitTPRel32Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1063
void emitDTPRel64Value(const MCExpr *) override
Definition MipsTargetStreamer.cpp:1056
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
Definition MipsTargetStreamer.cpp:1218
void finish() override
Definition MipsTargetStreamer.cpp:943
void emitDirectiveAbiCalls() override
Definition MipsTargetStreamer.cpp:1159
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
Definition MipsTargetStreamer.cpp:1225
void emitDirectiveCpLoad(MCRegister Reg) override
Definition MipsTargetStreamer.cpp:1243
void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override
Definition MipsTargetStreamer.cpp:1016
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
Definition MipsTargetStreamer.cpp:1361
void emitDirectiveSetMips16() override
Definition MipsTargetStreamer.cpp:1094
void emitDirectiveOptionPic0() override
Definition MipsTargetStreamer.cpp:1180
void emitDirectiveEnt(const MCSymbol &Symbol) override
Definition MipsTargetStreamer.cpp:1152
void emitDirectiveSetNoReorder() override
Definition MipsTargetStreamer.cpp:1102
void emitDirectiveNaNLegacy() override
Definition MipsTargetStreamer.cpp:1173
MCELFStreamer & getStreamer()
Definition MipsTargetStreamer.cpp:1030
void emitMipsAbiFlags()
Definition MipsTargetStreamer.cpp:1385
std::optional< MipsABIInfo > ABI
virtual void emitDirectiveSetMips64R5()
Definition MipsTargetStreamer.cpp:114
virtual void emitDirectiveSetAt()
Definition MipsTargetStreamer.cpp:79
virtual void emitDirectiveModuleNoVirt()
Definition MipsTargetStreamer.cpp:172
void emitRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCOperand Op2, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:224
virtual void emitDirectiveSetReorder()
Definition MipsTargetStreamer.cpp:65
virtual void emitDirectiveSetNoCRC()
Definition MipsTargetStreamer.cpp:74
virtual void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg)
Definition MipsTargetStreamer.cpp:92
void emitRRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCRegister Reg2, MCOperand Op3, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:242
virtual void emitDirectiveModuleNoGINV()
Definition MipsTargetStreamer.cpp:174
virtual void emitDirectiveCpLoad(MCRegister Reg)
Definition MipsTargetStreamer.cpp:130
virtual void emitDirectiveSetSoftFloat()
Definition MipsTargetStreamer.cpp:118
virtual void emitDirectiveSetNoDsp()
Definition MipsTargetStreamer.cpp:126
void forbidModuleDirective()
virtual void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister)
Definition MipsTargetStreamer.cpp:157
virtual void emitGPRel32Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:54
virtual void emitDirectiveSetNoMicroMips()
Definition MipsTargetStreamer.cpp:61
void emitRX(unsigned Opcode, MCRegister Reg0, MCOperand Op1, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:193
virtual void emitDirectiveSetDspr2()
Definition MipsTargetStreamer.cpp:125
virtual void emitDirectiveNaN2008()
Definition MipsTargetStreamer.cpp:87
virtual void emitDirectiveSetMips64R2()
Definition MipsTargetStreamer.cpp:112
virtual void emitDirectiveSetMips3D()
Definition MipsTargetStreamer.cpp:127
virtual void emitDirectiveEnd(StringRef Name)
Definition MipsTargetStreamer.cpp:84
virtual void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value)
Definition MipsTargetStreamer.cpp:175
virtual void emitDirectiveSetCRC()
Definition MipsTargetStreamer.cpp:73
virtual void emitTPRel64Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:59
virtual void emitDirectiveSetMips64R3()
Definition MipsTargetStreamer.cpp:113
virtual void emitDirectiveSetNoVirt()
Definition MipsTargetStreamer.cpp:76
virtual void emitDirectiveSetGINV()
Definition MipsTargetStreamer.cpp:77
virtual void emitDirectiveSetMacro()
Definition MipsTargetStreamer.cpp:67
virtual void emitDirectiveSetMips3()
Definition MipsTargetStreamer.cpp:103
void emitR(unsigned Opcode, MCRegister Reg0, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:184
virtual void emitDirectiveSetNoGINV()
Definition MipsTargetStreamer.cpp:78
virtual void setUsesMicroMips()
Definition MipsTargetStreamer.cpp:62
virtual void emitDirectiveSetMips32R3()
Definition MipsTargetStreamer.cpp:108
virtual void emitDirectiveSetMips32R2()
Definition MipsTargetStreamer.cpp:107
void emitRRI(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, int16_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:256
virtual void emitDirectiveEnt(const MCSymbol &Symbol)
Definition MipsTargetStreamer.cpp:85
virtual void emitDirectiveSetMips1()
Definition MipsTargetStreamer.cpp:101
virtual void emitDirectiveSetDsp()
Definition MipsTargetStreamer.cpp:124
virtual void emitDirectiveSetNoMips3D()
Definition MipsTargetStreamer.cpp:128
void emitLoadWithImmOffset(unsigned Opcode, MCRegister DstReg, MCRegister BaseReg, int64_t Offset, MCRegister TmpReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit a load instruction with an immediate offset.
Definition MipsTargetStreamer.cpp:362
virtual void emitDirectiveSetHardFloat()
Definition MipsTargetStreamer.cpp:121
void emitEmptyDelaySlot(bool hasShortDelaySlot, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:295
void emitAddu(MCRegister DstReg, MCRegister SrcReg, MCRegister TrgReg, bool Is64Bit, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:277
void emitRI(unsigned Opcode, MCRegister Reg0, int32_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:203
virtual void emitTPRel32Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:58
virtual void emitDirectiveSetNoMips16()
Definition MipsTargetStreamer.cpp:64
virtual void emitDirectiveSetMips5()
Definition MipsTargetStreamer.cpp:105
virtual void emitDirectiveSetMips2()
Definition MipsTargetStreamer.cpp:102
virtual void emitDirectiveSetPush()
Definition MipsTargetStreamer.cpp:117
virtual void emitDirectiveSetMt()
Definition MipsTargetStreamer.cpp:71
virtual void emitDirectiveSetNoOddSPReg()
Definition MipsTargetStreamer.cpp:180
virtual void emitGPRel64Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:55
void emitII(unsigned Opcode, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:214
void emitRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:208
virtual void emitDirectiveSetOddSPReg()
Definition MipsTargetStreamer.cpp:179
virtual void emitDirectiveSetNoMt()
Definition MipsTargetStreamer.cpp:72
virtual bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:148
virtual void emitDirectiveModuleCRC()
Definition MipsTargetStreamer.cpp:169
virtual void emitDirectiveModuleGINV()
Definition MipsTargetStreamer.cpp:173
virtual void emitDirectiveSetNoAt()
Definition MipsTargetStreamer.cpp:83
virtual void emitDirectiveNaNLegacy()
Definition MipsTargetStreamer.cpp:88
virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff)
Definition MipsTargetStreamer.cpp:94
virtual void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg)
Definition MipsTargetStreamer.cpp:154
void emitRRIII(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, int16_t Imm0, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:262
virtual void emitDirectiveSetPop()
Definition MipsTargetStreamer.cpp:116
virtual void emitDirectiveSetMicroMips()
Definition MipsTargetStreamer.cpp:60
virtual void emitDirectiveSetMips0()
Definition MipsTargetStreamer.cpp:100
virtual void emitDTPRel64Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:57
virtual void emitDirectiveModuleSoftFloat()
Definition MipsTargetStreamer.cpp:166
virtual void emitDirectiveSetArch(StringRef Arch)
Definition MipsTargetStreamer.cpp:97
virtual void emitDTPRel32Value(const MCExpr *)
Definition MipsTargetStreamer.cpp:56
virtual void emitDirectiveCpAdd(MCRegister Reg)
Definition MipsTargetStreamer.cpp:129
virtual void emitDirectiveSetAtWithArg(unsigned RegNo)
Definition MipsTargetStreamer.cpp:80
virtual void emitDirectiveModuleNoCRC()
Definition MipsTargetStreamer.cpp:170
virtual void emitDirectiveSetNoMacro()
Definition MipsTargetStreamer.cpp:68
void emitDSLL(MCRegister DstReg, MCRegister SrcReg, int16_t ShiftAmount, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:284
const MipsABIInfo & getABI() const
virtual void emitDirectiveModuleOddSPReg()
Definition MipsTargetStreamer.cpp:162
virtual void emitDirectiveInsn()
Definition MipsTargetStreamer.cpp:91
virtual void emitDirectiveSetMips64R6()
Definition MipsTargetStreamer.cpp:115
virtual void emitDirectiveSetNoMsa()
Definition MipsTargetStreamer.cpp:70
virtual void emitDirectiveSetVirt()
Definition MipsTargetStreamer.cpp:75
void emitGPRestore(int Offset, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit the $gp restore operation for .cprestore.
Definition MipsTargetStreamer.cpp:319
MipsTargetStreamer(MCStreamer &S)
Definition MipsTargetStreamer.cpp:49
virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff)
Definition MipsTargetStreamer.cpp:95
virtual void emitDirectiveModuleVirt()
Definition MipsTargetStreamer.cpp:171
void emitNop(SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:311
void emitRRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCRegister Reg2, SMLoc IDLoc, const MCSubtargetInfo *STI)
Definition MipsTargetStreamer.cpp:236
virtual void emitDirectiveSetNoReorder()
Definition MipsTargetStreamer.cpp:66
void emitStoreWithImmOffset(unsigned Opcode, MCRegister SrcReg, MCRegister BaseReg, int64_t Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit a store instruction with an offset.
Definition MipsTargetStreamer.cpp:325
virtual void emitDirectiveSetMips32()
Definition MipsTargetStreamer.cpp:106
virtual void emitDirectiveOptionPic0()
Definition MipsTargetStreamer.cpp:89
virtual void emitDirectiveModuleMT()
Definition MipsTargetStreamer.cpp:168
virtual void emitDirectiveModuleHardFloat()
Definition MipsTargetStreamer.cpp:167
virtual void emitDirectiveSetMips32R5()
Definition MipsTargetStreamer.cpp:109
virtual void emitDirectiveSetMsa()
Definition MipsTargetStreamer.cpp:69
virtual void emitDirectiveSetMips32R6()
Definition MipsTargetStreamer.cpp:110
virtual void emitDirectiveSetMips4()
Definition MipsTargetStreamer.cpp:104
virtual void emitDirectiveOptionPic2()
Definition MipsTargetStreamer.cpp:90
virtual void emitDirectiveCpLocal(MCRegister Reg)
Definition MipsTargetStreamer.cpp:131
virtual void emitDirectiveSetMips16()
Definition MipsTargetStreamer.cpp:63
virtual void emitDirectiveSetMips64()
Definition MipsTargetStreamer.cpp:111
virtual void emitDirectiveAbiCalls()
Definition MipsTargetStreamer.cpp:86
virtual void emitDirectiveModuleFP()
Definition MipsTargetStreamer.cpp:160
MipsABIFlagsSection ABIFlagsSection
Represents a location in source code.
StringRef - Represent a constant reference to a string, i.e.
LLVM_ABI std::string lower() const
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.
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
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.
const MCSpecifierExpr * createGpOff(const MCExpr *Expr, Specifier S, MCContext &Ctx)
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
constexpr bool isInt(int64_t x)
Checks if an integer fits into the given bit width.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
This struct is a compact representation of a valid (non-zero power of two) alignment.
constexpr uint64_t value() const
This is a hole in the type system and should not be abused.