Home | History | Annotate | Download | only in InstPrinter
      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