| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 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 | 
| Adrian Prantl | 5f8f34e4 | 2018-05-01 15:54:18 +0000 | [diff] [blame] | 11 | /// This class prints an WebAssembly MCInst to wasm file syntax. | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 12 | /// | 
|  | 13 | //===----------------------------------------------------------------------===// | 
|  | 14 |  | 
|  | 15 | #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_INSTPRINTER_WEBASSEMBLYINSTPRINTER_H | 
|  | 16 | #define LLVM_LIB_TARGET_WEBASSEMBLY_INSTPRINTER_WEBASSEMBLYINSTPRINTER_H | 
|  | 17 |  | 
| Eric Liu | 0179230 | 2016-04-18 12:21:59 +0000 | [diff] [blame] | 18 | #include "llvm/ADT/SmallVector.h" | 
| Zachary Turner | 264b5d9 | 2017-06-07 03:48:56 +0000 | [diff] [blame] | 19 | #include "llvm/BinaryFormat/Wasm.h" | 
| Dan Gohman | 8394756 | 2016-01-20 05:54:22 +0000 | [diff] [blame] | 20 | #include "llvm/MC/MCInstPrinter.h" | 
| David Blaikie | 13e77db | 2018-03-23 23:58:25 +0000 | [diff] [blame] | 21 | #include "llvm/Support/MachineValueType.h" | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 22 |  | 
|  | 23 | namespace llvm { | 
|  | 24 |  | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 25 | class MCSubtargetInfo; | 
|  | 26 |  | 
| Dan Gohman | fd4a88c | 2015-11-25 16:29:24 +0000 | [diff] [blame] | 27 | class WebAssemblyInstPrinter final : public MCInstPrinter { | 
| Heejin Ahn | 3103d3d | 2018-10-25 23:45:48 +0000 | [diff] [blame] | 28 | uint64_t ControlFlowCounter = 0; | 
|  | 29 | uint64_t EHPadStackCounter = 0; | 
|  | 30 | SmallVector<std::pair<uint64_t, bool>, 4> ControlFlowStack; | 
|  | 31 | SmallVector<uint64_t, 4> EHPadStack; | 
|  | 32 |  | 
|  | 33 | enum EHInstKind { TRY, CATCH, END_TRY }; | 
|  | 34 | EHInstKind LastSeenEHInst = END_TRY; | 
| Dan Gohman | 1d68e80f | 2016-01-12 19:14:46 +0000 | [diff] [blame] | 35 |  | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 36 | public: | 
|  | 37 | WebAssemblyInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, | 
|  | 38 | const MCRegisterInfo &MRI); | 
|  | 39 |  | 
|  | 40 | void printRegName(raw_ostream &OS, unsigned RegNo) const override; | 
|  | 41 | void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, | 
|  | 42 | const MCSubtargetInfo &STI) override; | 
| JF Bastien | b9073fb | 2015-07-22 21:28:15 +0000 | [diff] [blame] | 43 |  | 
| JF Bastien | af111db | 2015-08-24 22:16:48 +0000 | [diff] [blame] | 44 | // Used by tblegen code. | 
|  | 45 | void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); | 
| Dan Gohman | bb37224 | 2016-01-26 03:39:31 +0000 | [diff] [blame] | 46 | void printWebAssemblyP2AlignOperand(const MCInst *MI, unsigned OpNo, | 
|  | 47 | raw_ostream &O); | 
| Dan Gohman | 2726b88 | 2016-10-06 22:29:32 +0000 | [diff] [blame] | 48 | void printWebAssemblySignatureOperand(const MCInst *MI, unsigned OpNo, | 
|  | 49 | raw_ostream &O); | 
| JF Bastien | af111db | 2015-08-24 22:16:48 +0000 | [diff] [blame] | 50 |  | 
| JF Bastien | b9073fb | 2015-07-22 21:28:15 +0000 | [diff] [blame] | 51 | // Autogenerated by tblgen. | 
|  | 52 | void printInstruction(const MCInst *MI, raw_ostream &O); | 
|  | 53 | static const char *getRegisterName(unsigned RegNo); | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 54 | }; | 
|  | 55 |  | 
| Dan Gohman | 5e0886b | 2015-12-06 19:42:29 +0000 | [diff] [blame] | 56 | namespace WebAssembly { | 
|  | 57 |  | 
| Derek Schuff | 77a7a38 | 2018-10-03 22:22:48 +0000 | [diff] [blame] | 58 | const char *TypeToString(wasm::ValType Ty); | 
| Dan Gohman | 5e0886b | 2015-12-06 19:42:29 +0000 | [diff] [blame] | 59 |  | 
|  | 60 | } // end namespace WebAssembly | 
|  | 61 |  | 
| Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 62 | } // end namespace llvm | 
|  | 63 |  | 
|  | 64 | #endif |