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