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 /// \brief 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/CodeGen/MachineValueType.h" 20 #include "llvm/MC/MCInstPrinter.h" 21 22 namespace llvm { 23 24 class MCSubtargetInfo; 25 26 class WebAssemblyInstPrinter final : public MCInstPrinter { 27 uint64_t ControlFlowCounter; 28 SmallVector<std::pair<uint64_t, bool>, 0> ControlFlowStack; 29 30 public: 31 WebAssemblyInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 32 const MCRegisterInfo &MRI); 33 34 void printRegName(raw_ostream &OS, unsigned RegNo) const override; 35 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, 36 const MCSubtargetInfo &STI) override; 37 38 // Used by tblegen code. 39 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 40 void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo, 41 raw_ostream &O); 42 43 // Autogenerated by tblgen. 44 void printInstruction(const MCInst *MI, raw_ostream &O); 45 static const char *getRegisterName(unsigned RegNo); 46 }; 47 48 namespace WebAssembly { 49 50 const char *TypeToString(MVT Ty); 51 52 } // end namespace WebAssembly 53 54 } // end namespace llvm 55 56 #endif 57