Path: blob/main/contrib/llvm-project/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h
35294 views
//===-- RISCVTargetStreamer.h - RISC-V Target Streamer ---------*- C++ -*--===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H9#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H1011#include "RISCV.h"12#include "llvm/MC/MCStreamer.h"13#include "llvm/MC/MCSubtargetInfo.h"1415namespace llvm {1617class formatted_raw_ostream;1819enum class RISCVOptionArchArgType {20Full,21Plus,22Minus,23};2425struct RISCVOptionArchArg {26RISCVOptionArchArgType Type;27std::string Value;2829RISCVOptionArchArg(RISCVOptionArchArgType Type, std::string Value)30: Type(Type), Value(Value) {}31};3233class RISCVTargetStreamer : public MCTargetStreamer {34RISCVABI::ABI TargetABI = RISCVABI::ABI_Unknown;35bool HasRVC = false;36bool HasTSO = false;3738public:39RISCVTargetStreamer(MCStreamer &S);40void finish() override;41virtual void reset();4243virtual void emitDirectiveOptionPush();44virtual void emitDirectiveOptionPop();45virtual void emitDirectiveOptionPIC();46virtual void emitDirectiveOptionNoPIC();47virtual void emitDirectiveOptionRVC();48virtual void emitDirectiveOptionNoRVC();49virtual void emitDirectiveOptionRelax();50virtual void emitDirectiveOptionNoRelax();51virtual void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args);52virtual void emitDirectiveVariantCC(MCSymbol &Symbol);53virtual void emitAttribute(unsigned Attribute, unsigned Value);54virtual void finishAttributeSection();55virtual void emitTextAttribute(unsigned Attribute, StringRef String);56virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,57StringRef StringValue);5859void emitTargetAttributes(const MCSubtargetInfo &STI, bool EmitStackAlign);60void setTargetABI(RISCVABI::ABI ABI);61RISCVABI::ABI getTargetABI() const { return TargetABI; }62void setFlagsFromFeatures(const MCSubtargetInfo &STI);63bool hasRVC() const { return HasRVC; }64bool hasTSO() const { return HasTSO; }65};6667// This part is for ascii assembly output68class RISCVTargetAsmStreamer : public RISCVTargetStreamer {69formatted_raw_ostream &OS;7071void finishAttributeSection() override;72void emitAttribute(unsigned Attribute, unsigned Value) override;73void emitTextAttribute(unsigned Attribute, StringRef String) override;74void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,75StringRef StringValue) override;7677public:78RISCVTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);7980void emitDirectiveOptionPush() override;81void emitDirectiveOptionPop() override;82void emitDirectiveOptionPIC() override;83void emitDirectiveOptionNoPIC() override;84void emitDirectiveOptionRVC() override;85void emitDirectiveOptionNoRVC() override;86void emitDirectiveOptionRelax() override;87void emitDirectiveOptionNoRelax() override;88void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args) override;89void emitDirectiveVariantCC(MCSymbol &Symbol) override;90};9192}93#endif949596