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 /// \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