MipsTargetStreamer.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola//===-- MipsTargetStreamer.h - Mips Target Streamer ------------*- C++ -*--===// 2320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 3320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// The LLVM Compiler Infrastructure 4320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 5320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// This file is distributed under the University of Illinois Open Source 6320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// License. See LICENSE.TXT for details. 7320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola// 8320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola//===----------------------------------------------------------------------===// 9320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 10320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#ifndef MIPSTARGETSTREAMER_H 11320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#define MIPSTARGETSTREAMER_H 12320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 134c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter#include "llvm/MC/MCELFStreamer.h" 14320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#include "llvm/MC/MCStreamer.h" 15320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola 16320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolanamespace llvm { 17320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolaclass MipsTargetStreamer : public MCTargetStreamer { 184c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter virtual void anchor(); 19e40e68add7f17f6ad5cd5e85ea44b149f6935147Eric Christopher 20320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindolapublic: 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetStreamer(MCStreamer &S); 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMicroMips() = 0; 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMicroMips() = 0; 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips16() = 0; 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMips16() = 0; 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetReorder() = 0; 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoReorder() = 0; 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMacro() = 0; 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMacro() = 0; 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetAt() = 0; 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoAt() = 0; 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnd(StringRef Name) = 0; 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0; 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveAbiCalls() = 0; 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic0() = 0; 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic2() = 0; 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFrame(unsigned StackReg, unsigned StackSize, 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned ReturnReg) = 0; 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) = 0; 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) = 0; 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips32R2() = 0; 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64() = 0; 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64R2() = 0; 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetDsp() = 0; 48320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola}; 494c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter 504c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter// This part is for ascii assembly output 514c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterclass MipsTargetAsmStreamer : public MipsTargetStreamer { 52a87a147ee7bb9adb4caea631ff0ba7e66bb9b0b5Bill Wendling formatted_raw_ostream &OS; 53a87a147ee7bb9adb4caea631ff0ba7e66bb9b0b5Bill Wendling 544c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterpublic: 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMicroMips(); 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMicroMips(); 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips16(); 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMips16(); 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetReorder(); 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoReorder(); 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMacro(); 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMacro(); 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetAt(); 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoAt(); 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnd(StringRef Name); 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnt(const MCSymbol &Symbol); 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveAbiCalls(); 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic0(); 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic2(); 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFrame(unsigned StackReg, unsigned StackSize, 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned ReturnReg); 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff); 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips32R2(); 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64(); 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64R2(); 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetDsp(); 824c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter}; 834c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter 844c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter// This part is for ELF object output 854c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterclass MipsTargetELFStreamer : public MipsTargetStreamer { 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool MicroMipsEnabled; 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const MCSubtargetInfo &STI; 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool Pic; 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 904c1625b3cb23745dba38e205b20e7b63954d8067Jack Carterpublic: 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool isMicroMipsEnabled() const { return MicroMipsEnabled; } 924c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter MCELFStreamer &getStreamer(); 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI); 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitLabel(MCSymbol *Symbol) override; 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitAssignment(MCSymbol *Symbol, const MCExpr *Value) override; 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void finish() override; 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMicroMips(); 10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMicroMips(); 10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips16(); 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMips16(); 10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetReorder(); 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoReorder(); 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMacro(); 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoMacro(); 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetAt(); 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetNoAt(); 11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnd(StringRef Name); 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveEnt(const MCSymbol &Symbol); 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveAbiCalls(); 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic0(); 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveOptionPic2(); 11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFrame(unsigned StackReg, unsigned StackSize, 11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned ReturnReg); 11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff); 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff); 12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips32R2(); 12236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64(); 12336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetMips64R2(); 12436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void emitDirectiveSetDsp(); 1254c1625b3cb23745dba38e205b20e7b63954d8067Jack Carter}; 126320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola} 127320296a4cfe414ce59f406b8a5ce15272f563103Rafael Espindola#endif 128