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 | 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 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 | |