Line data Source code
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 375 : 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
|