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