xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===-- AMDGPUInstPrinter.h - AMDGPU MC Inst -> ASM interface ---*- 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 /// \file
10 //===----------------------------------------------------------------------===//
11 
12 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUINSTPRINTER_H
13 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUINSTPRINTER_H
14 
15 #include "llvm/MC/MCInstPrinter.h"
16 
17 namespace llvm {
18 class MCInstrDesc;
19 
20 class AMDGPUInstPrinter : public MCInstPrinter {
21 public:
AMDGPUInstPrinter(const MCAsmInfo & MAI,const MCInstrInfo & MII,const MCRegisterInfo & MRI)22   AMDGPUInstPrinter(const MCAsmInfo &MAI,
23                     const MCInstrInfo &MII, const MCRegisterInfo &MRI)
24     : MCInstPrinter(MAI, MII, MRI) {}
25 
26   // Autogenerated by tblgen
27   std::pair<const char *, uint64_t>
28   getMnemonic(const MCInst &MI) const override;
29   void printInstruction(const MCInst *MI, uint64_t Address,
30                         const MCSubtargetInfo &STI, raw_ostream &O);
31   static const char *getRegisterName(MCRegister Reg);
32 
33   void printRegName(raw_ostream &OS, MCRegister Reg) override;
34   void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
35                  const MCSubtargetInfo &STI, raw_ostream &O) override;
36   static void printRegOperand(MCRegister Reg, raw_ostream &O,
37                               const MCRegisterInfo &MRI);
38 
39 private:
40   void printU16ImmOperand(const MCInst *MI, unsigned OpNo,
41                           const MCSubtargetInfo &STI, raw_ostream &O);
42   void printU16ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
43   void printU32ImmOperand(const MCInst *MI, unsigned OpNo,
44                           const MCSubtargetInfo &STI, raw_ostream &O);
45   void printFP64ImmOperand(const MCInst *MI, unsigned OpNo,
46                            const MCSubtargetInfo &STI, raw_ostream &O);
47   void printNamedBit(const MCInst *MI, unsigned OpNo, raw_ostream &O,
48                      StringRef BitName);
49   void printOffset(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
50                    raw_ostream &O);
51   void printFlatOffset(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
52                        raw_ostream &O);
53 
54   void printSMRDOffset8(const MCInst *MI, unsigned OpNo,
55                        const MCSubtargetInfo &STI, raw_ostream &O);
56   void printSMEMOffset(const MCInst *MI, unsigned OpNo,
57                        const MCSubtargetInfo &STI, raw_ostream &O);
58   void printSMRDLiteralOffset(const MCInst *MI, unsigned OpNo,
59                               const MCSubtargetInfo &STI, raw_ostream &O);
60   void printCPol(const MCInst *MI, unsigned OpNo,
61                  const MCSubtargetInfo &STI, raw_ostream &O);
62   void printTH(const MCInst *MI, int64_t TH, int64_t Scope, raw_ostream &O);
63   void printScope(int64_t Scope, raw_ostream &O);
64   void printDim(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
65                 raw_ostream &O);
66   void printR128A16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
67                  raw_ostream &O);
68   void printFORMAT(const MCInst *MI, unsigned OpNo,
69                    const MCSubtargetInfo &STI, raw_ostream &O);
70   void printSymbolicFormat(const MCInst *MI,
71                            const MCSubtargetInfo &STI, raw_ostream &O);
72 
73   void printRegOperand(unsigned RegNo, raw_ostream &O);
74   void printVOPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
75                    raw_ostream &O);
76   void printVINTRPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
77                       raw_ostream &O);
78   void printImmediateInt16(uint32_t Imm, const MCSubtargetInfo &STI,
79                            raw_ostream &O);
80   void printImmediateBF16(uint32_t Imm, const MCSubtargetInfo &STI,
81                           raw_ostream &O);
82   void printImmediateF16(uint32_t Imm, const MCSubtargetInfo &STI,
83                          raw_ostream &O);
84   void printImmediateV216(uint32_t Imm, uint8_t OpType,
85                           const MCSubtargetInfo &STI, raw_ostream &O);
86   bool printImmediateFloat32(uint32_t Imm, const MCSubtargetInfo &STI,
87                              raw_ostream &O);
88   void printImmediate32(uint32_t Imm, const MCSubtargetInfo &STI,
89                         raw_ostream &O);
90   void printImmediate64(uint64_t Imm, const MCSubtargetInfo &STI,
91                         raw_ostream &O, bool IsFP);
92   void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
93                     raw_ostream &O);
94   void printRegularOperand(const MCInst *MI, unsigned OpNo,
95                            const MCSubtargetInfo &STI, raw_ostream &O);
printOperand(const MCInst * MI,uint64_t,unsigned OpNum,const MCSubtargetInfo & STI,raw_ostream & O)96   void printOperand(const MCInst *MI, uint64_t /*Address*/, unsigned OpNum,
97                     const MCSubtargetInfo &STI, raw_ostream &O) {
98     printOperand(MI, OpNum, STI, O);
99   }
100   void printOperandAndFPInputMods(const MCInst *MI, unsigned OpNo,
101                                   const MCSubtargetInfo &STI, raw_ostream &O);
102   void printOperandAndIntInputMods(const MCInst *MI, unsigned OpNo,
103                                    const MCSubtargetInfo &STI, raw_ostream &O);
104   void printDPP8(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
105                  raw_ostream &O);
106   void printDPPCtrl(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
107                     raw_ostream &O);
108   void printDppBoundCtrl(const MCInst *MI, unsigned OpNo,
109                          const MCSubtargetInfo &STI, raw_ostream &O);
110   void printDppFI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
111                   raw_ostream &O);
112   void printSDWASel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
113   void printSDWADstSel(const MCInst *MI, unsigned OpNo,
114                        const MCSubtargetInfo &STI, raw_ostream &O);
115   void printSDWASrc0Sel(const MCInst *MI, unsigned OpNo,
116                         const MCSubtargetInfo &STI, raw_ostream &O);
117   void printSDWASrc1Sel(const MCInst *MI, unsigned OpNo,
118                         const MCSubtargetInfo &STI, raw_ostream &O);
119   void printSDWADstUnused(const MCInst *MI, unsigned OpNo,
120                           const MCSubtargetInfo &STI, raw_ostream &O);
121   void printPackedModifier(const MCInst *MI, StringRef Name, unsigned Mod,
122                            raw_ostream &O);
123   void printOpSel(const MCInst *MI, unsigned OpNo,
124                   const MCSubtargetInfo &STI, raw_ostream &O);
125   void printOpSelHi(const MCInst *MI, unsigned OpNo,
126                   const MCSubtargetInfo &STI, raw_ostream &O);
127   void printNegLo(const MCInst *MI, unsigned OpNo,
128                   const MCSubtargetInfo &STI, raw_ostream &O);
129   void printNegHi(const MCInst *MI, unsigned OpNo,
130                   const MCSubtargetInfo &STI, raw_ostream &O);
131   void printIndexKey8bit(const MCInst *MI, unsigned OpNo,
132                          const MCSubtargetInfo &STI, raw_ostream &O);
133   void printIndexKey16bit(const MCInst *MI, unsigned OpNo,
134                           const MCSubtargetInfo &STI, raw_ostream &O);
135   void printIndexKey32bit(const MCInst *MI, unsigned OpNo,
136                           const MCSubtargetInfo &STI, raw_ostream &O);
137   void printInterpSlot(const MCInst *MI, unsigned OpNo,
138                        const MCSubtargetInfo &STI, raw_ostream &O);
139   void printInterpAttr(const MCInst *MI, unsigned OpNo,
140                        const MCSubtargetInfo &STI, raw_ostream &O);
141   void printInterpAttrChan(const MCInst *MI, unsigned OpNo,
142                            const MCSubtargetInfo &STI, raw_ostream &O);
143 
144   void printGPRIdxMode(const MCInst *MI, unsigned OpNo,
145                        const MCSubtargetInfo &STI, raw_ostream &O);
146   void printMemOperand(const MCInst *MI, unsigned OpNo,
147                        const MCSubtargetInfo &STI, raw_ostream &O);
148   void printBLGP(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
149                  raw_ostream &O);
150   bool needsImpliedVcc(const MCInstrDesc &Desc, unsigned OpNo) const;
151   void printDefaultVccOperand(bool FirstOperand, const MCSubtargetInfo &STI,
152                               raw_ostream &O);
153 
154   void printExpSrcN(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
155                     raw_ostream &O, unsigned N);
156   void printExpSrc0(const MCInst *MI, unsigned OpNo,
157                     const MCSubtargetInfo &STI, raw_ostream &O);
158   void printExpSrc1(const MCInst *MI, unsigned OpNo,
159                     const MCSubtargetInfo &STI, raw_ostream &O);
160   void printExpSrc2(const MCInst *MI, unsigned OpNo,
161                     const MCSubtargetInfo &STI, raw_ostream &O);
162   void printExpSrc3(const MCInst *MI, unsigned OpNo,
163                     const MCSubtargetInfo &STI, raw_ostream &O);
164   void printExpTgt(const MCInst *MI, unsigned OpNo,
165                    const MCSubtargetInfo &STI, raw_ostream &O);
166   void printNamedInt(const MCInst *MI, unsigned OpNo,
167                      const MCSubtargetInfo &STI, raw_ostream &O,
168                      StringRef Prefix, bool PrintInHex, bool AlwaysPrint);
169 
170   void printBitOp3(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
171                    raw_ostream &O);
172 
173 public:
174   static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
175                          StringRef Asm, StringRef Default = "");
176   static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
177                          char Asm);
178 protected:
179   void printAbs(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
180                 raw_ostream &O);
181   void printClamp(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
182                   raw_ostream &O);
183   void printOModSI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
184                    raw_ostream &O);
185   void printLiteral(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
186                     raw_ostream &O);
187   void printLast(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
188                  raw_ostream &O);
189   void printNeg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
190                 raw_ostream &O);
191   void printOMOD(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
192                  raw_ostream &O);
193   void printRel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
194                 raw_ostream &O);
195   void printUpdateExecMask(const MCInst *MI, unsigned OpNo,
196                            const MCSubtargetInfo &STI, raw_ostream &O);
197   void printUpdatePred(const MCInst *MI, unsigned OpNo,
198                        const MCSubtargetInfo &STI, raw_ostream &O);
199   void printWrite(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
200                   raw_ostream &O);
201   void printBankSwizzle(const MCInst *MI, unsigned OpNo,
202                         const MCSubtargetInfo &STI, raw_ostream &O);
203   void printRSel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
204                  raw_ostream &O);
205   void printCT(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
206                raw_ostream &O);
207   void printKCache(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
208                    raw_ostream &O);
209   void printSendMsg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
210                     raw_ostream &O);
211   void printSwizzle(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
212                     raw_ostream &O);
213   void printSWaitCnt(const MCInst *MI, unsigned OpNo,
214                      const MCSubtargetInfo &STI, raw_ostream &O);
215   void printDepCtr(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
216                    raw_ostream &O);
217   void printSDelayALU(const MCInst *MI, unsigned OpNo,
218                       const MCSubtargetInfo &STI, raw_ostream &O);
219   void printHwreg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
220                   raw_ostream &O);
221   void printEndpgm(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
222                    raw_ostream &O);
223 };
224 
225 } // End namespace llvm
226 
227 #endif
228