LLVM: lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
28
29using namespace llvm;
30
31
32
34 "riscv-abi-attributes",
35 cl::desc("Enable emitting RISC-V ELF attributes for ABI features"),
37
39
42
63
68
73 NoteAlign = Align(8);
74 DescSize = 16;
75 } else {
77 NoteAlign = Align(4);
78 DescSize = 12;
79 }
80
86
87
90 OutStreamer.emitIntValue(DescSize, 4);
93
94
95
96
99 OutStreamer.emitIntValue(Feature1And, 4);
101
103}
104
107 TargetABI = ABI;
108}
109
111 HasRVC = STI.hasFeature(RISCV::FeatureStdExtZca);
112 HasTSO = STI.hasFeature(RISCV::FeatureStdExtZtso);
113}
114
116 bool EmitStackAlign) {
117 if (EmitStackAlign) {
118 unsigned StackAlign;
120 StackAlign = 4;
122 StackAlign = 8;
123 else
124 StackAlign = 16;
126 }
127
132 } else {
135 }
136
138 unsigned AtomicABITag;
139 if (STI.hasFeature(RISCV::FeatureStdExtZalasr))
141 else if (STI.hasFeature(RISCV::FeatureNoTrailingSeqCstFence))
143 else
146 }
147}
148
149
153
155 OS << "\t.option\tpush\n";
156}
157
159 OS << "\t.option\tpop\n";
160}
161
163 OS << "\t.option\tpic\n";
164}
165
167 OS << "\t.option\tnopic\n";
168}
169
171 OS << "\t.option\trvc\n";
172}
173
175 OS << "\t.option\tnorvc\n";
176}
177
179 OS << "\t.option\texact\n";
180}
181
183 OS << "\t.option\tnoexact\n";
184}
185
187 OS << "\t.option\trelax\n";
188}
189
191 OS << "\t.option\tnorelax\n";
192}
193
196 OS << "\t.option\tarch";
197 for (const auto &Arg : Args) {
198 OS << ", ";
199 switch (Arg.Type) {
201 break;
203 OS << "+";
204 break;
206 OS << "-";
207 break;
208 }
209 OS << Arg.Value;
210 }
211 OS << "\n";
212}
213
215 OS << "\t.variant_cc\t" << Symbol.getName() << "\n";
216}
217
218void RISCVTargetAsmStreamer::emitAttribute(unsigned Attribute, unsigned Value) {
220}
221
222void RISCVTargetAsmStreamer::emitTextAttribute(unsigned Attribute,
224 OS << "\t.attribute\t" << Attribute << ", \"" << String << "\"\n";
225}
226
227void RISCVTargetAsmStreamer::emitIntTextAttribute(unsigned Attribute,
228 unsigned IntValue,
230
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static cl::opt< bool > RiscvAbiAttr("riscv-abi-attributes", cl::desc("Enable emitting RISC-V ELF attributes for ABI features"), cl::Hidden)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Functions, function parameters, and return types can have attributes to indicate how they should be t...
Context object for machine code objects.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Streaming machine code generation interface.
virtual bool popSection()
Restore the current and previous section from the section stack.
MCContext & getContext() const
virtual void emitValueToAlignment(Align Alignment, int64_t Fill=0, uint8_t FillLen=1, unsigned MaxBytesToEmit=0)
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
virtual void emitIntValue(uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers.
void pushSection()
Save the current and previous section on the section stack.
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
virtual void emitBytes(StringRef Data)
Emit the bytes in Data into the output.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
const FeatureBitset & getFeatureBits() const
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
MCStreamer & getStreamer()
MCTargetStreamer(MCStreamer &S)
This class represents success/failure for parsing-like operations that find it important to chain tog...
void emitDirectiveOptionPIC() override
Definition RISCVTargetStreamer.cpp:162
void emitDirectiveOptionExact() override
Definition RISCVTargetStreamer.cpp:178
void emitDirectiveOptionArch(ArrayRef< RISCVOptionArchArg > Args) override
Definition RISCVTargetStreamer.cpp:194
void emitDirectiveOptionRelax() override
Definition RISCVTargetStreamer.cpp:186
RISCVTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
Definition RISCVTargetStreamer.cpp:150
void emitDirectiveOptionNoRVC() override
Definition RISCVTargetStreamer.cpp:174
void emitDirectiveOptionNoPIC() override
Definition RISCVTargetStreamer.cpp:166
void emitDirectiveOptionPop() override
Definition RISCVTargetStreamer.cpp:158
void emitDirectiveOptionNoRelax() override
Definition RISCVTargetStreamer.cpp:190
void emitDirectiveOptionRVC() override
Definition RISCVTargetStreamer.cpp:170
void emitDirectiveVariantCC(MCSymbol &Symbol) override
Definition RISCVTargetStreamer.cpp:214
void emitDirectiveOptionNoExact() override
Definition RISCVTargetStreamer.cpp:182
void emitDirectiveOptionPush() override
Definition RISCVTargetStreamer.cpp:154
void emitNoteGnuPropertySection(const uint32_t Feature1And)
Definition RISCVTargetStreamer.cpp:64
virtual void emitDirectiveOptionPIC()
Definition RISCVTargetStreamer.cpp:47
virtual void emitDirectiveOptionNoRelax()
Definition RISCVTargetStreamer.cpp:52
virtual void emitAttribute(unsigned Attribute, unsigned Value)
Definition RISCVTargetStreamer.cpp:56
virtual void emitTextAttribute(unsigned Attribute, StringRef String)
Definition RISCVTargetStreamer.cpp:58
virtual void emitDirectiveVariantCC(MCSymbol &Symbol)
Definition RISCVTargetStreamer.cpp:55
void emitTargetAttributes(const MCSubtargetInfo &STI, bool EmitStackAlign)
Definition RISCVTargetStreamer.cpp:115
void setFlagsFromFeatures(const MCSubtargetInfo &STI)
Definition RISCVTargetStreamer.cpp:110
virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue, StringRef StringValue)
Definition RISCVTargetStreamer.cpp:60
virtual void emitDirectiveOptionExact()
Definition RISCVTargetStreamer.cpp:45
virtual void emitDirectiveOptionNoExact()
Definition RISCVTargetStreamer.cpp:46
virtual void emitDirectiveOptionPop()
Definition RISCVTargetStreamer.cpp:49
virtual void emitDirectiveOptionNoPIC()
Definition RISCVTargetStreamer.cpp:48
void setTargetABI(RISCVABI::ABI ABI)
Definition RISCVTargetStreamer.cpp:105
RISCVTargetStreamer(MCStreamer &S)
Definition RISCVTargetStreamer.cpp:38
virtual void emitDirectiveOptionArch(ArrayRef< RISCVOptionArchArg > Args)
Definition RISCVTargetStreamer.cpp:43
virtual void reset()
Definition RISCVTargetStreamer.cpp:41
virtual void finishAttributeSection()
Definition RISCVTargetStreamer.cpp:57
virtual void emitDirectiveOptionPush()
Definition RISCVTargetStreamer.cpp:50
void finish() override
Definition RISCVTargetStreamer.cpp:40
virtual void emitDirectiveOptionRelax()
Definition RISCVTargetStreamer.cpp:51
virtual void emitDirectiveOptionNoRVC()
Definition RISCVTargetStreamer.cpp:54
virtual void emitDirectiveOptionRVC()
Definition RISCVTargetStreamer.cpp:53
StringRef - Represent a constant reference to a string, i.e.
Triple - Helper class for working with autoconf configuration names.
LLVM_ABI bool isArch64Bit() const
Test whether the architecture is 64-bit.
LLVM_ABI bool isArch32Bit() const
Test whether the architecture is 32-bit.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
LLVM Value Representation.
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
@ GNU_PROPERTY_RISCV_FEATURE_1_AND
llvm::Expected< std::unique_ptr< RISCVISAInfo > > parseFeatureBits(bool IsRV64, const FeatureBitset &FeatureBits)
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
This struct is a compact representation of a valid (non-zero power of two) alignment.