blob: a8a846023d3234e600cd03e4a66a08eadf96d347 [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:
Rafael Espindola24ea09e2014-01-26 06:06:37 +000021 MipsTargetStreamer(MCStreamer &S);
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;
Rafael Espindolaeb0a8af2014-01-26 05:06:48 +000026
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
Rafael Espindola6633d572014-01-14 18:57:12 +000035 virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0;
Jack Carter0cd3c192014-01-06 23:27:31 +000036 virtual void emitDirectiveAbiCalls() = 0;
37 virtual void emitDirectiveOptionPic0() = 0;
Rafael Espindolaa17151a2013-10-08 13:08:17 +000038};
Jack Carter86ac5c12013-11-18 23:55:27 +000039
40// This part is for ascii assembly output
41class MipsTargetAsmStreamer : public MipsTargetStreamer {
Jack Carter6ef6cc52013-11-19 20:53:28 +000042 formatted_raw_ostream &OS;
43
Jack Carter86ac5c12013-11-18 23:55:27 +000044public:
Rafael Espindola24ea09e2014-01-26 06:06:37 +000045 MipsTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000046 virtual void emitDirectiveSetMicroMips();
47 virtual void emitDirectiveSetNoMicroMips();
Rafael Espindola6633d572014-01-14 18:57:12 +000048 virtual void emitDirectiveSetMips16();
49 virtual void emitDirectiveSetNoMips16();
Rafael Espindolaeb0a8af2014-01-26 05:06:48 +000050
51 virtual void emitDirectiveSetReorder();
52 virtual void emitDirectiveSetNoReorder();
53 virtual void emitDirectiveSetMacro();
54 virtual void emitDirectiveSetNoMacro();
55 virtual void emitDirectiveSetAt();
56 virtual void emitDirectiveSetNoAt();
57 virtual void emitDirectiveEnd(StringRef Name);
58
Rafael Espindola6633d572014-01-14 18:57:12 +000059 virtual void emitDirectiveEnt(const MCSymbol &Symbol);
Jack Carter0cd3c192014-01-06 23:27:31 +000060 virtual void emitDirectiveAbiCalls();
61 virtual void emitDirectiveOptionPic0();
Jack Carter86ac5c12013-11-18 23:55:27 +000062};
63
64// This part is for ELF object output
65class MipsTargetELFStreamer : public MipsTargetStreamer {
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000066 bool MicroMipsEnabled;
Jack Carter39536722014-01-22 23:08:42 +000067
Jack Carter86ac5c12013-11-18 23:55:27 +000068public:
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000069 bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
Jack Carter86ac5c12013-11-18 23:55:27 +000070 MCELFStreamer &getStreamer();
Rafael Espindolacb1953f2014-01-26 06:57:13 +000071 MipsTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000072
73 virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
74
Rafael Espindola6d5f7ce2014-01-14 04:25:13 +000075 virtual void emitDirectiveSetMicroMips();
76 virtual void emitDirectiveSetNoMicroMips();
Rafael Espindola6633d572014-01-14 18:57:12 +000077 virtual void emitDirectiveSetMips16();
78 virtual void emitDirectiveSetNoMips16();
Rafael Espindolaeb0a8af2014-01-26 05:06:48 +000079
80 virtual void emitDirectiveSetReorder();
81 virtual void emitDirectiveSetNoReorder();
82 virtual void emitDirectiveSetMacro();
83 virtual void emitDirectiveSetNoMacro();
84 virtual void emitDirectiveSetAt();
85 virtual void emitDirectiveSetNoAt();
86 virtual void emitDirectiveEnd(StringRef Name);
87
Rafael Espindola6633d572014-01-14 18:57:12 +000088 virtual void emitDirectiveEnt(const MCSymbol &Symbol);
Jack Carter0cd3c192014-01-06 23:27:31 +000089 virtual void emitDirectiveAbiCalls();
90 virtual void emitDirectiveOptionPic0();
Jack Carter86ac5c12013-11-18 23:55:27 +000091};
Rafael Espindolaa17151a2013-10-08 13:08:17 +000092}
Rafael Espindolaa17151a2013-10-08 13:08:17 +000093#endif