1 // WebAssemblyInstPrinter.h - Print wasm MCInst to assembly syntax -*- 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 class prints an WebAssembly MCInst to wasm file syntax. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_INSTPRINTER_WEBASSEMBLYINSTPRINTER_H 16 #define LLVM_LIB_TARGET_WEBASSEMBLY_INSTPRINTER_WEBASSEMBLYINSTPRINTER_H 17 18 #include "llvm/ADT/SmallVector.h" 19 #include "llvm/BinaryFormat/Wasm.h" 20 #include "llvm/MC/MCInstPrinter.h" 21 #include "llvm/Support/MachineValueType.h" 22 23 namespace llvm { 24 25 class MCSubtargetInfo; 26 27 class WebAssemblyInstPrinter final : public MCInstPrinter { 28 uint64_t ControlFlowCounter; 29 SmallVector<std::pair<uint64_t, bool>, 0> ControlFlowStack; 30 31 public: 32 WebAssemblyInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 33 const MCRegisterInfo &MRI); 34 35 void printRegName(raw_ostream &OS, unsigned RegNo) const override; 36 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, 37 const MCSubtargetInfo &STI) override; 38 39 // Used by tblegen code. 40 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 41 void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo, 42 raw_ostream &O); 43 void printWebAssemblySignatureOperand(const MCInst *MI, unsigned OpNo, 44 raw_ostream &O); 45 46 // Autogenerated by tblgen. 47 void printInstruction(const MCInst *MI, raw_ostream &O); 48 static const char *getRegisterName(unsigned RegNo); 49 }; 50 51 namespace WebAssembly { 52 53 const char *TypeToString(MVT Ty); 54 const char *TypeToString(wasm::ValType Type); 55 56 } // end namespace WebAssembly 57 58 } // end namespace llvm 59 60 #endif 61