WebAssemblyTargetStreamer.h revision 360784
11834Swollman//==-- WebAssemblyTargetStreamer.h - WebAssembly Target Streamer -*- C++ -*-==// 2175232Sbde// 31834Swollman// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41834Swollman// See https://llvm.org/LICENSE.txt for license information. 51834Swollman// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61834Swollman// 71834Swollman//===----------------------------------------------------------------------===// 81834Swollman/// 91834Swollman/// \file 101834Swollman/// This file declares WebAssembly-specific target streamer classes. 111834Swollman/// These are for implementing support for target-specific assembly directives. 121834Swollman/// 131834Swollman//===----------------------------------------------------------------------===// 141834Swollman 151834Swollman#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H 161834Swollman#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H 171834Swollman 181834Swollman#include "llvm/BinaryFormat/Wasm.h" 191834Swollman#include "llvm/MC/MCStreamer.h" 201834Swollman#include "llvm/Support/MachineValueType.h" 211834Swollman 221834Swollmannamespace llvm { 231834Swollman 241834Swollmanclass MCWasmStreamer; 251834Swollmanclass MCSymbolWasm; 261834Swollman 271834Swollman/// WebAssembly-specific streamer interface, to implement support 281834Swollman/// WebAssembly-specific assembly directives. 291834Swollmanclass WebAssemblyTargetStreamer : public MCTargetStreamer { 301834Swollmanpublic: 311834Swollman explicit WebAssemblyTargetStreamer(MCStreamer &S); 321834Swollman 331834Swollman /// .local 341834Swollman virtual void emitLocal(ArrayRef<wasm::ValType> Types) = 0; 3550477Speter /// .endfunc 361834Swollman virtual void emitEndFunc() = 0; 371834Swollman /// .functype 38175232Sbde virtual void emitFunctionType(const MCSymbolWasm *Sym) = 0; 39175232Sbde /// .indidx 40175232Sbde virtual void emitIndIdx(const MCExpr *Value) = 0; 411834Swollman /// .globaltype 42226607Sdas virtual void emitGlobalType(const MCSymbolWasm *Sym) = 0; 43226607Sdas /// .eventtype 44175232Sbde virtual void emitEventType(const MCSymbolWasm *Sym) = 0; 45175234Sbde /// .import_module 461834Swollman virtual void emitImportModule(const MCSymbolWasm *Sym, 471834Swollman StringRef ImportModule) = 0; 48143063Sjoerg /// .import_name 49143063Sjoerg virtual void emitImportName(const MCSymbolWasm *Sym, 50143063Sjoerg StringRef ImportName) = 0; 51143063Sjoerg /// .export_name 521834Swollman virtual void emitExportName(const MCSymbolWasm *Sym, 53175232Sbde StringRef ExportName) = 0; 541834Swollman 551834Swollmanprotected: 561834Swollman void emitValueType(wasm::ValType Type); 57175232Sbde}; 58175232Sbde 591834Swollman/// This part is for ascii assembly output 601834Swollmanclass WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer { 611834Swollman formatted_raw_ostream &OS; 621834Swollman 63175232Sbdepublic: 641834Swollman WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 651834Swollman 6613765Smpp void emitLocal(ArrayRef<wasm::ValType> Types) override; 671834Swollman void emitEndFunc() override; 681834Swollman void emitFunctionType(const MCSymbolWasm *Sym) override; 6913765Smpp void emitIndIdx(const MCExpr *Value) override; 701834Swollman void emitGlobalType(const MCSymbolWasm *Sym) override; 711834Swollman void emitEventType(const MCSymbolWasm *Sym) override; 721834Swollman void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule) override; 731834Swollman void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName) override; 741834Swollman void emitExportName(const MCSymbolWasm *Sym, StringRef ExportName) override; 75175232Sbde}; 761834Swollman 771834Swollman/// This part is for Wasm object output 781834Swollmanclass WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer { 791834Swollmanpublic: 801834Swollman explicit WebAssemblyTargetWasmStreamer(MCStreamer &S); 811834Swollman 821834Swollman void emitLocal(ArrayRef<wasm::ValType> Types) override; 8349081Scracauer void emitEndFunc() override; 841834Swollman void emitFunctionType(const MCSymbolWasm *Sym) override {} 851834Swollman void emitIndIdx(const MCExpr *Value) override; 86175232Sbde void emitGlobalType(const MCSymbolWasm *Sym) override {} 871834Swollman void emitEventType(const MCSymbolWasm *Sym) override {} 881834Swollman void emitImportModule(const MCSymbolWasm *Sym, 891834Swollman StringRef ImportModule) override {} 90175232Sbde void emitImportName(const MCSymbolWasm *Sym, 91175232Sbde StringRef ImportName) override {} 92175232Sbde void emitExportName(const MCSymbolWasm *Sym, 93175232Sbde StringRef ExportName) override {} 94175232Sbde}; 951834Swollman 961834Swollman/// This part is for null output 971834Swollmanclass WebAssemblyTargetNullStreamer final : public WebAssemblyTargetStreamer { 98175232Sbdepublic: 991834Swollman explicit WebAssemblyTargetNullStreamer(MCStreamer &S) 1001834Swollman : WebAssemblyTargetStreamer(S) {} 1011834Swollman 102175232Sbde void emitLocal(ArrayRef<wasm::ValType>) override {} 103175232Sbde void emitEndFunc() override {} 104175232Sbde void emitFunctionType(const MCSymbolWasm *) override {} 105175232Sbde void emitIndIdx(const MCExpr *) override {} 106175232Sbde void emitGlobalType(const MCSymbolWasm *) override {} 1071834Swollman void emitEventType(const MCSymbolWasm *) override {} 1081834Swollman void emitImportModule(const MCSymbolWasm *, StringRef) override {} 109143063Sjoerg void emitImportName(const MCSymbolWasm *, StringRef) override {} 110109520Smarcel void emitExportName(const MCSymbolWasm *, StringRef) override {} 111175234Sbde}; 112109520Smarcel 113175233Sbde} // end namespace llvm 114175232Sbde 115109520Smarcel#endif 116109520Smarcel