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 MIPSTARGETSTREAMER_H 11 #define MIPSTARGETSTREAMER_H 12 13 #include "llvm/MC/MCELFStreamer.h" 14 #include "llvm/MC/MCStreamer.h" 15 16 namespace llvm { 17 class MipsTargetStreamer : public MCTargetStreamer { 18 virtual void anchor(); 19 20 public: 21 MipsTargetStreamer(MCStreamer &S); 22 virtual void emitDirectiveSetMicroMips() = 0; 23 virtual void emitDirectiveSetNoMicroMips() = 0; 24 virtual void emitDirectiveSetMips16() = 0; 25 virtual void emitDirectiveSetNoMips16() = 0; 26 27 virtual void emitDirectiveSetReorder() = 0; 28 virtual void emitDirectiveSetNoReorder() = 0; 29 virtual void emitDirectiveSetMacro() = 0; 30 virtual void emitDirectiveSetNoMacro() = 0; 31 virtual void emitDirectiveSetAt() = 0; 32 virtual void emitDirectiveSetNoAt() = 0; 33 virtual void emitDirectiveEnd(StringRef Name) = 0; 34 35 virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0; 36 virtual void emitDirectiveAbiCalls() = 0; 37 virtual void emitDirectiveOptionPic0() = 0; 38 virtual void emitFrame(unsigned StackReg, unsigned StackSize, 39 unsigned ReturnReg) = 0; 40 virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) = 0; 41 virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) = 0; 42 }; 43 44 // This part is for ascii assembly output 45 class MipsTargetAsmStreamer : public MipsTargetStreamer { 46 formatted_raw_ostream &OS; 47 48 public: 49 MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 50 virtual void emitDirectiveSetMicroMips(); 51 virtual void emitDirectiveSetNoMicroMips(); 52 virtual void emitDirectiveSetMips16(); 53 virtual void emitDirectiveSetNoMips16(); 54 55 virtual void emitDirectiveSetReorder(); 56 virtual void emitDirectiveSetNoReorder(); 57 virtual void emitDirectiveSetMacro(); 58 virtual void emitDirectiveSetNoMacro(); 59 virtual void emitDirectiveSetAt(); 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 emitDirectiveOptionPic0(); 66 virtual void emitFrame(unsigned StackReg, unsigned StackSize, 67 unsigned ReturnReg); 68 virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff); 69 virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); 70 }; 71 72 // This part is for ELF object output 73 class MipsTargetELFStreamer : public MipsTargetStreamer { 74 bool MicroMipsEnabled; 75 const MCSubtargetInfo &STI; 76 77 public: 78 bool isMicroMipsEnabled() const { return MicroMipsEnabled; } 79 MCELFStreamer &getStreamer(); 80 MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI); 81 82 virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE; 83 void finish() LLVM_OVERRIDE; 84 85 virtual void emitDirectiveSetMicroMips(); 86 virtual void emitDirectiveSetNoMicroMips(); 87 virtual void emitDirectiveSetMips16(); 88 virtual void emitDirectiveSetNoMips16(); 89 90 virtual void emitDirectiveSetReorder(); 91 virtual void emitDirectiveSetNoReorder(); 92 virtual void emitDirectiveSetMacro(); 93 virtual void emitDirectiveSetNoMacro(); 94 virtual void emitDirectiveSetAt(); 95 virtual void emitDirectiveSetNoAt(); 96 virtual void emitDirectiveEnd(StringRef Name); 97 98 virtual void emitDirectiveEnt(const MCSymbol &Symbol); 99 virtual void emitDirectiveAbiCalls(); 100 virtual void emitDirectiveOptionPic0(); 101 virtual void emitFrame(unsigned StackReg, unsigned StackSize, 102 unsigned ReturnReg); 103 virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff); 104 virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); 105 }; 106 } 107 #endif 108