64334b45189c0b49120e15d5dc9c932006377db6
[oota-llvm.git] / lib / Target / WebAssembly / MCTargetDesc / WebAssemblyTargetStreamer.h
1 //==-- WebAssemblyTargetStreamer.h - WebAssembly Target Streamer -*- C++ -*-==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief This file declares WebAssembly-specific target streamer classes.
12 /// These are for implementing support for target-specific assembly directives.
13 ///
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
17 #define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
18
19 #include "llvm/MC/MCStreamer.h"
20
21 namespace llvm {
22
23 class MCELFStreamer;
24
25 /// WebAssembly-specific streamer interface, to implement support
26 /// WebAssembly-specific assembly directives.
27 class WebAssemblyTargetStreamer : public MCTargetStreamer {
28 public:
29   explicit WebAssemblyTargetStreamer(MCStreamer &S);
30
31   /// .param
32   virtual void emitParam(ArrayRef<MVT> Types) = 0;
33   /// .result
34   virtual void emitResult(ArrayRef<MVT> Types) = 0;
35   /// .local
36   virtual void emitLocal(ArrayRef<MVT> Types) = 0;
37   /// .endfunc
38   virtual void emitEndFunc() = 0;
39 };
40
41 /// This part is for ascii assembly output
42 class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
43   formatted_raw_ostream &OS;
44
45 public:
46   WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
47
48   void emitParam(ArrayRef<MVT> Types) override;
49   void emitResult(ArrayRef<MVT> Types) override;
50   void emitLocal(ArrayRef<MVT> Types) override;
51   void emitEndFunc() override;
52 };
53
54 /// This part is for ELF object output
55 class WebAssemblyTargetELFStreamer final : public WebAssemblyTargetStreamer {
56 public:
57   explicit WebAssemblyTargetELFStreamer(MCStreamer &S);
58
59   void emitParam(ArrayRef<MVT> Types) override;
60   void emitResult(ArrayRef<MVT> Types) override;
61   void emitLocal(ArrayRef<MVT> Types) override;
62   void emitEndFunc() override;
63 };
64
65 } // end namespace llvm
66
67 #endif