Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h
35294 views
1
//==-- WebAssemblyTargetStreamer.h - WebAssembly 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
/// \file
10
/// This file declares WebAssembly-specific target streamer classes.
11
/// These are for implementing support for target-specific assembly directives.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
16
#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
17
18
#include "llvm/BinaryFormat/Wasm.h"
19
#include "llvm/CodeGenTypes/MachineValueType.h"
20
#include "llvm/MC/MCStreamer.h"
21
22
namespace llvm {
23
24
class MCSymbolWasm;
25
class formatted_raw_ostream;
26
27
/// WebAssembly-specific streamer interface, to implement support
28
/// WebAssembly-specific assembly directives.
29
class WebAssemblyTargetStreamer : public MCTargetStreamer {
30
public:
31
explicit WebAssemblyTargetStreamer(MCStreamer &S);
32
33
/// .local
34
virtual void emitLocal(ArrayRef<wasm::ValType> Types) = 0;
35
/// .functype
36
virtual void emitFunctionType(const MCSymbolWasm *Sym) = 0;
37
/// .indidx
38
virtual void emitIndIdx(const MCExpr *Value) = 0;
39
/// .globaltype
40
virtual void emitGlobalType(const MCSymbolWasm *Sym) = 0;
41
/// .tabletype
42
virtual void emitTableType(const MCSymbolWasm *Sym) = 0;
43
/// .tagtype
44
virtual void emitTagType(const MCSymbolWasm *Sym) = 0;
45
/// .import_module
46
virtual void emitImportModule(const MCSymbolWasm *Sym,
47
StringRef ImportModule) = 0;
48
/// .import_name
49
virtual void emitImportName(const MCSymbolWasm *Sym,
50
StringRef ImportName) = 0;
51
/// .export_name
52
virtual void emitExportName(const MCSymbolWasm *Sym,
53
StringRef ExportName) = 0;
54
55
protected:
56
void emitValueType(wasm::ValType Type);
57
};
58
59
/// This part is for ascii assembly output
60
class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
61
formatted_raw_ostream &OS;
62
63
public:
64
WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
65
66
void emitLocal(ArrayRef<wasm::ValType> Types) override;
67
void emitFunctionType(const MCSymbolWasm *Sym) override;
68
void emitIndIdx(const MCExpr *Value) override;
69
void emitGlobalType(const MCSymbolWasm *Sym) override;
70
void emitTableType(const MCSymbolWasm *Sym) override;
71
void emitTagType(const MCSymbolWasm *Sym) override;
72
void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule) override;
73
void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName) override;
74
void emitExportName(const MCSymbolWasm *Sym, StringRef ExportName) override;
75
};
76
77
/// This part is for Wasm object output
78
class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {
79
public:
80
explicit WebAssemblyTargetWasmStreamer(MCStreamer &S);
81
82
void emitLocal(ArrayRef<wasm::ValType> Types) override;
83
void emitFunctionType(const MCSymbolWasm *Sym) override {}
84
void emitIndIdx(const MCExpr *Value) override;
85
void emitGlobalType(const MCSymbolWasm *Sym) override {}
86
void emitTableType(const MCSymbolWasm *Sym) override {}
87
void emitTagType(const MCSymbolWasm *Sym) override {}
88
void emitImportModule(const MCSymbolWasm *Sym,
89
StringRef ImportModule) override {}
90
void emitImportName(const MCSymbolWasm *Sym,
91
StringRef ImportName) override {}
92
void emitExportName(const MCSymbolWasm *Sym,
93
StringRef ExportName) override {}
94
};
95
96
/// This part is for null output
97
class WebAssemblyTargetNullStreamer final : public WebAssemblyTargetStreamer {
98
public:
99
explicit WebAssemblyTargetNullStreamer(MCStreamer &S)
100
: WebAssemblyTargetStreamer(S) {}
101
102
void emitLocal(ArrayRef<wasm::ValType>) override {}
103
void emitFunctionType(const MCSymbolWasm *) override {}
104
void emitIndIdx(const MCExpr *) override {}
105
void emitGlobalType(const MCSymbolWasm *) override {}
106
void emitTableType(const MCSymbolWasm *) override {}
107
void emitTagType(const MCSymbolWasm *) override {}
108
void emitImportModule(const MCSymbolWasm *, StringRef) override {}
109
void emitImportName(const MCSymbolWasm *, StringRef) override {}
110
void emitExportName(const MCSymbolWasm *, StringRef) override {}
111
};
112
113
} // end namespace llvm
114
115
#endif
116
117