blob: 5b7591c80e708a3c1c1d91cb041f02fcb58b46e5 [file] [log] [blame]
Rafael Espindolaa17151a2013-10-08 13:08:17 +00001//===-- 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
Jack Carter86ac5c12013-11-18 23:55:27 +000013#include "llvm/MC/MCELFStreamer.h"
Rafael Espindolaa17151a2013-10-08 13:08:17 +000014#include "llvm/MC/MCStreamer.h"
15
16namespace llvm {
17class MipsTargetStreamer : public MCTargetStreamer {
Jack Carter86ac5c12013-11-18 23:55:27 +000018 virtual void anchor();
Eric Christopher37776fb2013-11-19 02:01:07 +000019
Rafael Espindolaa17151a2013-10-08 13:08:17 +000020public:
21 virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000022 virtual void emitDirectiveSetMicroMips() = 0;
23 virtual void emitDirectiveSetNoMicroMips() = 0;
Rafael Espindola6633d572014-01-14 18:57:12 +000024 virtual void emitDirectiveSetMips16() = 0;
25 virtual void emitDirectiveSetNoMips16() = 0;
26 virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0;
Jack Carter0cd3c192014-01-06 23:27:31 +000027 virtual void emitDirectiveAbiCalls() = 0;
28 virtual void emitDirectiveOptionPic0() = 0;
Jack Carter39536722014-01-22 23:08:42 +000029 virtual void emitDirectiveSetMips16(bool IsMips16) = 0;
Rafael Espindolaa17151a2013-10-08 13:08:17 +000030};
Jack Carter86ac5c12013-11-18 23:55:27 +000031
32// This part is for ascii assembly output
33class MipsTargetAsmStreamer : public MipsTargetStreamer {
Jack Carter6ef6cc52013-11-19 20:53:28 +000034 formatted_raw_ostream &OS;
35
Jack Carter86ac5c12013-11-18 23:55:27 +000036public:
Jack Carter6ef6cc52013-11-19 20:53:28 +000037 MipsTargetAsmStreamer(formatted_raw_ostream &OS);
Jack Carter86ac5c12013-11-18 23:55:27 +000038 virtual void emitMipsHackELFFlags(unsigned Flags);
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000039 virtual void emitDirectiveSetMicroMips();
40 virtual void emitDirectiveSetNoMicroMips();
Rafael Espindola6633d572014-01-14 18:57:12 +000041 virtual void emitDirectiveSetMips16();
42 virtual void emitDirectiveSetNoMips16();
43 virtual void emitDirectiveEnt(const MCSymbol &Symbol);
Jack Carter0cd3c192014-01-06 23:27:31 +000044 virtual void emitDirectiveAbiCalls();
45 virtual void emitDirectiveOptionPic0();
Jack Carter39536722014-01-22 23:08:42 +000046 virtual void emitDirectiveSetMips16(bool IsMips16);
Jack Carter86ac5c12013-11-18 23:55:27 +000047};
48
49// This part is for ELF object output
50class MipsTargetELFStreamer : public MipsTargetStreamer {
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000051 bool MicroMipsEnabled;
Jack Carter39536722014-01-22 23:08:42 +000052
Jack Carter86ac5c12013-11-18 23:55:27 +000053public:
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000054 bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
Jack Carter86ac5c12013-11-18 23:55:27 +000055 MCELFStreamer &getStreamer();
Jack Carter0cd3c192014-01-06 23:27:31 +000056 MipsTargetELFStreamer();
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000057
58 virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
59
Jack Carter0cd3c192014-01-06 23:27:31 +000060 // FIXME: emitMipsHackELFFlags() will be removed from this class.
Jack Carter86ac5c12013-11-18 23:55:27 +000061 virtual void emitMipsHackELFFlags(unsigned Flags);
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000062 virtual void emitDirectiveSetMicroMips();
63 virtual void emitDirectiveSetNoMicroMips();
Rafael Espindola6633d572014-01-14 18:57:12 +000064 virtual void emitDirectiveSetMips16();
65 virtual void emitDirectiveSetNoMips16();
66 virtual void emitDirectiveEnt(const MCSymbol &Symbol);
Jack Carter0cd3c192014-01-06 23:27:31 +000067 virtual void emitDirectiveAbiCalls();
68 virtual void emitDirectiveOptionPic0();
Jack Carter39536722014-01-22 23:08:42 +000069 virtual void emitDirectiveSetMips16(bool IsMips16);
Jack Carter86ac5c12013-11-18 23:55:27 +000070};
Rafael Espindolaa17151a2013-10-08 13:08:17 +000071}
Rafael Espindolaa17151a2013-10-08 13:08:17 +000072#endif