LLVM  9.0.0svn
WebAssemblyTargetStreamer.h
Go to the documentation of this file.
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/MC/MCStreamer.h"
21 
22 namespace llvm {
23 
24 class MCWasmStreamer;
25 class MCSymbolWasm;
26 
27 /// WebAssembly-specific streamer interface, to implement support
28 /// WebAssembly-specific assembly directives.
30 public:
32 
33  /// .local
34  virtual void emitLocal(ArrayRef<wasm::ValType> Types) = 0;
35  /// .endfunc
36  virtual void emitEndFunc() = 0;
37  /// .functype
38  virtual void emitFunctionType(const MCSymbolWasm *Sym) = 0;
39  /// .indidx
40  virtual void emitIndIdx(const MCExpr *Value) = 0;
41  /// .globaltype
42  virtual void emitGlobalType(const MCSymbolWasm *Sym) = 0;
43  /// .eventtype
44  virtual void emitEventType(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 
52 protected:
54 };
55 
56 /// This part is for ascii assembly output
59  void emitSignature(const wasm::WasmSignature *Sig);
60  void emitParamList(const wasm::WasmSignature *Sig);
61  void emitReturnList(const wasm::WasmSignature *Sig);
62 
63 public:
65 
66  void emitLocal(ArrayRef<wasm::ValType> Types) override;
67  void emitEndFunc() override;
68  void emitFunctionType(const MCSymbolWasm *Sym) override;
69  void emitIndIdx(const MCExpr *Value) override;
70  void emitGlobalType(const MCSymbolWasm *Sym) override;
71  void emitEventType(const MCSymbolWasm *Sym) override;
72  void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule) override;
73  void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName) override;
74 };
75 
76 /// This part is for Wasm object output
78 public:
80 
81  void emitLocal(ArrayRef<wasm::ValType> Types) override;
82  void emitEndFunc() override;
83  void emitFunctionType(const MCSymbolWasm *Sym) override {}
84  void emitIndIdx(const MCExpr *Value) override;
85  void emitGlobalType(const MCSymbolWasm *Sym) override {}
86  void emitEventType(const MCSymbolWasm *Sym) override {}
87  void emitImportModule(const MCSymbolWasm *Sym,
88  StringRef ImportModule) override {}
89  void emitImportName(const MCSymbolWasm *Sym,
90  StringRef ImportName) override {}
91 };
92 
93 /// This part is for null output
95 public:
98 
100  void emitEndFunc() override {}
101  void emitFunctionType(const MCSymbolWasm *) override {}
102  void emitIndIdx(const MCExpr *) override {}
103  void emitGlobalType(const MCSymbolWasm *) override {}
104  void emitEventType(const MCSymbolWasm *) override {}
105  void emitImportModule(const MCSymbolWasm *, StringRef) override {}
106  void emitImportName(const MCSymbolWasm *, StringRef) override {}
107 };
108 
109 } // end namespace llvm
110 
111 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName) override
.import_name
void emitGlobalType(const MCSymbolWasm *Sym) override
.globaltype
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
virtual void emitGlobalType(const MCSymbolWasm *Sym)=0
.globaltype
Target specific streamer interface.
Definition: MCStreamer.h:83
virtual void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule)=0
.import_module
void emitLocal(ArrayRef< wasm::ValType >) override
.local
void emitImportModule(const MCSymbolWasm *, StringRef) override
.import_module
void emitIndIdx(const MCExpr *) override
.indidx
void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule) override
.import_module
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:35
void emitEventType(const MCSymbolWasm *Sym) override
.eventtype
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: APInt.h:32
virtual void emitEndFunc()=0
.endfunc
WebAssembly-specific streamer interface, to implement support WebAssembly-specific assembly directive...
Streaming machine code generation interface.
Definition: MCStreamer.h:188
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
void emitEventType(const MCSymbolWasm *) override
.eventtype
This part is for ascii assembly output.
void emitImportName(const MCSymbolWasm *, StringRef) override
.import_name
void emitFunctionType(const MCSymbolWasm *) override
.functype
void emitGlobalType(const MCSymbolWasm *) override
.globaltype
virtual void emitFunctionType(const MCSymbolWasm *Sym)=0
.functype
virtual void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName)=0
.import_name
This part is for Wasm object output.
void emitFunctionType(const MCSymbolWasm *Sym) override
.functype
virtual void emitEventType(const MCSymbolWasm *Sym)=0
.eventtype
LLVM Value Representation.
Definition: Value.h:72
virtual void emitLocal(ArrayRef< wasm::ValType > Types)=0
.local
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
virtual void emitIndIdx(const MCExpr *Value)=0
.indidx