blob: a67ecaa2e6bfcf9f11751c38d6f26d48784a0829 [file] [log] [blame]
Dan Gohman10e730a2015-06-29 23:51:55 +00001// 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
Dan Gohman5e0886b2015-12-06 19:42:29 +000018#include "llvm/CodeGen/MachineValueType.h"
Dan Gohman83947562016-01-20 05:54:22 +000019#include "llvm/MC/MCInstPrinter.h"
Dan Gohman10e730a2015-06-29 23:51:55 +000020
21namespace llvm {
22
Dan Gohman10e730a2015-06-29 23:51:55 +000023class MCSubtargetInfo;
24
Dan Gohmanfd4a88c2015-11-25 16:29:24 +000025class WebAssemblyInstPrinter final : public MCInstPrinter {
Dan Gohman1d68e80f2016-01-12 19:14:46 +000026 uint64_t ControlFlowCounter;
27 SmallVector<std::pair<uint64_t, bool>, 0> ControlFlowStack;
28
Dan Gohman10e730a2015-06-29 23:51:55 +000029public:
30 WebAssemblyInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
31 const MCRegisterInfo &MRI);
32
33 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
34 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
35 const MCSubtargetInfo &STI) override;
JF Bastienb9073fb2015-07-22 21:28:15 +000036
JF Bastienaf111db2015-08-24 22:16:48 +000037 // Used by tblegen code.
38 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Dan Gohmanbb372242016-01-26 03:39:31 +000039 void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo,
40 raw_ostream &O);
JF Bastienaf111db2015-08-24 22:16:48 +000041
JF Bastienb9073fb2015-07-22 21:28:15 +000042 // Autogenerated by tblgen.
43 void printInstruction(const MCInst *MI, raw_ostream &O);
44 static const char *getRegisterName(unsigned RegNo);
Dan Gohman10e730a2015-06-29 23:51:55 +000045};
46
Dan Gohman5e0886b2015-12-06 19:42:29 +000047namespace WebAssembly {
48
49const char *TypeToString(MVT Ty);
50
51} // end namespace WebAssembly
52
Dan Gohman10e730a2015-06-29 23:51:55 +000053} // end namespace llvm
54
55#endif