1e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes//===-- HexagonInstPrinter.h - Convert Hexagon MCInst to assembly syntax --===// 2e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// 3e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// The LLVM Compiler Infrastructure 4e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// 5e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// This file is distributed under the University of Illinois Open Source 6e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// License. See LICENSE.TXT for details. 7e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// 8e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes//===----------------------------------------------------------------------===// 9e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// 10e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// This class prints an Hexagon MCInst to a .s file. 11e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes// 12e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes//===----------------------------------------------------------------------===// 13e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 14e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#ifndef HEXAGONINSTPRINTER_H 15e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#define HEXAGONINSTPRINTER_H 16e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 17e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#include "llvm/MC/MCInstPrinter.h" 18d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma#include "llvm/MC/MCInstrInfo.h" 19e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 20e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezesnamespace llvm { 21d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma class HexagonMCInst; 22d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma 23e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes class HexagonInstPrinter : public MCInstPrinter { 24e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes public: 25e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes explicit HexagonInstPrinter(const MCAsmInfo &MAI, 26e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const MCInstrInfo &MII, 27e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const MCRegisterInfo &MRI) 28d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma : MCInstPrinter(MAI, MII, MRI), MII(MII) {} 29e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override; 3126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void printInst(const HexagonMCInst *MI, raw_ostream &O, StringRef Annot); 32e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes virtual StringRef getOpcodeName(unsigned Opcode) const; 33e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printInstruction(const MCInst *MI, raw_ostream &O); 34e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes StringRef getRegName(unsigned RegNo) const; 35e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes static const char *getRegisterName(unsigned RegNo); 36e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 37e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 38e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 39e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printExtOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 4026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void printUnsignedImmOperand(const MCInst *MI, unsigned OpNo, 4126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande raw_ostream &O) const; 42e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printNegImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 43e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 44e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printNOneImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 45e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 46e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printMEMriOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 47e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 4826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void printFrameIndexOperand(const MCInst *MI, unsigned OpNo, 4926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande raw_ostream &O) const; 50e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 51e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 52e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printCallOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 53e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 54e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 55e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 56e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printPredicateOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 57e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 58e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printGlobalOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 59e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 60e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printJumpTable(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 61e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 6226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void printConstantPool(const MCInst *MI, unsigned OpNo, 6326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande raw_ostream &O) const; 64e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 65e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O) const 66e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes { printSymbol(MI, OpNo, O, true); } 67e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O) const 68e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes { printSymbol(MI, OpNo, O, false); } 69e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 70d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma const MCInstrInfo &getMII() const { 71d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma return MII; 72d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma } 73d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma 74e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes protected: 75e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes void printSymbol(const MCInst *MI, unsigned OpNo, raw_ostream &O, bool hi) 76e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes const; 77d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma 78d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma static const char PacketPadding; 79d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma 80d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma private: 81d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma const MCInstrInfo &MII; 82d6c98ae63824854ea2175b362a10985cac7cfb32Jyotsna Verma 83e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes }; 84e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 85e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes} // end namespace llvm 86e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes 87e5041e6fa8fa74a26e031b7487be1912257c87f1Evandro Menezes#endif 88