]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AMDGPU / InstPrinter / AMDGPUInstPrinter.h
1 //===-- AMDGPUInstPrinter.h - AMDGPU MC Inst -> ASM interface ---*- C++ -*-===//
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 /// \file
11 //===----------------------------------------------------------------------===//
12
13 #ifndef LLVM_LIB_TARGET_AMDGPU_INSTPRINTER_AMDGPUINSTPRINTER_H
14 #define LLVM_LIB_TARGET_AMDGPU_INSTPRINTER_AMDGPUINSTPRINTER_H
15
16 #include "llvm/MC/MCInstPrinter.h"
17
18 namespace llvm {
19
20 class AMDGPUInstPrinter : public MCInstPrinter {
21 public:
22   AMDGPUInstPrinter(const MCAsmInfo &MAI,
23                     const MCInstrInfo &MII, const MCRegisterInfo &MRI)
24     : MCInstPrinter(MAI, MII, MRI) {}
25
26   //Autogenerated by tblgen
27   void printInstruction(const MCInst *MI, const MCSubtargetInfo &STI,
28                         raw_ostream &O);
29   static const char *getRegisterName(unsigned RegNo);
30
31   void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
32                  const MCSubtargetInfo &STI) override;
33   static void printRegOperand(unsigned RegNo, raw_ostream &O,
34                               const MCRegisterInfo &MRI);
35
36 private:
37   void printU4ImmOperand(const MCInst *MI, unsigned OpNo,
38                          const MCSubtargetInfo &STI, raw_ostream &O);
39   void printU8ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
40   void printU16ImmOperand(const MCInst *MI, unsigned OpNo,
41                           const MCSubtargetInfo &STI, raw_ostream &O);
42   void printU4ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
43   void printU8ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
44   void printU16ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
45   void printS13ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
46   void printU32ImmOperand(const MCInst *MI, unsigned OpNo,
47                           const MCSubtargetInfo &STI, raw_ostream &O);
48   void printNamedBit(const MCInst *MI, unsigned OpNo, raw_ostream &O,
49                      StringRef BitName);
50   void printOffen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
51   void printIdxen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
52   void printAddr64(const MCInst *MI, unsigned OpNo, raw_ostream &O);
53   void printMBUFOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
54   void printOffset(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
55                    raw_ostream &O);
56   void printOffsetS13(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
57                       raw_ostream &O);
58
59   void printOffset0(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
60                     raw_ostream &O);
61   void printOffset1(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
62                     raw_ostream &O);
63   void printSMRDOffset8(const MCInst *MI, unsigned OpNo,
64                        const MCSubtargetInfo &STI, raw_ostream &O);
65   void printSMRDOffset20(const MCInst *MI, unsigned OpNo,
66                        const MCSubtargetInfo &STI, raw_ostream &O);
67   void printSMRDLiteralOffset(const MCInst *MI, unsigned OpNo,
68                               const MCSubtargetInfo &STI, raw_ostream &O);
69   void printGDS(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
70                 raw_ostream &O);
71   void printGLC(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
72                 raw_ostream &O);
73   void printSLC(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
74                 raw_ostream &O);
75   void printTFE(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
76                 raw_ostream &O);
77   void printDMask(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
78                   raw_ostream &O);
79   void printUNorm(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
80                   raw_ostream &O);
81   void printDA(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
82                raw_ostream &O);
83   void printR128A16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
84                  raw_ostream &O);
85   void printLWE(const MCInst *MI, unsigned OpNo,
86                 const MCSubtargetInfo &STI, raw_ostream &O);
87   void printD16(const MCInst *MI, unsigned OpNo,
88                 const MCSubtargetInfo &STI, raw_ostream &O);
89   void printExpCompr(const MCInst *MI, unsigned OpNo,
90                      const MCSubtargetInfo &STI, raw_ostream &O);
91   void printExpVM(const MCInst *MI, unsigned OpNo,
92                   const MCSubtargetInfo &STI, raw_ostream &O);
93   void printFORMAT(const MCInst *MI, unsigned OpNo,
94                    const MCSubtargetInfo &STI, raw_ostream &O);
95
96   void printRegOperand(unsigned RegNo, raw_ostream &O);
97   void printVOPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
98                    raw_ostream &O);
99   void printVINTRPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
100                       raw_ostream &O);
101   void printImmediate16(uint32_t Imm, const MCSubtargetInfo &STI,
102                         raw_ostream &O);
103   void printImmediateV216(uint32_t Imm, const MCSubtargetInfo &STI,
104                           raw_ostream &O);
105   void printImmediate32(uint32_t Imm, const MCSubtargetInfo &STI,
106                         raw_ostream &O);
107   void printImmediate64(uint64_t Imm, const MCSubtargetInfo &STI,
108                         raw_ostream &O);
109   void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
110                     raw_ostream &O);
111   void printOperandAndFPInputMods(const MCInst *MI, unsigned OpNo,
112                                   const MCSubtargetInfo &STI, raw_ostream &O);
113   void printOperandAndIntInputMods(const MCInst *MI, unsigned OpNo,
114                                    const MCSubtargetInfo &STI, raw_ostream &O);
115   void printDPPCtrl(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
116                     raw_ostream &O);
117   void printRowMask(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
118                     raw_ostream &O);
119   void printBankMask(const MCInst *MI, unsigned OpNo,
120                      const MCSubtargetInfo &STI, raw_ostream &O);
121   void printBoundCtrl(const MCInst *MI, unsigned OpNo,
122                       const MCSubtargetInfo &STI, raw_ostream &O);
123   void printSDWASel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
124   void printSDWADstSel(const MCInst *MI, unsigned OpNo,
125                        const MCSubtargetInfo &STI, raw_ostream &O);
126   void printSDWASrc0Sel(const MCInst *MI, unsigned OpNo,
127                         const MCSubtargetInfo &STI, raw_ostream &O);
128   void printSDWASrc1Sel(const MCInst *MI, unsigned OpNo,
129                         const MCSubtargetInfo &STI, raw_ostream &O);
130   void printSDWADstUnused(const MCInst *MI, unsigned OpNo,
131                           const MCSubtargetInfo &STI, raw_ostream &O);
132   void printPackedModifier(const MCInst *MI, StringRef Name, unsigned Mod,
133                            raw_ostream &O);
134   void printOpSel(const MCInst *MI, unsigned OpNo,
135                   const MCSubtargetInfo &STI, raw_ostream &O);
136   void printOpSelHi(const MCInst *MI, unsigned OpNo,
137                   const MCSubtargetInfo &STI, raw_ostream &O);
138   void printNegLo(const MCInst *MI, unsigned OpNo,
139                   const MCSubtargetInfo &STI, raw_ostream &O);
140   void printNegHi(const MCInst *MI, unsigned OpNo,
141                   const MCSubtargetInfo &STI, raw_ostream &O);
142   void printInterpSlot(const MCInst *MI, unsigned OpNo,
143                        const MCSubtargetInfo &STI, raw_ostream &O);
144   void printInterpAttr(const MCInst *MI, unsigned OpNo,
145                        const MCSubtargetInfo &STI, raw_ostream &O);
146   void printInterpAttrChan(const MCInst *MI, unsigned OpNo,
147                            const MCSubtargetInfo &STI, raw_ostream &O);
148
149   void printVGPRIndexMode(const MCInst *MI, unsigned OpNo,
150                           const MCSubtargetInfo &STI, raw_ostream &O);
151   void printMemOperand(const MCInst *MI, unsigned OpNo,
152                        const MCSubtargetInfo &STI, raw_ostream &O);
153
154
155   template <unsigned N>
156   void printExpSrcN(const MCInst *MI, unsigned OpNo,
157                     const MCSubtargetInfo &STI, raw_ostream &O);
158   void printExpSrc0(const MCInst *MI, unsigned OpNo,
159                     const MCSubtargetInfo &STI, raw_ostream &O);
160   void printExpSrc1(const MCInst *MI, unsigned OpNo,
161                     const MCSubtargetInfo &STI, raw_ostream &O);
162   void printExpSrc2(const MCInst *MI, unsigned OpNo,
163                     const MCSubtargetInfo &STI, raw_ostream &O);
164   void printExpSrc3(const MCInst *MI, unsigned OpNo,
165                     const MCSubtargetInfo &STI, raw_ostream &O);
166   void printExpTgt(const MCInst *MI, unsigned OpNo,
167                    const MCSubtargetInfo &STI, raw_ostream &O);
168
169 public:
170   static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
171                          StringRef Asm, StringRef Default = "");
172   static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
173                          char Asm);
174 protected:
175   void printAbs(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
176                 raw_ostream &O);
177   void printHigh(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
178                  raw_ostream &O);
179   void printClamp(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
180                   raw_ostream &O);
181   void printClampSI(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 printWaitFlag(const MCInst *MI, unsigned OpNo,
214                      const MCSubtargetInfo &STI, raw_ostream &O);
215   void printHwreg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
216                   raw_ostream &O);
217 };
218
219 class R600InstPrinter : public MCInstPrinter {
220 public:
221   R600InstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
222                   const MCRegisterInfo &MRI)
223     : MCInstPrinter(MAI, MII, MRI) {}
224
225   void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
226                  const MCSubtargetInfo &STI) override;
227   void printInstruction(const MCInst *MI, raw_ostream &O);
228   static const char *getRegisterName(unsigned RegNo);
229
230   void printAbs(const MCInst *MI, unsigned OpNo, raw_ostream &O);
231   void printBankSwizzle(const MCInst *MI, unsigned OpNo, raw_ostream &O);
232   void printClamp(const MCInst *MI, unsigned OpNo, raw_ostream &O);
233   void printCT(const MCInst *MI, unsigned OpNo, raw_ostream &O);
234   void printKCache(const MCInst *MI, unsigned OpNo, raw_ostream &O);
235   void printLast(const MCInst *MI, unsigned OpNo, raw_ostream &O);
236   void printLiteral(const MCInst *MI, unsigned OpNo, raw_ostream &O);
237   void printMemOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
238   void printNeg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
239   void printOMOD(const MCInst *MI, unsigned OpNo, raw_ostream &O);
240   void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
241   void printRel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
242   void printRSel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
243   void printUpdateExecMask(const MCInst *MI, unsigned OpNo, raw_ostream &O);
244   void printUpdatePred(const MCInst *MI, unsigned OpNo, raw_ostream &O);
245   void printWrite(const MCInst *MI, unsigned OpNo, raw_ostream &O);
246 };
247
248 } // End namespace llvm
249
250 #endif