Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h
35294 views
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H
10
#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVTARGETSTREAMER_H
11
12
#include "RISCV.h"
13
#include "llvm/MC/MCStreamer.h"
14
#include "llvm/MC/MCSubtargetInfo.h"
15
16
namespace llvm {
17
18
class formatted_raw_ostream;
19
20
enum class RISCVOptionArchArgType {
21
Full,
22
Plus,
23
Minus,
24
};
25
26
struct RISCVOptionArchArg {
27
RISCVOptionArchArgType Type;
28
std::string Value;
29
30
RISCVOptionArchArg(RISCVOptionArchArgType Type, std::string Value)
31
: Type(Type), Value(Value) {}
32
};
33
34
class RISCVTargetStreamer : public MCTargetStreamer {
35
RISCVABI::ABI TargetABI = RISCVABI::ABI_Unknown;
36
bool HasRVC = false;
37
bool HasTSO = false;
38
39
public:
40
RISCVTargetStreamer(MCStreamer &S);
41
void finish() override;
42
virtual void reset();
43
44
virtual void emitDirectiveOptionPush();
45
virtual void emitDirectiveOptionPop();
46
virtual void emitDirectiveOptionPIC();
47
virtual void emitDirectiveOptionNoPIC();
48
virtual void emitDirectiveOptionRVC();
49
virtual void emitDirectiveOptionNoRVC();
50
virtual void emitDirectiveOptionRelax();
51
virtual void emitDirectiveOptionNoRelax();
52
virtual void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args);
53
virtual void emitDirectiveVariantCC(MCSymbol &Symbol);
54
virtual void emitAttribute(unsigned Attribute, unsigned Value);
55
virtual void finishAttributeSection();
56
virtual void emitTextAttribute(unsigned Attribute, StringRef String);
57
virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
58
StringRef StringValue);
59
60
void emitTargetAttributes(const MCSubtargetInfo &STI, bool EmitStackAlign);
61
void setTargetABI(RISCVABI::ABI ABI);
62
RISCVABI::ABI getTargetABI() const { return TargetABI; }
63
void setFlagsFromFeatures(const MCSubtargetInfo &STI);
64
bool hasRVC() const { return HasRVC; }
65
bool hasTSO() const { return HasTSO; }
66
};
67
68
// This part is for ascii assembly output
69
class RISCVTargetAsmStreamer : public RISCVTargetStreamer {
70
formatted_raw_ostream &OS;
71
72
void finishAttributeSection() override;
73
void emitAttribute(unsigned Attribute, unsigned Value) override;
74
void emitTextAttribute(unsigned Attribute, StringRef String) override;
75
void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
76
StringRef StringValue) override;
77
78
public:
79
RISCVTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
80
81
void emitDirectiveOptionPush() override;
82
void emitDirectiveOptionPop() override;
83
void emitDirectiveOptionPIC() override;
84
void emitDirectiveOptionNoPIC() override;
85
void emitDirectiveOptionRVC() override;
86
void emitDirectiveOptionNoRVC() override;
87
void emitDirectiveOptionRelax() override;
88
void emitDirectiveOptionNoRelax() override;
89
void emitDirectiveOptionArch(ArrayRef<RISCVOptionArchArg> Args) override;
90
void emitDirectiveVariantCC(MCSymbol &Symbol) override;
91
};
92
93
}
94
#endif
95
96