115 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This class prints an PPC MCInst to a .s file.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCINSTPRINTER_H14#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCINSTPRINTER_H15 16#include "llvm/MC/MCInstPrinter.h"17#include "llvm/TargetParser/Triple.h"18 19namespace llvm {20 21class PPCInstPrinter : public MCInstPrinter {22 Triple TT;23private:24 bool showRegistersWithPercentPrefix(const char *RegName) const;25 bool showRegistersWithPrefix() const;26 const char *getVerboseConditionRegName(MCRegister Reg,27 unsigned RegEncoding) const;28 29public: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 StringRef Modifier = {});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 printS32ImmOperand(const MCInst *MI, unsigned OpNo,84 const MCSubtargetInfo &STI, raw_ostream &O);85 void printS34ImmOperand(const MCInst *MI, unsigned OpNo,86 const MCSubtargetInfo &STI, raw_ostream &O);87 void printU16ImmOperand(const MCInst *MI, unsigned OpNo,88 const MCSubtargetInfo &STI, raw_ostream &O);89 void printImmZeroOperand(const MCInst *MI, unsigned OpNo,90 const MCSubtargetInfo &STI, raw_ostream &O);91 void printBranchOperand(const MCInst *MI, uint64_t Address, unsigned OpNo,92 const MCSubtargetInfo &STI, raw_ostream &O);93 void printAbsBranchOperand(const MCInst *MI, unsigned OpNo,94 const MCSubtargetInfo &STI, raw_ostream &O);95 void printTLSCall(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,96 raw_ostream &O);97 98 void printcrbitm(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,99 raw_ostream &O);100 101 void printMemRegImm(const MCInst *MI, unsigned OpNo,102 const MCSubtargetInfo &STI, raw_ostream &O);103 void printMemRegImmHash(const MCInst *MI, unsigned OpNo,104 const MCSubtargetInfo &STI, raw_ostream &O);105 void printMemRegImm34PCRel(const MCInst *MI, unsigned OpNo,106 const MCSubtargetInfo &STI, raw_ostream &O);107 void printMemRegImm34(const MCInst *MI, unsigned OpNo,108 const MCSubtargetInfo &STI, raw_ostream &O);109 void printMemRegReg(const MCInst *MI, unsigned OpNo,110 const MCSubtargetInfo &STI, raw_ostream &O);111};112} // end namespace llvm113 114#endif115