1 //===- ARMInstPrinter.h - Convert ARM MCInst to assembly syntax -*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This class prints an ARM MCInst to a .s file.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_LIB_TARGET_ARM_INSTPRINTER_ARMINSTPRINTER_H
15 #define LLVM_LIB_TARGET_ARM_INSTPRINTER_ARMINSTPRINTER_H
17 #include "llvm/MC/MCInstPrinter.h"
18 #include "llvm/MC/MCSubtargetInfo.h"
24 class ARMInstPrinter : public MCInstPrinter {
26 ARMInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
27 const MCRegisterInfo &MRI);
29 void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
30 const MCSubtargetInfo &STI) override;
31 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
33 // Autogenerated by tblgen.
34 void printInstruction(const MCInst *MI, const MCSubtargetInfo &STI,
36 static const char *getRegisterName(unsigned RegNo);
38 void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
41 void printSORegRegOperand(const MCInst *MI, unsigned OpNum,
42 const MCSubtargetInfo &STI, raw_ostream &O);
43 void printSORegImmOperand(const MCInst *MI, unsigned OpNum,
44 const MCSubtargetInfo &STI, raw_ostream &O);
46 void printAddrModeTBB(const MCInst *MI, unsigned OpNum,
47 const MCSubtargetInfo &STI, raw_ostream &O);
48 void printAddrModeTBH(const MCInst *MI, unsigned OpNum,
49 const MCSubtargetInfo &STI, raw_ostream &O);
50 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum,
51 const MCSubtargetInfo &STI, raw_ostream &O);
52 void printAM2PostIndexOp(const MCInst *MI, unsigned OpNum,
53 const MCSubtargetInfo &STI, raw_ostream &O);
54 void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum,
55 const MCSubtargetInfo &STI, raw_ostream &O);
56 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
57 const MCSubtargetInfo &STI, raw_ostream &O);
58 template <bool AlwaysPrintImm0>
59 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum,
60 const MCSubtargetInfo &STI, raw_ostream &O);
61 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
62 const MCSubtargetInfo &STI, raw_ostream &O);
63 void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, raw_ostream &O,
64 bool AlwaysPrintImm0);
65 void printPostIdxImm8Operand(const MCInst *MI, unsigned OpNum,
66 const MCSubtargetInfo &STI, raw_ostream &O);
67 void printPostIdxRegOperand(const MCInst *MI, unsigned OpNum,
68 const MCSubtargetInfo &STI, raw_ostream &O);
69 void printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum,
70 const MCSubtargetInfo &STI, raw_ostream &O);
72 void printLdStmModeOperand(const MCInst *MI, unsigned OpNum,
73 const MCSubtargetInfo &STI, raw_ostream &O);
74 template <bool AlwaysPrintImm0>
75 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum,
76 const MCSubtargetInfo &STI, raw_ostream &O);
77 template <bool AlwaysPrintImm0>
78 void printAddrMode5FP16Operand(const MCInst *MI, unsigned OpNum,
79 const MCSubtargetInfo &STI, raw_ostream &O);
80 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum,
81 const MCSubtargetInfo &STI, raw_ostream &O);
82 void printAddrMode7Operand(const MCInst *MI, unsigned OpNum,
83 const MCSubtargetInfo &STI, raw_ostream &O);
84 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
85 const MCSubtargetInfo &STI, raw_ostream &O);
87 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
88 const MCSubtargetInfo &STI,
90 void printMemBOption(const MCInst *MI, unsigned OpNum,
91 const MCSubtargetInfo &STI, raw_ostream &O);
92 void printInstSyncBOption(const MCInst *MI, unsigned OpNum,
93 const MCSubtargetInfo &STI, raw_ostream &O);
94 void printShiftImmOperand(const MCInst *MI, unsigned OpNum,
95 const MCSubtargetInfo &STI, raw_ostream &O);
96 void printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum,
97 const MCSubtargetInfo &STI, raw_ostream &O);
98 void printPKHASRShiftImm(const MCInst *MI, unsigned OpNum,
99 const MCSubtargetInfo &STI, raw_ostream &O);
101 template <unsigned scale>
102 void printAdrLabelOperand(const MCInst *MI, unsigned OpNum,
103 const MCSubtargetInfo &STI, raw_ostream &O);
104 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum,
105 const MCSubtargetInfo &STI, raw_ostream &O);
106 void printThumbSRImm(const MCInst *MI, unsigned OpNum,
107 const MCSubtargetInfo &STI, raw_ostream &O);
108 void printThumbITMask(const MCInst *MI, unsigned OpNum,
109 const MCSubtargetInfo &STI, raw_ostream &O);
110 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
111 const MCSubtargetInfo &STI, raw_ostream &O);
112 void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum,
113 const MCSubtargetInfo &STI,
114 raw_ostream &O, unsigned Scale);
115 void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum,
116 const MCSubtargetInfo &STI,
118 void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum,
119 const MCSubtargetInfo &STI,
121 void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum,
122 const MCSubtargetInfo &STI,
124 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
125 const MCSubtargetInfo &STI, raw_ostream &O);
127 void printT2SOOperand(const MCInst *MI, unsigned OpNum,
128 const MCSubtargetInfo &STI, raw_ostream &O);
129 template <bool AlwaysPrintImm0>
130 void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
131 const MCSubtargetInfo &STI, raw_ostream &O);
132 template <bool AlwaysPrintImm0>
133 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
134 const MCSubtargetInfo &STI, raw_ostream &O);
135 template <bool AlwaysPrintImm0>
136 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
137 const MCSubtargetInfo &STI, raw_ostream &O);
138 void printT2AddrModeImm0_1020s4Operand(const MCInst *MI, unsigned OpNum,
139 const MCSubtargetInfo &STI,
141 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
142 const MCSubtargetInfo &STI,
144 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
145 const MCSubtargetInfo &STI,
147 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
148 const MCSubtargetInfo &STI, raw_ostream &O);
150 void printSetendOperand(const MCInst *MI, unsigned OpNum,
151 const MCSubtargetInfo &STI, raw_ostream &O);
152 void printCPSIMod(const MCInst *MI, unsigned OpNum,
153 const MCSubtargetInfo &STI, raw_ostream &O);
154 void printCPSIFlag(const MCInst *MI, unsigned OpNum,
155 const MCSubtargetInfo &STI, raw_ostream &O);
156 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum,
157 const MCSubtargetInfo &STI, raw_ostream &O);
158 void printBankedRegOperand(const MCInst *MI, unsigned OpNum,
159 const MCSubtargetInfo &STI, raw_ostream &O);
160 void printPredicateOperand(const MCInst *MI, unsigned OpNum,
161 const MCSubtargetInfo &STI, raw_ostream &O);
162 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
163 const MCSubtargetInfo &STI,
165 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
166 const MCSubtargetInfo &STI, raw_ostream &O);
167 void printRegisterList(const MCInst *MI, unsigned OpNum,
168 const MCSubtargetInfo &STI, raw_ostream &O);
169 void printNoHashImmediate(const MCInst *MI, unsigned OpNum,
170 const MCSubtargetInfo &STI, raw_ostream &O);
171 void printPImmediate(const MCInst *MI, unsigned OpNum,
172 const MCSubtargetInfo &STI, raw_ostream &O);
173 void printCImmediate(const MCInst *MI, unsigned OpNum,
174 const MCSubtargetInfo &STI, raw_ostream &O);
175 void printCoprocOptionImm(const MCInst *MI, unsigned OpNum,
176 const MCSubtargetInfo &STI, raw_ostream &O);
177 void printFPImmOperand(const MCInst *MI, unsigned OpNum,
178 const MCSubtargetInfo &STI, raw_ostream &O);
179 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum,
180 const MCSubtargetInfo &STI, raw_ostream &O);
181 void printImmPlusOneOperand(const MCInst *MI, unsigned OpNum,
182 const MCSubtargetInfo &STI, raw_ostream &O);
183 void printRotImmOperand(const MCInst *MI, unsigned OpNum,
184 const MCSubtargetInfo &STI, raw_ostream &O);
185 void printModImmOperand(const MCInst *MI, unsigned OpNum,
186 const MCSubtargetInfo &STI, raw_ostream &O);
187 void printGPRPairOperand(const MCInst *MI, unsigned OpNum,
188 const MCSubtargetInfo &STI, raw_ostream &O);
190 void printPCLabel(const MCInst *MI, unsigned OpNum,
191 const MCSubtargetInfo &STI, raw_ostream &O);
192 void printThumbLdrLabelOperand(const MCInst *MI, unsigned OpNum,
193 const MCSubtargetInfo &STI, raw_ostream &O);
194 void printFBits16(const MCInst *MI, unsigned OpNum,
195 const MCSubtargetInfo &STI, raw_ostream &O);
196 void printFBits32(const MCInst *MI, unsigned OpNum,
197 const MCSubtargetInfo &STI, raw_ostream &O);
198 void printVectorIndex(const MCInst *MI, unsigned OpNum,
199 const MCSubtargetInfo &STI, raw_ostream &O);
200 void printVectorListOne(const MCInst *MI, unsigned OpNum,
201 const MCSubtargetInfo &STI, raw_ostream &O);
202 void printVectorListTwo(const MCInst *MI, unsigned OpNum,
203 const MCSubtargetInfo &STI, raw_ostream &O);
204 void printVectorListTwoSpaced(const MCInst *MI, unsigned OpNum,
205 const MCSubtargetInfo &STI, raw_ostream &O);
206 void printVectorListThree(const MCInst *MI, unsigned OpNum,
207 const MCSubtargetInfo &STI, raw_ostream &O);
208 void printVectorListFour(const MCInst *MI, unsigned OpNum,
209 const MCSubtargetInfo &STI, raw_ostream &O);
210 void printVectorListOneAllLanes(const MCInst *MI, unsigned OpNum,
211 const MCSubtargetInfo &STI, raw_ostream &O);
212 void printVectorListTwoAllLanes(const MCInst *MI, unsigned OpNum,
213 const MCSubtargetInfo &STI, raw_ostream &O);
214 void printVectorListThreeAllLanes(const MCInst *MI, unsigned OpNum,
215 const MCSubtargetInfo &STI, raw_ostream &O);
216 void printVectorListFourAllLanes(const MCInst *MI, unsigned OpNum,
217 const MCSubtargetInfo &STI, raw_ostream &O);
218 void printVectorListTwoSpacedAllLanes(const MCInst *MI, unsigned OpNum,
219 const MCSubtargetInfo &STI,
221 void printVectorListThreeSpacedAllLanes(const MCInst *MI, unsigned OpNum,
222 const MCSubtargetInfo &STI,
224 void printVectorListFourSpacedAllLanes(const MCInst *MI, unsigned OpNum,
225 const MCSubtargetInfo &STI,
227 void printVectorListThreeSpaced(const MCInst *MI, unsigned OpNum,
228 const MCSubtargetInfo &STI, raw_ostream &O);
229 void printVectorListFourSpaced(const MCInst *MI, unsigned OpNum,
230 const MCSubtargetInfo &STI, raw_ostream &O);
233 } // end namespace llvm