blob: b1de84d7e8e61c75193714ccf385a9222bc41d80 [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"
Zachary Turner264b5d92017-06-07 03:48:56 +000019#include "llvm/BinaryFormat/Wasm.h"
Dan Gohman5e0886b2015-12-06 19:42:29 +000020#include "llvm/CodeGen/MachineValueType.h"
Dan Gohman83947562016-01-20 05:54:22 +000021#include "llvm/MC/MCInstPrinter.h"
Dan Gohman10e730a2015-06-29 23:51:55 +000022
23namespace llvm {
24
Dan Gohman10e730a2015-06-29 23:51:55 +000025class MCSubtargetInfo;
26
Dan Gohmanfd4a88c2015-11-25 16:29:24 +000027class WebAssemblyInstPrinter final : public MCInstPrinter {
Dan Gohman1d68e80f2016-01-12 19:14:46 +000028 uint64_t ControlFlowCounter;
29 SmallVector<std::pair<uint64_t, bool>, 0> ControlFlowStack;
30
Dan Gohman10e730a2015-06-29 23:51:55 +000031public:
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;
JF Bastienb9073fb2015-07-22 21:28:15 +000038
JF Bastienaf111db2015-08-24 22:16:48 +000039 // Used by tblegen code.
40 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Dan Gohmanbb372242016-01-26 03:39:31 +000041 void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo,
42 raw_ostream &O);
Dan Gohman2726b882016-10-06 22:29:32 +000043 void printWebAssemblySignatureOperand(const MCInst *MI, unsigned OpNo,
44 raw_ostream &O);
JF Bastienaf111db2015-08-24 22:16:48 +000045
JF Bastienb9073fb2015-07-22 21:28:15 +000046 // Autogenerated by tblgen.
47 void printInstruction(const MCInst *MI, raw_ostream &O);
48 static const char *getRegisterName(unsigned RegNo);
Dan Gohman10e730a2015-06-29 23:51:55 +000049};
50
Dan Gohman5e0886b2015-12-06 19:42:29 +000051namespace WebAssembly {
52
53const char *TypeToString(MVT Ty);
Dan Gohman970d02c2017-03-30 23:58:19 +000054const char *TypeToString(wasm::ValType Type);
Dan Gohman5e0886b2015-12-06 19:42:29 +000055
56} // end namespace WebAssembly
57
Dan Gohman10e730a2015-06-29 23:51:55 +000058} // end namespace llvm
59
60#endif