blob: 07b0f914e447122c4e2fdb29cb62ea22492dea50 [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
Eric Liu01792302016-04-18 12:21:59 +000018#include "llvm/ADT/SmallVector.h"
Dan Gohman5e0886b2015-12-06 19:42:29 +000019#include "llvm/CodeGen/MachineValueType.h"
Dan Gohman83947562016-01-20 05:54:22 +000020#include "llvm/MC/MCInstPrinter.h"
Dan Gohman10e730a2015-06-29 23:51:55 +000021
22namespace llvm {
23
Dan Gohman10e730a2015-06-29 23:51:55 +000024class MCSubtargetInfo;
25
Dan Gohmanfd4a88c2015-11-25 16:29:24 +000026class WebAssemblyInstPrinter final : public MCInstPrinter {
Dan Gohman1d68e80f2016-01-12 19:14:46 +000027 uint64_t ControlFlowCounter;
28 SmallVector<std::pair<uint64_t, bool>, 0> ControlFlowStack;
29
Dan Gohman10e730a2015-06-29 23:51:55 +000030public:
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;
JF Bastienb9073fb2015-07-22 21:28:15 +000037
JF Bastienaf111db2015-08-24 22:16:48 +000038 // Used by tblegen code.
39 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Dan Gohmanbb372242016-01-26 03:39:31 +000040 void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo,
41 raw_ostream &O);
JF Bastienaf111db2015-08-24 22:16:48 +000042
JF Bastienb9073fb2015-07-22 21:28:15 +000043 // Autogenerated by tblgen.
44 void printInstruction(const MCInst *MI, raw_ostream &O);
45 static const char *getRegisterName(unsigned RegNo);
Dan Gohman10e730a2015-06-29 23:51:55 +000046};
47
Dan Gohman5e0886b2015-12-06 19:42:29 +000048namespace WebAssembly {
49
50const char *TypeToString(MVT Ty);
51
52} // end namespace WebAssembly
53
Dan Gohman10e730a2015-06-29 23:51:55 +000054} // end namespace llvm
55
56#endif