LLVM 24.0.0git
MipsTargetStreamer.h
Go to the documentation of this file.
1//===-- MipsTargetStreamer.h - Mips Target Streamer ------------*- C++ -*--===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETSTREAMER_H
10#define LLVM_LIB_TARGET_MIPS_MIPSTARGETSTREAMER_H
11
14#include "llvm/ADT/STLExtras.h"
17#include "llvm/MC/MCStreamer.h"
18
19namespace llvm {
20
22
24public:
26
27 virtual void emitGPRel32Value(const MCExpr *);
28 virtual void emitGPRel64Value(const MCExpr *);
29 virtual void emitDTPRel32Value(const MCExpr *);
30 virtual void emitDTPRel64Value(const MCExpr *);
31 virtual void emitTPRel32Value(const MCExpr *);
32 virtual void emitTPRel64Value(const MCExpr *);
33
34 virtual void setPic(bool Value) {}
35
36 virtual void emitDirectiveSetMicroMips();
37 virtual void emitDirectiveSetNoMicroMips();
38 virtual void setUsesMicroMips();
39 virtual void emitDirectiveSetMips16();
40 virtual void emitDirectiveSetNoMips16();
41
42 virtual void emitDirectiveSetReorder();
43 virtual void emitDirectiveSetNoReorder();
44 virtual void emitDirectiveSetMacro();
45 virtual void emitDirectiveSetNoMacro();
46 virtual void emitDirectiveSetMsa();
47 virtual void emitDirectiveSetNoMsa();
48 virtual void emitDirectiveSetMt();
49 virtual void emitDirectiveSetNoMt();
50 virtual void emitDirectiveSetCRC();
51 virtual void emitDirectiveSetNoCRC();
52 virtual void emitDirectiveSetVirt();
53 virtual void emitDirectiveSetNoVirt();
54 virtual void emitDirectiveSetGINV();
55 virtual void emitDirectiveSetNoGINV();
56 virtual void emitDirectiveSetEVA();
57 virtual void emitDirectiveSetNoEVA();
58 virtual void emitDirectiveSetAt();
59 virtual void emitDirectiveSetAtWithArg(unsigned RegNo);
60 virtual void emitDirectiveSetNoAt();
61 virtual void emitDirectiveEnd(StringRef Name);
62
63 virtual void emitDirectiveEnt(const MCSymbol &Symbol);
64 virtual void emitDirectiveAbiCalls();
65 virtual void emitDirectiveNaN2008();
66 virtual void emitDirectiveNaNLegacy();
67 virtual void emitDirectiveOptionPic0();
68 virtual void emitDirectiveOptionPic2();
69 virtual void emitDirectiveInsn();
70 virtual void emitFrame(MCRegister StackReg, unsigned StackSize,
72 virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff);
73 virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff);
74
75 virtual void emitDirectiveSetArch(StringRef Arch);
76 virtual void emitDirectiveSetMips0();
77 virtual void emitDirectiveSetMips1();
78 virtual void emitDirectiveSetMips2();
79 virtual void emitDirectiveSetMips3();
80 virtual void emitDirectiveSetMips4();
81 virtual void emitDirectiveSetMips5();
82 virtual void emitDirectiveSetMips32();
83 virtual void emitDirectiveSetMips32R2();
84 virtual void emitDirectiveSetMips32R3();
85 virtual void emitDirectiveSetMips32R5();
86 virtual void emitDirectiveSetMips32R6();
87 virtual void emitDirectiveSetMips64();
88 virtual void emitDirectiveSetMips64R2();
89 virtual void emitDirectiveSetMips64R3();
90 virtual void emitDirectiveSetMips64R5();
91 virtual void emitDirectiveSetMips64R6();
92 virtual void emitDirectiveSetDsp();
93 virtual void emitDirectiveSetDspr2();
94 virtual void emitDirectiveSetNoDsp();
95 virtual void emitDirectiveSetMips3D();
96 virtual void emitDirectiveSetNoMips3D();
97 virtual void emitDirectiveSetPop();
98 virtual void emitDirectiveSetPush();
99 virtual void emitDirectiveSetSoftFloat();
100 virtual void emitDirectiveSetHardFloat();
101
102 // PIC support
103 virtual void emitDirectiveCpAdd(MCRegister Reg);
104 virtual void emitDirectiveCpLoad(MCRegister Reg);
105 virtual void emitDirectiveCpLocal(MCRegister Reg);
106 virtual bool emitDirectiveCpRestore(int Offset,
107 function_ref<MCRegister()> GetATReg,
108 SMLoc IDLoc, const MCSubtargetInfo *STI);
109 virtual void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset,
110 const MCSymbol &Sym, bool IsReg);
111 virtual void emitDirectiveCpreturn(unsigned SaveLocation,
112 bool SaveLocationIsRegister);
113
114 // FP abiflags directives
115 virtual void emitDirectiveModuleFP();
116 virtual void emitDirectiveModuleOddSPReg();
117 virtual void emitDirectiveModuleSoftFloat();
118 virtual void emitDirectiveModuleHardFloat();
119 virtual void emitDirectiveModuleMT();
121 virtual void emitDirectiveSetOddSPReg();
122 virtual void emitDirectiveSetNoOddSPReg();
123 virtual void emitDirectiveModuleCRC();
124 virtual void emitDirectiveModuleNoCRC();
125 virtual void emitDirectiveModuleVirt();
126 virtual void emitDirectiveModuleNoVirt();
127 virtual void emitDirectiveModuleGINV();
128 virtual void emitDirectiveModuleNoGINV();
129
130 void emitR(unsigned Opcode, MCRegister Reg0, SMLoc IDLoc,
131 const MCSubtargetInfo *STI);
132 void emitII(unsigned Opcode, int16_t Imm1, int16_t Imm2, SMLoc IDLoc,
133 const MCSubtargetInfo *STI);
134 void emitRX(unsigned Opcode, MCRegister Reg0, MCOperand Op1, SMLoc IDLoc,
135 const MCSubtargetInfo *STI);
136 void emitRI(unsigned Opcode, MCRegister Reg0, int32_t Imm, SMLoc IDLoc,
137 const MCSubtargetInfo *STI);
138 void emitRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, SMLoc IDLoc,
139 const MCSubtargetInfo *STI);
140 void emitRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCOperand Op2,
141 SMLoc IDLoc, const MCSubtargetInfo *STI);
142 void emitRRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1,
143 MCRegister Reg2, SMLoc IDLoc, const MCSubtargetInfo *STI);
144 void emitRRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1,
145 MCRegister Reg2, MCOperand Op3, SMLoc IDLoc,
146 const MCSubtargetInfo *STI);
147 void emitRRI(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, int16_t Imm,
148 SMLoc IDLoc, const MCSubtargetInfo *STI);
149 void emitRRIII(unsigned Opcode, MCRegister Reg0, MCRegister Reg1,
150 int16_t Imm0, int16_t Imm1, int16_t Imm2, SMLoc IDLoc,
151 const MCSubtargetInfo *STI);
152 void emitAddu(MCRegister DstReg, MCRegister SrcReg, MCRegister TrgReg,
153 bool Is64Bit, const MCSubtargetInfo *STI);
154 void emitDSLL(MCRegister DstReg, MCRegister SrcReg, int16_t ShiftAmount,
155 SMLoc IDLoc, const MCSubtargetInfo *STI);
157 const MCSubtargetInfo *STI);
158 void emitNop(SMLoc IDLoc, const MCSubtargetInfo *STI);
159
160 /// Emit a store instruction with an offset. If the offset is out of range
161 /// then it will be synthesized using the assembler temporary.
162 ///
163 /// GetATReg() is a callback that can be used to obtain the current assembler
164 /// temporary and is only called when the assembler temporary is required. It
165 /// must handle the case where no assembler temporary is available (typically
166 /// by reporting an error).
167 void emitStoreWithImmOffset(unsigned Opcode, MCRegister SrcReg,
168 MCRegister BaseReg, int64_t Offset,
169 function_ref<MCRegister()> GetATReg, SMLoc IDLoc,
170 const MCSubtargetInfo *STI);
171 void emitLoadWithImmOffset(unsigned Opcode, MCRegister DstReg,
172 MCRegister BaseReg, int64_t Offset,
173 MCRegister TmpReg, SMLoc IDLoc,
174 const MCSubtargetInfo *STI);
175 void emitGPRestore(int Offset, SMLoc IDLoc, const MCSubtargetInfo *STI);
176
177 void forbidModuleDirective() { ModuleDirectiveAllowed = false; }
178 void reallowModuleDirective() { ModuleDirectiveAllowed = true; }
179 bool isModuleDirectiveAllowed() { return ModuleDirectiveAllowed; }
180
181 // This method enables template classes to set internal abi flags
182 // structure values.
183 template <class PredicateLibrary>
184 void updateABIInfo(const PredicateLibrary &P) {
185 ABI = P.getABI();
186 ABIFlagsSection.setAllFromPredicates(P);
187 }
188
190 const MipsABIInfo &getABI() const {
191 assert(ABI && "ABI hasn't been set!");
192 return *ABI;
193 }
194
195protected:
196 std::optional<MipsABIInfo> ABI;
198
200 unsigned GPRBitMask;
202
204 unsigned FPRBitMask;
206
209 unsigned FrameReg;
211 unsigned ReturnReg;
212
213private:
214 bool ModuleDirectiveAllowed;
215};
216
217// This part is for ascii assembly output
220
221public:
223
224 void emitGPRel32Value(const MCExpr *) override;
225 void emitGPRel64Value(const MCExpr *) override;
226 void emitDTPRel32Value(const MCExpr *) override;
227 void emitDTPRel64Value(const MCExpr *) override;
228 void emitTPRel32Value(const MCExpr *) override;
229 void emitTPRel64Value(const MCExpr *) override;
230
231 void emitDirectiveSetMicroMips() override;
232 void emitDirectiveSetNoMicroMips() override;
233 void emitDirectiveSetMips16() override;
234 void emitDirectiveSetNoMips16() override;
235
236 void emitDirectiveSetReorder() override;
237 void emitDirectiveSetNoReorder() override;
238 void emitDirectiveSetMacro() override;
239 void emitDirectiveSetNoMacro() override;
240 void emitDirectiveSetMsa() override;
241 void emitDirectiveSetNoMsa() override;
242 void emitDirectiveSetMt() override;
243 void emitDirectiveSetNoMt() override;
244 void emitDirectiveSetCRC() override;
245 void emitDirectiveSetNoCRC() override;
246 void emitDirectiveSetVirt() override;
247 void emitDirectiveSetNoVirt() override;
248 void emitDirectiveSetGINV() override;
249 void emitDirectiveSetNoGINV() override;
250 void emitDirectiveSetEVA() override;
251 void emitDirectiveSetNoEVA() override;
252 void emitDirectiveSetAt() override;
253 void emitDirectiveSetAtWithArg(unsigned RegNo) override;
254 void emitDirectiveSetNoAt() override;
255 void emitDirectiveEnd(StringRef Name) override;
256
257 void emitDirectiveEnt(const MCSymbol &Symbol) override;
258 void emitDirectiveAbiCalls() override;
259 void emitDirectiveNaN2008() override;
260 void emitDirectiveNaNLegacy() override;
261 void emitDirectiveOptionPic0() override;
262 void emitDirectiveOptionPic2() override;
263 void emitDirectiveInsn() override;
264 void emitFrame(MCRegister StackReg, unsigned StackSize,
265 MCRegister ReturnReg) override;
266 void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override;
267 void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override;
268
269 void emitDirectiveSetArch(StringRef Arch) override;
270 void emitDirectiveSetMips0() override;
271 void emitDirectiveSetMips1() override;
272 void emitDirectiveSetMips2() override;
273 void emitDirectiveSetMips3() override;
274 void emitDirectiveSetMips4() override;
275 void emitDirectiveSetMips5() override;
276 void emitDirectiveSetMips32() override;
277 void emitDirectiveSetMips32R2() override;
278 void emitDirectiveSetMips32R3() override;
279 void emitDirectiveSetMips32R5() override;
280 void emitDirectiveSetMips32R6() override;
281 void emitDirectiveSetMips64() override;
282 void emitDirectiveSetMips64R2() override;
283 void emitDirectiveSetMips64R3() override;
284 void emitDirectiveSetMips64R5() override;
285 void emitDirectiveSetMips64R6() override;
286 void emitDirectiveSetDsp() override;
287 void emitDirectiveSetDspr2() override;
288 void emitDirectiveSetNoDsp() override;
289 void emitDirectiveSetMips3D() override;
290 void emitDirectiveSetNoMips3D() override;
291 void emitDirectiveSetPop() override;
292 void emitDirectiveSetPush() override;
293 void emitDirectiveSetSoftFloat() override;
294 void emitDirectiveSetHardFloat() override;
295
296 // PIC support
297 void emitDirectiveCpAdd(MCRegister Reg) override;
298 void emitDirectiveCpLoad(MCRegister Reg) override;
299 void emitDirectiveCpLocal(MCRegister Reg) override;
300
301 /// Emit a .cprestore directive. If the offset is out of range then it will
302 /// be synthesized using the assembler temporary.
303 ///
304 /// GetATReg() is a callback that can be used to obtain the current assembler
305 /// temporary and is only called when the assembler temporary is required. It
306 /// must handle the case where no assembler temporary is available (typically
307 /// by reporting an error).
309 SMLoc IDLoc, const MCSubtargetInfo *STI) override;
310 void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset,
311 const MCSymbol &Sym, bool IsReg) override;
312 void emitDirectiveCpreturn(unsigned SaveLocation,
313 bool SaveLocationIsRegister) override;
314
315 // FP abiflags directives
316 void emitDirectiveModuleFP() override;
317 void emitDirectiveModuleOddSPReg() override;
318 void emitDirectiveModuleSoftFloat() override;
319 void emitDirectiveModuleHardFloat() override;
320 void emitDirectiveModuleMT() override;
321 void emitDirectiveModuleCRC() override;
322 void emitDirectiveModuleNoCRC() override;
323 void emitDirectiveModuleVirt() override;
324 void emitDirectiveModuleNoVirt() override;
325 void emitDirectiveModuleGINV() override;
326 void emitDirectiveModuleNoGINV() override;
328 void emitDirectiveSetOddSPReg() override;
329 void emitDirectiveSetNoOddSPReg() override;
330};
331
332// This part is for ELF object output
334 bool MicroMipsEnabled;
335 const MCSubtargetInfo &STI;
336 bool Pic;
337
338public:
339 bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
342
343 void setPic(bool Value) override { Pic = Value; }
344
345 void emitLabel(MCSymbol *Symbol) override;
346 void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
347 void finish() override;
348
349 void emitGPRel32Value(const MCExpr *) override;
350 void emitGPRel64Value(const MCExpr *) override;
351 void emitDTPRel32Value(const MCExpr *) override;
352 void emitDTPRel64Value(const MCExpr *) override;
353 void emitTPRel32Value(const MCExpr *) override;
354 void emitTPRel64Value(const MCExpr *) override;
355
356 void emitDirectiveSetMicroMips() override;
357 void emitDirectiveSetNoMicroMips() override;
358 void setUsesMicroMips() override;
359 void emitDirectiveSetMips16() override;
360
361 void emitDirectiveSetNoReorder() override;
362 void emitDirectiveEnd(StringRef Name) override;
363
364 void emitDirectiveEnt(const MCSymbol &Symbol) override;
365 void emitDirectiveAbiCalls() override;
366 void emitDirectiveNaN2008() override;
367 void emitDirectiveNaNLegacy() override;
368 void emitDirectiveOptionPic0() override;
369 void emitDirectiveOptionPic2() override;
370 void emitDirectiveInsn() override;
371 void emitFrame(MCRegister StackReg, unsigned StackSize,
372 MCRegister ReturnReg) override;
373 void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override;
374 void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override;
375
376 // PIC support
377 void emitDirectiveCpAdd(MCRegister Reg) override;
378 void emitDirectiveCpLoad(MCRegister Reg) override;
379 void emitDirectiveCpLocal(MCRegister Reg) override;
381 SMLoc IDLoc, const MCSubtargetInfo *STI) override;
382 void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset,
383 const MCSymbol &Sym, bool IsReg) override;
384 void emitDirectiveCpreturn(unsigned SaveLocation,
385 bool SaveLocationIsRegister) override;
386
387 void emitMipsAbiFlags();
388};
389}
390#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
unsigned Imm
Register Reg
static bool hasShortDelaySlot(MCInst &Inst)
#define P(N)
This file contains some templates that are useful if you are working with the STL at all.
Base class for the full range of assembler expressions which are needed for parsing.
Definition MCExpr.h:34
Instances of this class represent operands of the MCInst class.
Definition MCInst.h:40
Wrapper class representing physical registers. Should be passed by value.
Definition MCRegister.h:41
Streaming machine code generation interface.
Definition MCStreamer.h:222
Generic base class for all target subtargets.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
MCTargetStreamer(MCStreamer &S)
void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value) override
void emitDirectiveSetArch(StringRef Arch) override
void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
void emitDirectiveCpLocal(MCRegister Reg) override
void emitDirectiveEnt(const MCSymbol &Symbol) override
void emitDTPRel64Value(const MCExpr *) override
void emitTPRel64Value(const MCExpr *) override
bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
Emit a .cprestore directive.
void emitDirectiveCpAdd(MCRegister Reg) override
void emitDirectiveCpLoad(MCRegister Reg) override
void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg) override
void emitDirectiveEnd(StringRef Name) override
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
void emitDTPRel32Value(const MCExpr *) override
void emitTPRel32Value(const MCExpr *) override
void emitDirectiveSetAtWithArg(unsigned RegNo) override
void emitGPRel64Value(const MCExpr *) override
void emitGPRel32Value(const MCExpr *) override
bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI) override
void emitDTPRel32Value(const MCExpr *) override
void setPic(bool Value) override
MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
void emitGPRel64Value(const MCExpr *) override
void emitGPRel32Value(const MCExpr *) override
void emitDirectiveEnd(StringRef Name) override
void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg) override
void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
void emitDirectiveCpAdd(MCRegister Reg) override
void emitDirectiveCpLocal(MCRegister Reg) override
void emitTPRel64Value(const MCExpr *) override
void emitLabel(MCSymbol *Symbol) override
void emitTPRel32Value(const MCExpr *) override
void emitDTPRel64Value(const MCExpr *) override
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
void emitDirectiveCpLoad(MCRegister Reg) override
void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override
void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister) override
void emitDirectiveEnt(const MCSymbol &Symbol) override
std::optional< MipsABIInfo > ABI
void emitRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCOperand Op2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitFrame(MCRegister StackReg, unsigned StackSize, MCRegister ReturnReg)
void emitRRRX(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCRegister Reg2, MCOperand Op3, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveCpLoad(MCRegister Reg)
virtual void emitDirectiveCpreturn(unsigned SaveLocation, bool SaveLocationIsRegister)
virtual void emitGPRel32Value(const MCExpr *)
virtual void emitDirectiveSetNoMicroMips()
void emitRX(unsigned Opcode, MCRegister Reg0, MCOperand Op1, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveEnd(StringRef Name)
virtual void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value)
virtual void emitTPRel64Value(const MCExpr *)
void emitR(unsigned Opcode, MCRegister Reg0, SMLoc IDLoc, const MCSubtargetInfo *STI)
void emitRRI(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, int16_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveEnt(const MCSymbol &Symbol)
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.
void emitEmptyDelaySlot(bool hasShortDelaySlot, SMLoc IDLoc, const MCSubtargetInfo *STI)
void emitAddu(MCRegister DstReg, MCRegister SrcReg, MCRegister TrgReg, bool Is64Bit, const MCSubtargetInfo *STI)
void emitRI(unsigned Opcode, MCRegister Reg0, int32_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitTPRel32Value(const MCExpr *)
virtual void emitDirectiveSetNoMips16()
virtual void setPic(bool Value)
virtual void emitDirectiveSetNoOddSPReg()
virtual void emitGPRel64Value(const MCExpr *)
void emitII(unsigned Opcode, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
void emitRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual bool emitDirectiveCpRestore(int Offset, function_ref< MCRegister()> GetATReg, SMLoc IDLoc, const MCSubtargetInfo *STI)
void updateABIInfo(const PredicateLibrary &P)
virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff)
virtual void emitDirectiveCpsetup(MCRegister Reg, int RegOrOffset, const MCSymbol &Sym, bool IsReg)
void emitRRIII(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, int16_t Imm0, int16_t Imm1, int16_t Imm2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetMicroMips()
virtual void emitDTPRel64Value(const MCExpr *)
virtual void emitDirectiveModuleSoftFloat()
virtual void emitDirectiveSetArch(StringRef Arch)
virtual void emitDTPRel32Value(const MCExpr *)
virtual void emitDirectiveCpAdd(MCRegister Reg)
virtual void emitDirectiveSetAtWithArg(unsigned RegNo)
void emitDSLL(MCRegister DstReg, MCRegister SrcReg, int16_t ShiftAmount, SMLoc IDLoc, const MCSubtargetInfo *STI)
const MipsABIInfo & getABI() const
virtual void emitDirectiveModuleOddSPReg()
void emitGPRestore(int Offset, SMLoc IDLoc, const MCSubtargetInfo *STI)
Emit the $gp restore operation for .cprestore.
virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff)
void emitNop(SMLoc IDLoc, const MCSubtargetInfo *STI)
void emitRRR(unsigned Opcode, MCRegister Reg0, MCRegister Reg1, MCRegister Reg2, SMLoc IDLoc, const MCSubtargetInfo *STI)
virtual void emitDirectiveSetNoReorder()
MipsABIFlagsSection & getABIFlagsSection()
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.
virtual void emitDirectiveModuleHardFloat()
virtual void emitDirectiveCpLocal(MCRegister Reg)
MipsABIFlagsSection ABIFlagsSection
Represents a location in source code.
Definition SMLoc.h:22
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
LLVM Value Representation.
Definition Value.h:75
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 is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:577