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