blob: c66a51574efb497d4c81187791fd041b018041c7 [file] [log] [blame]
Dan Gohman3469ee12016-01-12 20:30:51 +00001//==-- 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
Dan Gohman46350172016-01-12 20:56:01 +000019#include "llvm/CodeGen/MachineValueType.h"
Dan Gohman3469ee12016-01-12 20:30:51 +000020#include "llvm/MC/MCStreamer.h"
21
22namespace llvm {
23
24class MCELFStreamer;
25
26/// WebAssembly-specific streamer interface, to implement support
27/// WebAssembly-specific assembly directives.
28class WebAssemblyTargetStreamer : public MCTargetStreamer {
29public:
30 explicit WebAssemblyTargetStreamer(MCStreamer &S);
31
32 /// .param
33 virtual void emitParam(ArrayRef<MVT> Types) = 0;
34 /// .result
35 virtual void emitResult(ArrayRef<MVT> Types) = 0;
36 /// .local
37 virtual void emitLocal(ArrayRef<MVT> Types) = 0;
38 /// .endfunc
39 virtual void emitEndFunc() = 0;
40};
41
42/// This part is for ascii assembly output
43class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
44 formatted_raw_ostream &OS;
45
46public:
47 WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
48
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;
53};
54
55/// This part is for ELF object output
56class WebAssemblyTargetELFStreamer final : public WebAssemblyTargetStreamer {
57public:
58 explicit WebAssemblyTargetELFStreamer(MCStreamer &S);
59
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;
64};
65
66} // end namespace llvm
67
68#endif