LLVM 24.0.0git
SystemZHLASMAsmStreamer.h
Go to the documentation of this file.
1//===- SystemZHLASMAsmStreamer.h - HLASM Assembly Text Output ---*- 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// This file declares the SystemZHLASMAsmStreamer class.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H
14#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H
15
17#include "llvm/ADT/StringRef.h"
19#include "llvm/MC/MCAsmInfo.h"
21#include "llvm/MC/MCAssembler.h"
23#include "llvm/MC/MCContext.h"
24#include "llvm/MC/MCInst.h"
27#include "llvm/MC/MCStreamer.h"
30
31namespace llvm {
32class MCSymbolGOFF;
33
35 constexpr static size_t InstLimit = 80;
36 constexpr static size_t ContIndicatorColumn = 72;
37 constexpr static size_t ContStartColumn = 15;
38 constexpr static size_t ContLen = ContIndicatorColumn - ContStartColumn;
39 constexpr static size_t MaxXLLen = 256;
40 std::unique_ptr<formatted_raw_ostream> FOSOwner;
42 std::string Str;
44 const MCAsmInfo *MAI;
45 std::unique_ptr<MCInstPrinter> InstPrinter;
46 bool IsVerboseAsm = false;
47
48public:
50 std::unique_ptr<formatted_raw_ostream> OS,
51 std::unique_ptr<MCInstPrinter> Printer,
52 std::unique_ptr<MCCodeEmitter> Emitter,
53 std::unique_ptr<MCAsmBackend> AsmBackend)
54 : MCAsmBaseStreamer(Context, std::move(Emitter), std::move(AsmBackend)),
55 FOSOwner(std::move(OS)), FOS(*FOSOwner), OS(Str),
56 MAI(&Context.getAsmInfo()), InstPrinter(std::move(Printer)) {
57 assert(InstPrinter);
58 if (Assembler->getBackendPtr())
59 setAllowAutoPadding(Assembler->getBackend().allowAutoPadding());
60
61 Context.setUseNamesOnTempLabels(true);
62 IsVerboseAsm = Context.getTargetOptions().AsmVerbose;
63 if (IsVerboseAsm)
64 InstPrinter->setCommentStream(CommentStream);
65 }
66
67 void EmitEOL();
68 void EmitComment();
69
70 /// Add a comment that can be emitted to the generated .s file to make the
71 /// output of the compiler more readable. This only affects the MCAsmStreamer
72 /// and only when verbose assembly output is enabled.
73 void AddComment(const Twine &T, bool EOL = true) override;
74
75 void emitBytes(StringRef Data) override;
76 void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
77 SMLoc Loc = SMLoc()) override;
78
79 void emitAlignmentDS(uint64_t ByteAlignment, std::optional<int64_t> Value,
80 unsigned ValueSize, unsigned MaxBytesToEmit);
81 void emitValueToAlignment(Align Alignment, int64_t Fill, uint8_t FillLen,
82 unsigned MaxBytesToEmit) override;
83
84 void emitCodeAlignment(Align Alignment, const MCSubtargetInfo &STI,
85 unsigned MaxBytesToEmit = 0) override;
86
87 void emitRawComment(const Twine &T, bool TabPrefix = false) override;
88 /// Return true if this streamer supports verbose assembly at all.
89 bool isVerboseAsm() const override { return IsVerboseAsm; }
90
91 /// Do we support EmitRawText?
92 bool hasRawTextSupport() const override { return true; }
93
94 void addEncodingComment(const MCInst &Inst, const MCSubtargetInfo &STI);
95
96 /// @name MCStreamer Interface
97 /// @{
98 void visitUsedSymbol(const MCSymbol &Sym) override;
99
100 void changeSection(MCSection *Section, uint32_t Subsection) override;
101
102 void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
103 void emitLabel(MCSymbol *Symbol, SMLoc Loc) override;
104 bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
105
107 Align ByteAlignment) override;
108
109 void emitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
110 uint64_t Size = 0, Align ByteAlignment = Align(1),
111 SMLoc Loc = SMLoc()) override {}
112 void emitRawTextImpl(StringRef String) override;
113 void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override;
114
115 void emitHLASMValueImpl(const MCExpr *Value, unsigned Size,
116 bool Parens = false);
117 /// @}
118
119 void finishImpl() override;
120};
121} // namespace llvm
122
123#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
uint64_t uint64_t
amdgpu next use AMDGPU Next Use Analysis Printer
dxil container DXContainer Global Emitter
#define T
This file defines the SmallString class.
Functions, function parameters, and return types can have attributes to indicate how they should be t...
Definition Attributes.h:107
std::unique_ptr< MCAssembler > Assembler
LLVM_ABI MCAsmBaseStreamer(MCContext &Context, std::unique_ptr< MCCodeEmitter > Emitter, std::unique_ptr< MCAsmBackend > AsmBackend)
raw_svector_ostream CommentStream
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition MCAsmInfo.h:67
Context object for machine code objects.
Definition MCContext.h:83
Base class for the full range of assembler expressions which are needed for parsing.
Definition MCExpr.h:34
Instances of this class represent a single low-level machine instruction.
Definition MCInst.h:188
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition MCSection.h:580
void setAllowAutoPadding(bool v)
Definition MCStreamer.h:340
Generic base class for all target subtargets.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
Represents a location in source code.
Definition SMLoc.h:22
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
void emitHLASMValueImpl(const MCExpr *Value, unsigned Size, bool Parens=false)
void emitFill(const MCExpr &NumBytes, uint64_t FillValue, SMLoc Loc=SMLoc()) override
Emit Size bytes worth of the value specified by FillValue.
void emitRawTextImpl(StringRef String) override
EmitRawText - If this file is backed by an assembly streamer, this dumps the specified string in the ...
SystemZHLASMAsmStreamer(MCContext &Context, std::unique_ptr< formatted_raw_ostream > OS, std::unique_ptr< MCInstPrinter > Printer, std::unique_ptr< MCCodeEmitter > Emitter, std::unique_ptr< MCAsmBackend > AsmBackend)
void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override
Emit the expression Value into the output as a native integer of the given Size bytes.
void addEncodingComment(const MCInst &Inst, const MCSubtargetInfo &STI)
void emitBytes(StringRef Data) override
Emit the bytes in Data into the output.
void emitAlignmentDS(uint64_t ByteAlignment, std::optional< int64_t > Value, unsigned ValueSize, unsigned MaxBytesToEmit)
void emitZerofill(MCSection *Section, MCSymbol *Symbol=nullptr, uint64_t Size=0, Align ByteAlignment=Align(1), SMLoc Loc=SMLoc()) override
Emit the zerofill section and an optional symbol.
void finishImpl() override
Streamer specific finalization.
void visitUsedSymbol(const MCSymbol &Sym) override
void AddComment(const Twine &T, bool EOL=true) override
Add a comment that can be emitted to the generated .s file to make the output of the compiler more re...
void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override
Emit the given Instruction into the current section.
void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size, Align ByteAlignment) override
Emit a common symbol.
bool isVerboseAsm() const override
Return true if this streamer supports verbose assembly at all.
void emitValueToAlignment(Align Alignment, int64_t Fill, uint8_t FillLen, unsigned MaxBytesToEmit) override
Emit some number of copies of Value until the byte alignment ByteAlignment is reached.
void emitRawComment(const Twine &T, bool TabPrefix=false) override
Print T and prefix it with the comment string (normally #) and optionally a tab.
void emitCodeAlignment(Align Alignment, const MCSubtargetInfo &STI, unsigned MaxBytesToEmit=0) override
Emit nops until the byte alignment ByteAlignment is reached.
bool hasRawTextSupport() const override
Do we support EmitRawText?
void changeSection(MCSection *Section, uint32_t Subsection) override
This is called by popSection and switchSection, if the current section changes.
void emitLabel(MCSymbol *Symbol, SMLoc Loc) override
Emit a label for Symbol into the current section.
bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override
Add the given Attribute to Symbol.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
LLVM Value Representation.
Definition Value.h:75
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
A raw_ostream that writes to an std::string.
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1933
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:879
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39