LLVM  3.7.0
MipsTargetStreamer.h
Go to the documentation of this file.
1 //===-- MipsTargetStreamer.h - Mips Target Streamer ------------*- C++ -*--===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETSTREAMER_H
11 #define LLVM_LIB_TARGET_MIPS_MIPSTARGETSTREAMER_H
12 
15 #include "llvm/MC/MCELFStreamer.h"
16 #include "llvm/MC/MCRegisterInfo.h"
17 #include "llvm/MC/MCStreamer.h"
18 
19 namespace llvm {
20 
21 struct MipsABIFlagsSection;
22 
24 public:
26  virtual void emitDirectiveSetMicroMips();
27  virtual void emitDirectiveSetNoMicroMips();
28  virtual void emitDirectiveSetMips16();
29  virtual void emitDirectiveSetNoMips16();
30 
31  virtual void emitDirectiveSetReorder();
32  virtual void emitDirectiveSetNoReorder();
33  virtual void emitDirectiveSetMacro();
34  virtual void emitDirectiveSetNoMacro();
35  virtual void emitDirectiveSetMsa();
36  virtual void emitDirectiveSetNoMsa();
37  virtual void emitDirectiveSetAt();
38  virtual void emitDirectiveSetAtWithArg(unsigned RegNo);
39  virtual void emitDirectiveSetNoAt();
40  virtual void emitDirectiveEnd(StringRef Name);
41 
42  virtual void emitDirectiveEnt(const MCSymbol &Symbol);
43  virtual void emitDirectiveAbiCalls();
44  virtual void emitDirectiveNaN2008();
45  virtual void emitDirectiveNaNLegacy();
46  virtual void emitDirectiveOptionPic0();
47  virtual void emitDirectiveOptionPic2();
48  virtual void emitDirectiveInsn();
49  virtual void emitFrame(unsigned StackReg, unsigned StackSize,
50  unsigned ReturnReg);
51  virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff);
52  virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff);
53 
54  virtual void emitDirectiveSetArch(StringRef Arch);
55  virtual void emitDirectiveSetMips0();
56  virtual void emitDirectiveSetMips1();
57  virtual void emitDirectiveSetMips2();
58  virtual void emitDirectiveSetMips3();
59  virtual void emitDirectiveSetMips4();
60  virtual void emitDirectiveSetMips5();
61  virtual void emitDirectiveSetMips32();
62  virtual void emitDirectiveSetMips32R2();
63  virtual void emitDirectiveSetMips32R3();
64  virtual void emitDirectiveSetMips32R5();
65  virtual void emitDirectiveSetMips32R6();
66  virtual void emitDirectiveSetMips64();
67  virtual void emitDirectiveSetMips64R2();
68  virtual void emitDirectiveSetMips64R3();
69  virtual void emitDirectiveSetMips64R5();
70  virtual void emitDirectiveSetMips64R6();
71  virtual void emitDirectiveSetDsp();
72  virtual void emitDirectiveSetNoDsp();
73  virtual void emitDirectiveSetPop();
74  virtual void emitDirectiveSetPush();
75  virtual void emitDirectiveSetSoftFloat();
76  virtual void emitDirectiveSetHardFloat();
77 
78  // PIC support
79  virtual void emitDirectiveCpLoad(unsigned RegNo);
80  virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset,
81  const MCSymbol &Sym, bool IsReg);
82 
83  // FP abiflags directives
84  virtual void emitDirectiveModuleFP();
85  virtual void emitDirectiveModuleOddSPReg();
86  virtual void emitDirectiveModuleSoftFloat();
87  virtual void emitDirectiveModuleHardFloat();
89  virtual void emitDirectiveSetOddSPReg();
90  virtual void emitDirectiveSetNoOddSPReg();
91 
92  void forbidModuleDirective() { ModuleDirectiveAllowed = false; }
93  void reallowModuleDirective() { ModuleDirectiveAllowed = true; }
94  bool isModuleDirectiveAllowed() { return ModuleDirectiveAllowed; }
95 
96  // This method enables template classes to set internal abi flags
97  // structure values.
98  template <class PredicateLibrary>
99  void updateABIInfo(const PredicateLibrary &P) {
100  ABI = &P.getABI();
102  }
103 
105  const MipsABIInfo &getABI() const {
106  assert(ABI && "ABI hasn't been set!");
107  return *ABI;
108  }
109 
110 protected:
111  const MipsABIInfo *ABI;
113 
115  unsigned GPRBitMask;
117 
119  unsigned FPRBitMask;
121 
124  unsigned FrameReg;
125  unsigned ReturnReg;
126 
127 private:
128  bool ModuleDirectiveAllowed;
129 };
130 
131 // This part is for ascii assembly output
134 
135 public:
137  void emitDirectiveSetMicroMips() override;
138  void emitDirectiveSetNoMicroMips() override;
139  void emitDirectiveSetMips16() override;
140  void emitDirectiveSetNoMips16() override;
141 
142  void emitDirectiveSetReorder() override;
143  void emitDirectiveSetNoReorder() override;
144  void emitDirectiveSetMacro() override;
145  void emitDirectiveSetNoMacro() override;
146  void emitDirectiveSetMsa() override;
147  void emitDirectiveSetNoMsa() override;
148  void emitDirectiveSetAt() override;
149  void emitDirectiveSetAtWithArg(unsigned RegNo) override;
150  void emitDirectiveSetNoAt() override;
151  void emitDirectiveEnd(StringRef Name) override;
152 
153  void emitDirectiveEnt(const MCSymbol &Symbol) override;
154  void emitDirectiveAbiCalls() override;
155  void emitDirectiveNaN2008() override;
156  void emitDirectiveNaNLegacy() override;
157  void emitDirectiveOptionPic0() override;
158  void emitDirectiveOptionPic2() override;
159  void emitDirectiveInsn() override;
160  void emitFrame(unsigned StackReg, unsigned StackSize,
161  unsigned ReturnReg) override;
162  void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override;
163  void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override;
164 
165  void emitDirectiveSetArch(StringRef Arch) override;
166  void emitDirectiveSetMips0() override;
167  void emitDirectiveSetMips1() override;
168  void emitDirectiveSetMips2() override;
169  void emitDirectiveSetMips3() override;
170  void emitDirectiveSetMips4() override;
171  void emitDirectiveSetMips5() override;
172  void emitDirectiveSetMips32() override;
173  void emitDirectiveSetMips32R2() override;
174  void emitDirectiveSetMips32R3() override;
175  void emitDirectiveSetMips32R5() override;
176  void emitDirectiveSetMips32R6() override;
177  void emitDirectiveSetMips64() override;
178  void emitDirectiveSetMips64R2() override;
179  void emitDirectiveSetMips64R3() override;
180  void emitDirectiveSetMips64R5() override;
181  void emitDirectiveSetMips64R6() override;
182  void emitDirectiveSetDsp() override;
183  void emitDirectiveSetNoDsp() override;
184  void emitDirectiveSetPop() override;
185  void emitDirectiveSetPush() override;
186  void emitDirectiveSetSoftFloat() override;
187  void emitDirectiveSetHardFloat() override;
188 
189  // PIC support
190  void emitDirectiveCpLoad(unsigned RegNo) override;
191  void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset,
192  const MCSymbol &Sym, bool IsReg) override;
193 
194  // FP abiflags directives
195  void emitDirectiveModuleFP() override;
196  void emitDirectiveModuleOddSPReg() override;
197  void emitDirectiveModuleSoftFloat() override;
198  void emitDirectiveModuleHardFloat() override;
200  void emitDirectiveSetOddSPReg() override;
201  void emitDirectiveSetNoOddSPReg() override;
202 };
203 
204 // This part is for ELF object output
206  bool MicroMipsEnabled;
207  const MCSubtargetInfo &STI;
208  bool Pic;
209 
210 public:
211  bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
214 
215  void emitLabel(MCSymbol *Symbol) override;
216  void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
217  void finish() override;
218 
219  void emitDirectiveSetMicroMips() override;
220  void emitDirectiveSetNoMicroMips() override;
221  void emitDirectiveSetMips16() override;
222 
223  void emitDirectiveSetNoReorder() override;
224  void emitDirectiveEnd(StringRef Name) override;
225 
226  void emitDirectiveEnt(const MCSymbol &Symbol) override;
227  void emitDirectiveAbiCalls() override;
228  void emitDirectiveNaN2008() override;
229  void emitDirectiveNaNLegacy() override;
230  void emitDirectiveOptionPic0() override;
231  void emitDirectiveOptionPic2() override;
232  void emitDirectiveInsn() override;
233  void emitFrame(unsigned StackReg, unsigned StackSize,
234  unsigned ReturnReg) override;
235  void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override;
236  void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override;
237 
238  // PIC support
239  void emitDirectiveCpLoad(unsigned RegNo) override;
240  void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset,
241  const MCSymbol &Sym, bool IsReg) override;
242 
243  void emitMipsAbiFlags();
244 };
245 }
246 #endif
void emitDirectiveEnd(StringRef Name) override
virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff)
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
void emitDirectiveModuleSoftFloat() override
void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) override
virtual void emitDirectiveOptionPic2()
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:39
void emitDirectiveSetNoMicroMips() override
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
Target specific streamer interface.
Definition: MCStreamer.h:73
virtual void emitDirectiveSetNoReorder()
virtual void emitDirectiveModuleHardFloat()
void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value) override
MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
void emitDirectiveCpLoad(unsigned RegNo) override
virtual void emitDirectiveSetMips32R3()
virtual void emitDirectiveSetMicroMips()
virtual void emitDirectiveSetMips3()
void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg) override
virtual void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg)
virtual void emitDirectiveSetMips0()
virtual void emitDirectiveSetSoftFloat()
virtual void emitDirectiveSetNoMacro()
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:33
virtual void emitDirectiveEnd(StringRef Name)
virtual void emitDirectiveSetMips32R6()
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
virtual void emitDirectiveSetMips1()
virtual void emitDirectiveModuleOddSPReg()
virtual void emitDirectiveModuleSoftFloat()
MipsABIFlagsSection ABIFlagsSection
virtual void emitDirectiveModuleFP()
void emitLabel(MCSymbol *Symbol) override
virtual void emitDirectiveSetOddSPReg()
virtual void emitDirectiveSetMips64R2()
virtual void emitDirectiveSetNoOddSPReg()
void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg) override
#define P(N)
Streaming machine code generation interface.
Definition: MCStreamer.h:157
virtual void emitDirectiveSetMips4()
virtual void emitDirectiveSetNoMicroMips()
virtual void emitDirectiveSetNoDsp()
virtual void emitDirectiveSetMips16()
virtual void emitDirectiveSetMacro()
virtual void emitDirectiveCpLoad(unsigned RegNo)
virtual void emitDirectiveSetArch(StringRef Arch)
virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff)
virtual void emitDirectiveSetMips32R5()
virtual void emitDirectiveSetMips32R2()
virtual void emitDirectiveSetFp(MipsABIFlagsSection::FpABIKind Value)
virtual void emitDirectiveAbiCalls()
void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) override
virtual void emitDirectiveSetMips64R6()
void emitDirectiveEnt(const MCSymbol &Symbol) override
void emitDirectiveEnt(const MCSymbol &Symbol) override
void setAllFromPredicates(const PredicateLibrary &P)
virtual void emitDirectiveOptionPic0()
void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override
const MipsABIInfo & getABI() const
virtual void emitDirectiveSetNoMips16()
void emitDirectiveSetNoOddSPReg() override
void emitDirectiveSetAtWithArg(unsigned RegNo) override
void emitDirectiveEnd(StringRef Name) override
MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
virtual void emitDirectiveCpsetup(unsigned RegNo, int RegOrOffset, const MCSymbol &Sym, bool IsReg)
virtual void emitDirectiveSetMips64R3()
virtual void emitDirectiveSetMips64R5()
void emitDirectiveCpLoad(unsigned RegNo) override
void updateABIInfo(const PredicateLibrary &P)
virtual void emitDirectiveEnt(const MCSymbol &Symbol)
virtual void emitDirectiveSetHardFloat()
virtual void emitDirectiveSetMips64()
virtual void emitDirectiveSetMips5()
virtual void emitDirectiveSetMips2()
MCSubtargetInfo - Generic base class for all target subtargets.
void emitDirectiveSetNoMicroMips() override
void emitFrame(unsigned StackReg, unsigned StackSize, unsigned ReturnReg) override
void emitDirectiveSetArch(StringRef Arch) override
void emitDirectiveModuleOddSPReg() override
virtual void emitDirectiveSetReorder()
LLVM Value Representation.
Definition: Value.h:69
virtual void emitDirectiveNaNLegacy()
virtual void emitDirectiveSetMips32()
virtual void emitDirectiveSetNoMsa()
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:40
MipsABIFlagsSection & getABIFlagsSection()
virtual void emitDirectiveSetAtWithArg(unsigned RegNo)
void emitDirectiveModuleHardFloat() override