1 //===-- HexagonInstPrinter.h - Convert Hexagon MCInst to assembly syntax --===// 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 // This class prints an Hexagon MCInst to a .s file. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_TARGET_HEXAGON_INSTPRINTER_HEXAGONINSTPRINTER_H 15 #define LLVM_LIB_TARGET_HEXAGON_INSTPRINTER_HEXAGONINSTPRINTER_H 16 17 #include "llvm/MC/MCInstPrinter.h" 18 #include "llvm/MC/MCInstrInfo.h" 19 20 namespace llvm { 21 class HexagonInstPrinter : public MCInstPrinter { 22 public: HexagonInstPrinter(MCAsmInfo const & MAI,MCInstrInfo const & MII,MCRegisterInfo const & MRI)23 explicit HexagonInstPrinter(MCAsmInfo const &MAI, 24 MCInstrInfo const &MII, 25 MCRegisterInfo const &MRI) 26 : MCInstPrinter(MAI, MII, MRI), MII(MII) {} 27 28 void printInst(MCInst const *MI, raw_ostream &O, StringRef Annot, 29 const MCSubtargetInfo &STI) override; 30 virtual StringRef getOpcodeName(unsigned Opcode) const; 31 void printInstruction(const MCInst *MI, raw_ostream &O); 32 StringRef getRegName(unsigned RegNo) const; 33 static const char *getRegisterName(unsigned RegNo); 34 35 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 36 void printImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 37 void printExtOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 38 void printUnsignedImmOperand(const MCInst *MI, unsigned OpNo, 39 raw_ostream &O) const; 40 void printNegImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 41 const; 42 void printNOneImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 43 const; 44 void printMEMriOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 45 const; 46 void printFrameIndexOperand(const MCInst *MI, unsigned OpNo, 47 raw_ostream &O) const; 48 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 49 const; 50 void printCallOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 51 const; 52 void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 53 const; 54 void printPredicateOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 55 const; 56 void printGlobalOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) 57 const; 58 void printJumpTable(const MCInst *MI, unsigned OpNo, raw_ostream &O) const; 59 60 void printConstantPool(const MCInst *MI, unsigned OpNo, 61 raw_ostream &O) const; 62 printSymbolHi(const MCInst * MI,unsigned OpNo,raw_ostream & O)63 void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O) const 64 { printSymbol(MI, OpNo, O, true); } printSymbolLo(const MCInst * MI,unsigned OpNo,raw_ostream & O)65 void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O) const 66 { printSymbol(MI, OpNo, O, false); } 67 getMII()68 const MCInstrInfo &getMII() const { 69 return MII; 70 } 71 72 protected: 73 void printSymbol(const MCInst *MI, unsigned OpNo, raw_ostream &O, bool hi) 74 const; 75 76 static const char PacketPadding; 77 78 private: 79 const MCInstrInfo &MII; 80 81 }; 82 83 } // end namespace llvm 84 85 #endif 86