brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · d7b3b1e Raw
100 lines · c
1//===-- RISCVTargetStreamer.h - RISC-V Target Streamer ---------*- C++ -*--===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H10#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H11 12#include "RISCV.h"13#include "llvm/MC/MCStreamer.h"14#include "llvm/MC/MCSubtargetInfo.h"15 16namespace llvm {17 18class formatted_raw_ostream;19 20enum class RISCVOptionArchArgType {21  Full,22  Plus,23  Minus,24};25 26struct RISCVOptionArchArg {27  RISCVOptionArchArgType Type;28  std::string Value;29 30  RISCVOptionArchArg(RISCVOptionArchArgType Type, std::string Value)31      : Type(Type), Value(Value) {}32};33 34class RISCVTargetStreamer : public MCTargetStreamer {35  RISCVABI::ABI TargetABI = RISCVABI::ABI_Unknown;36  bool HasRVC = false;37  bool HasTSO = false;38 39public:40  RISCVTargetStreamer(MCStreamer &S);41  void finish() override;42  virtual void reset();43 44  virtual void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args);45  virtual void emitDirectiveOptionExact();46  virtual void emitDirectiveOptionNoExact();47  virtual void emitDirectiveOptionPIC();48  virtual void emitDirectiveOptionNoPIC();49  virtual void emitDirectiveOptionPop();50  virtual void emitDirectiveOptionPush();51  virtual void emitDirectiveOptionRelax();52  virtual void emitDirectiveOptionNoRelax();53  virtual void emitDirectiveOptionRVC();54  virtual void emitDirectiveOptionNoRVC();55  virtual void emitDirectiveVariantCC(MCSymbol &Symbol);56  virtual void emitAttribute(unsigned Attribute, unsigned Value);57  virtual void finishAttributeSection();58  virtual void emitTextAttribute(unsigned Attribute, StringRef String);59  virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,60                                    StringRef StringValue);61  void emitNoteGnuPropertySection(const uint32_t Feature1And);62 63  void emitTargetAttributes(const MCSubtargetInfo &STI, bool EmitStackAlign);64  void setTargetABI(RISCVABI::ABI ABI);65  RISCVABI::ABI getTargetABI() const { return TargetABI; }66  void setFlagsFromFeatures(const MCSubtargetInfo &STI);67  bool hasRVC() const { return HasRVC; }68  bool hasTSO() const { return HasTSO; }69};70 71// This part is for ascii assembly output72class RISCVTargetAsmStreamer : public RISCVTargetStreamer {73  formatted_raw_ostream &OS;74 75  void finishAttributeSection() override;76  void emitAttribute(unsigned Attribute, unsigned Value) override;77  void emitTextAttribute(unsigned Attribute, StringRef String) override;78  void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,79                            StringRef StringValue) override;80 81public:82  RISCVTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);83 84  void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args) override;85  void emitDirectiveOptionExact() override;86  void emitDirectiveOptionNoExact() override;87  void emitDirectiveOptionPIC() override;88  void emitDirectiveOptionNoPIC() override;89  void emitDirectiveOptionPop() override;90  void emitDirectiveOptionPush() override;91  void emitDirectiveOptionRelax() override;92  void emitDirectiveOptionNoRelax() override;93  void emitDirectiveOptionRVC() override;94  void emitDirectiveOptionNoRVC() override;95  void emitDirectiveVariantCC(MCSymbol &Symbol) override;96};97 98}99#endif100