LCOV - code coverage report
Current view: top level - lib/Target/WebAssembly/MCTargetDesc - WebAssemblyTargetStreamer.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 3 4 75.0 %
Date: 2018-07-13 00:08:38 Functions: 2 6 33.3 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : /// 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/BinaryFormat/Wasm.h"
      20             : #include "llvm/MC/MCStreamer.h"
      21             : #include "llvm/Support/MachineValueType.h"
      22             : 
      23             : namespace llvm {
      24             : 
      25             : class MCELFStreamer;
      26             : class MCWasmStreamer;
      27             : class MCSymbolWasm;
      28             : 
      29             : /// WebAssembly-specific streamer interface, to implement support
      30             : /// WebAssembly-specific assembly directives.
      31         262 : class WebAssemblyTargetStreamer : public MCTargetStreamer {
      32             : public:
      33             :   explicit WebAssemblyTargetStreamer(MCStreamer &S);
      34             : 
      35             :   /// .param
      36             :   virtual void emitParam(MCSymbol *Symbol, ArrayRef<MVT> Types) = 0;
      37             :   /// .result
      38             :   virtual void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) = 0;
      39             :   /// .local
      40             :   virtual void emitLocal(ArrayRef<MVT> Types) = 0;
      41             :   /// .endfunc
      42             :   virtual void emitEndFunc() = 0;
      43             :   /// .functype
      44             :   virtual void emitIndirectFunctionType(MCSymbol *Symbol,
      45             :                                         SmallVectorImpl<MVT> &Params,
      46             :                                         SmallVectorImpl<MVT> &Results) = 0;
      47             :   /// .indidx
      48             :   virtual void emitIndIdx(const MCExpr *Value) = 0;
      49             :   /// .import_global
      50             :   virtual void emitGlobalImport(StringRef name) = 0;
      51             :   /// .import_module
      52             :   virtual void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) = 0;
      53             : 
      54             : protected:
      55             :   void emitValueType(wasm::ValType Type);
      56             : };
      57             : 
      58             : /// This part is for ascii assembly output
      59         248 : class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
      60             :   formatted_raw_ostream &OS;
      61             : 
      62             : public:
      63             :   WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
      64             : 
      65             :   void emitParam(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
      66             :   void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
      67             :   void emitLocal(ArrayRef<MVT> Types) override;
      68             :   void emitEndFunc() override;
      69             :   void emitIndirectFunctionType(MCSymbol *Symbol,
      70             :                                 SmallVectorImpl<MVT> &Params,
      71             :                                 SmallVectorImpl<MVT> &Results) override;
      72             :   void emitIndIdx(const MCExpr *Value) override;
      73             :   void emitGlobalImport(StringRef name) override;
      74             :   void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override;
      75             : };
      76             : 
      77             : /// This part is for ELF object output
      78           0 : class WebAssemblyTargetELFStreamer final : public WebAssemblyTargetStreamer {
      79             : public:
      80             :   explicit WebAssemblyTargetELFStreamer(MCStreamer &S);
      81             : 
      82             :   void emitParam(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
      83             :   void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
      84             :   void emitLocal(ArrayRef<MVT> Types) override;
      85             :   void emitEndFunc() override;
      86             :   void emitIndirectFunctionType(MCSymbol *Symbol,
      87             :                                 SmallVectorImpl<MVT> &Params,
      88             :                                 SmallVectorImpl<MVT> &Results) override;
      89             :   void emitIndIdx(const MCExpr *Value) override;
      90             :   void emitGlobalImport(StringRef name) override;
      91             :   void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override;
      92             : };
      93             : 
      94             : /// This part is for Wasm object output
      95         276 : class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {
      96             : public:
      97             :   explicit WebAssemblyTargetWasmStreamer(MCStreamer &S);
      98             : 
      99             :   void emitParam(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
     100             :   void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override;
     101             :   void emitLocal(ArrayRef<MVT> Types) override;
     102             :   void emitEndFunc() override;
     103             :   void emitIndirectFunctionType(MCSymbol *Symbol,
     104             :                                 SmallVectorImpl<MVT> &Params,
     105             :                                 SmallVectorImpl<MVT> &Results) override;
     106             :   void emitIndIdx(const MCExpr *Value) override;
     107             :   void emitGlobalImport(StringRef name) override;
     108             :   void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override;
     109             : };
     110             : 
     111             : } // end namespace llvm
     112             : 
     113             : #endif

Generated by: LCOV version 1.13