xref: /openbsd-src/gnu/llvm/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h (revision d415bd752c734aee168c4ee86ff32e8cc249eb16)
109467b48Spatrick //===-- RISCVTargetStreamer.h - RISCV Target Streamer ----------*- C++ -*--===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick 
9*d415bd75Srobert #ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H
10*d415bd75Srobert #define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H
1109467b48Spatrick 
12*d415bd75Srobert #include "RISCV.h"
1309467b48Spatrick #include "llvm/MC/MCStreamer.h"
14097a140dSpatrick #include "llvm/MC/MCSubtargetInfo.h"
1509467b48Spatrick 
1609467b48Spatrick namespace llvm {
1709467b48Spatrick 
1873471bf0Spatrick class formatted_raw_ostream;
1973471bf0Spatrick 
2009467b48Spatrick class RISCVTargetStreamer : public MCTargetStreamer {
21*d415bd75Srobert   RISCVABI::ABI TargetABI = RISCVABI::ABI_Unknown;
22*d415bd75Srobert 
2309467b48Spatrick public:
2409467b48Spatrick   RISCVTargetStreamer(MCStreamer &S);
25097a140dSpatrick   void finish() override;
26*d415bd75Srobert   virtual void reset();
2709467b48Spatrick 
28097a140dSpatrick   virtual void emitDirectiveOptionPush();
29097a140dSpatrick   virtual void emitDirectiveOptionPop();
30097a140dSpatrick   virtual void emitDirectiveOptionPIC();
31097a140dSpatrick   virtual void emitDirectiveOptionNoPIC();
32097a140dSpatrick   virtual void emitDirectiveOptionRVC();
33097a140dSpatrick   virtual void emitDirectiveOptionNoRVC();
34097a140dSpatrick   virtual void emitDirectiveOptionRelax();
35097a140dSpatrick   virtual void emitDirectiveOptionNoRelax();
36*d415bd75Srobert   virtual void emitDirectiveVariantCC(MCSymbol &Symbol);
37097a140dSpatrick   virtual void emitAttribute(unsigned Attribute, unsigned Value);
38097a140dSpatrick   virtual void finishAttributeSection();
39097a140dSpatrick   virtual void emitTextAttribute(unsigned Attribute, StringRef String);
40097a140dSpatrick   virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
41097a140dSpatrick                                     StringRef StringValue);
42097a140dSpatrick 
43097a140dSpatrick   void emitTargetAttributes(const MCSubtargetInfo &STI);
44*d415bd75Srobert   void setTargetABI(RISCVABI::ABI ABI);
getTargetABI()45*d415bd75Srobert   RISCVABI::ABI getTargetABI() const { return TargetABI; }
4609467b48Spatrick };
4709467b48Spatrick 
4809467b48Spatrick // This part is for ascii assembly output
4909467b48Spatrick class RISCVTargetAsmStreamer : public RISCVTargetStreamer {
5009467b48Spatrick   formatted_raw_ostream &OS;
5109467b48Spatrick 
52097a140dSpatrick   void finishAttributeSection() override;
53097a140dSpatrick   void emitAttribute(unsigned Attribute, unsigned Value) override;
54097a140dSpatrick   void emitTextAttribute(unsigned Attribute, StringRef String) override;
55097a140dSpatrick   void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
56097a140dSpatrick                             StringRef StringValue) override;
57097a140dSpatrick 
5809467b48Spatrick public:
5909467b48Spatrick   RISCVTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
6009467b48Spatrick 
6109467b48Spatrick   void emitDirectiveOptionPush() override;
6209467b48Spatrick   void emitDirectiveOptionPop() override;
63097a140dSpatrick   void emitDirectiveOptionPIC() override;
64097a140dSpatrick   void emitDirectiveOptionNoPIC() override;
6509467b48Spatrick   void emitDirectiveOptionRVC() override;
6609467b48Spatrick   void emitDirectiveOptionNoRVC() override;
6709467b48Spatrick   void emitDirectiveOptionRelax() override;
6809467b48Spatrick   void emitDirectiveOptionNoRelax() override;
69*d415bd75Srobert   void emitDirectiveVariantCC(MCSymbol &Symbol) override;
7009467b48Spatrick };
7109467b48Spatrick 
7209467b48Spatrick }
7309467b48Spatrick #endif
74