1 //===- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax -*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This class prints an PPC MCInst to a .s file. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCINSTPRINTER_H 14 #define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCINSTPRINTER_H 15 16 #include "llvm/MC/MCInstPrinter.h" 17 #include "llvm/TargetParser/Triple.h" 18 19 namespace llvm { 20 21 class PPCInstPrinter : public MCInstPrinter { 22 Triple TT; 23 private: 24 bool showRegistersWithPercentPrefix(const char *RegName) const; 25 bool showRegistersWithPrefix() const; 26 const char *getVerboseConditionRegName(unsigned RegNum, 27 unsigned RegEncoding) const; 28 29 public: 30 PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 31 const MCRegisterInfo &MRI, Triple T) 32 : MCInstPrinter(MAI, MII, MRI), TT(T) {} 33 34 void printRegName(raw_ostream &OS, MCRegister Reg) override; 35 void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 36 const MCSubtargetInfo &STI, raw_ostream &O) override; 37 38 // Autogenerated by tblgen. 39 std::pair<const char *, uint64_t> 40 getMnemonic(const MCInst &MI) const override; 41 void printInstruction(const MCInst *MI, uint64_t Address, 42 const MCSubtargetInfo &STI, raw_ostream &O); 43 static const char *getRegisterName(MCRegister Reg); 44 45 bool printAliasInstr(const MCInst *MI, uint64_t Address, 46 const MCSubtargetInfo &STI, raw_ostream &OS); 47 void printCustomAliasOperand(const MCInst *MI, uint64_t Address, 48 unsigned OpIdx, unsigned PrintMethodIdx, 49 const MCSubtargetInfo &STI, raw_ostream &OS); 50 51 void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, 52 raw_ostream &O); 53 void printPredicateOperand(const MCInst *MI, unsigned OpNo, 54 const MCSubtargetInfo &STI, raw_ostream &O, 55 const char *Modifier = nullptr); 56 void printATBitsAsHint(const MCInst *MI, unsigned OpNo, 57 const MCSubtargetInfo &STI, raw_ostream &O); 58 59 void printU1ImmOperand(const MCInst *MI, unsigned OpNo, 60 const MCSubtargetInfo &STI, raw_ostream &O); 61 void printU2ImmOperand(const MCInst *MI, unsigned OpNo, 62 const MCSubtargetInfo &STI, raw_ostream &O); 63 void printU3ImmOperand(const MCInst *MI, unsigned OpNo, 64 const MCSubtargetInfo &STI, raw_ostream &O); 65 void printU4ImmOperand(const MCInst *MI, unsigned OpNo, 66 const MCSubtargetInfo &STI, raw_ostream &O); 67 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, 68 const MCSubtargetInfo &STI, raw_ostream &O); 69 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, 70 const MCSubtargetInfo &STI, raw_ostream &O); 71 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, 72 const MCSubtargetInfo &STI, raw_ostream &O); 73 void printU7ImmOperand(const MCInst *MI, unsigned OpNo, 74 const MCSubtargetInfo &STI, raw_ostream &O); 75 void printU8ImmOperand(const MCInst *MI, unsigned OpNo, 76 const MCSubtargetInfo &STI, raw_ostream &O); 77 void printU10ImmOperand(const MCInst *MI, unsigned OpNo, 78 const MCSubtargetInfo &STI, raw_ostream &O); 79 void printU12ImmOperand(const MCInst *MI, unsigned OpNo, 80 const MCSubtargetInfo &STI, raw_ostream &O); 81 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, 82 const MCSubtargetInfo &STI, raw_ostream &O); 83 void printS34ImmOperand(const MCInst *MI, unsigned OpNo, 84 const MCSubtargetInfo &STI, raw_ostream &O); 85 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, 86 const MCSubtargetInfo &STI, raw_ostream &O); 87 void printImmZeroOperand(const MCInst *MI, unsigned OpNo, 88 const MCSubtargetInfo &STI, raw_ostream &O); 89 void printBranchOperand(const MCInst *MI, uint64_t Address, unsigned OpNo, 90 const MCSubtargetInfo &STI, raw_ostream &O); 91 void printAbsBranchOperand(const MCInst *MI, unsigned OpNo, 92 const MCSubtargetInfo &STI, raw_ostream &O); 93 void printTLSCall(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, 94 raw_ostream &O); 95 96 void printcrbitm(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, 97 raw_ostream &O); 98 99 void printMemRegImm(const MCInst *MI, unsigned OpNo, 100 const MCSubtargetInfo &STI, raw_ostream &O); 101 void printMemRegImmHash(const MCInst *MI, unsigned OpNo, 102 const MCSubtargetInfo &STI, raw_ostream &O); 103 void printMemRegImm34PCRel(const MCInst *MI, unsigned OpNo, 104 const MCSubtargetInfo &STI, raw_ostream &O); 105 void printMemRegImm34(const MCInst *MI, unsigned OpNo, 106 const MCSubtargetInfo &STI, raw_ostream &O); 107 void printMemRegReg(const MCInst *MI, unsigned OpNo, 108 const MCSubtargetInfo &STI, raw_ostream &O); 109 }; 110 } // end namespace llvm 111 112 #endif 113