1 //==-- WebAssemblyTargetStreamer.h - WebAssembly Target Streamer -*- C++ -*-==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 /// \brief This file declares WebAssembly-specific target streamer classes.
12 /// These are for implementing support for target-specific assembly directives.
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
17 #define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
19 #include "llvm/CodeGen/MachineValueType.h"
20 #include "llvm/MC/MCStreamer.h"
26 /// WebAssembly-specific streamer interface, to implement support
27 /// WebAssembly-specific assembly directives.
28 class WebAssemblyTargetStreamer : public MCTargetStreamer {
30 explicit WebAssemblyTargetStreamer(MCStreamer &S);
33 virtual void emitParam(ArrayRef<MVT> Types) = 0;
35 virtual void emitResult(ArrayRef<MVT> Types) = 0;
37 virtual void emitLocal(ArrayRef<MVT> Types) = 0;
39 virtual void emitEndFunc() = 0;
42 /// This part is for ascii assembly output
43 class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
44 formatted_raw_ostream &OS;
47 WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
49 void emitParam(ArrayRef<MVT> Types) override;
50 void emitResult(ArrayRef<MVT> Types) override;
51 void emitLocal(ArrayRef<MVT> Types) override;
52 void emitEndFunc() override;
55 /// This part is for ELF object output
56 class WebAssemblyTargetELFStreamer final : public WebAssemblyTargetStreamer {
58 explicit WebAssemblyTargetELFStreamer(MCStreamer &S);
60 void emitParam(ArrayRef<MVT> Types) override;
61 void emitResult(ArrayRef<MVT> Types) override;
62 void emitLocal(ArrayRef<MVT> Types) override;
63 void emitEndFunc() override;
66 } // end namespace llvm