xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- MipsMCCodeEmitter.h - Convert Mips Code to Machine Code -----------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file defines the MipsMCCodeEmitter class.
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker //
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCCODEEMITTER_H
16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCCODEEMITTER_H
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCCodeEmitter.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/DataTypes.h"
20*9880d681SAndroid Build Coastguard Worker 
21*9880d681SAndroid Build Coastguard Worker using namespace llvm;
22*9880d681SAndroid Build Coastguard Worker 
23*9880d681SAndroid Build Coastguard Worker namespace llvm {
24*9880d681SAndroid Build Coastguard Worker class MCContext;
25*9880d681SAndroid Build Coastguard Worker class MCExpr;
26*9880d681SAndroid Build Coastguard Worker class MCInst;
27*9880d681SAndroid Build Coastguard Worker class MCInstrInfo;
28*9880d681SAndroid Build Coastguard Worker class MCFixup;
29*9880d681SAndroid Build Coastguard Worker class MCOperand;
30*9880d681SAndroid Build Coastguard Worker class MCSubtargetInfo;
31*9880d681SAndroid Build Coastguard Worker class raw_ostream;
32*9880d681SAndroid Build Coastguard Worker 
33*9880d681SAndroid Build Coastguard Worker class MipsMCCodeEmitter : public MCCodeEmitter {
34*9880d681SAndroid Build Coastguard Worker   MipsMCCodeEmitter(const MipsMCCodeEmitter &) = delete;
35*9880d681SAndroid Build Coastguard Worker   void operator=(const MipsMCCodeEmitter &) = delete;
36*9880d681SAndroid Build Coastguard Worker   const MCInstrInfo &MCII;
37*9880d681SAndroid Build Coastguard Worker   MCContext &Ctx;
38*9880d681SAndroid Build Coastguard Worker   bool IsLittleEndian;
39*9880d681SAndroid Build Coastguard Worker 
40*9880d681SAndroid Build Coastguard Worker   bool isMicroMips(const MCSubtargetInfo &STI) const;
41*9880d681SAndroid Build Coastguard Worker   bool isMips32r6(const MCSubtargetInfo &STI) const;
42*9880d681SAndroid Build Coastguard Worker 
43*9880d681SAndroid Build Coastguard Worker public:
MipsMCCodeEmitter(const MCInstrInfo & mcii,MCContext & Ctx_,bool IsLittle)44*9880d681SAndroid Build Coastguard Worker   MipsMCCodeEmitter(const MCInstrInfo &mcii, MCContext &Ctx_, bool IsLittle)
45*9880d681SAndroid Build Coastguard Worker       : MCII(mcii), Ctx(Ctx_), IsLittleEndian(IsLittle) {}
46*9880d681SAndroid Build Coastguard Worker 
~MipsMCCodeEmitter()47*9880d681SAndroid Build Coastguard Worker   ~MipsMCCodeEmitter() override {}
48*9880d681SAndroid Build Coastguard Worker 
49*9880d681SAndroid Build Coastguard Worker   void EmitByte(unsigned char C, raw_ostream &OS) const;
50*9880d681SAndroid Build Coastguard Worker 
51*9880d681SAndroid Build Coastguard Worker   void EmitInstruction(uint64_t Val, unsigned Size, const MCSubtargetInfo &STI,
52*9880d681SAndroid Build Coastguard Worker                        raw_ostream &OS) const;
53*9880d681SAndroid Build Coastguard Worker 
54*9880d681SAndroid Build Coastguard Worker   void encodeInstruction(const MCInst &MI, raw_ostream &OS,
55*9880d681SAndroid Build Coastguard Worker                          SmallVectorImpl<MCFixup> &Fixups,
56*9880d681SAndroid Build Coastguard Worker                          const MCSubtargetInfo &STI) const override;
57*9880d681SAndroid Build Coastguard Worker 
58*9880d681SAndroid Build Coastguard Worker   // getBinaryCodeForInstr - TableGen'erated function for getting the
59*9880d681SAndroid Build Coastguard Worker   // binary encoding for an instruction.
60*9880d681SAndroid Build Coastguard Worker   uint64_t getBinaryCodeForInstr(const MCInst &MI,
61*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
62*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
63*9880d681SAndroid Build Coastguard Worker 
64*9880d681SAndroid Build Coastguard Worker   // getJumpTargetOpValue - Return binary encoding of the jump
65*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
66*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
67*9880d681SAndroid Build Coastguard Worker   unsigned getJumpTargetOpValue(const MCInst &MI, unsigned OpNo,
68*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
69*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
70*9880d681SAndroid Build Coastguard Worker 
71*9880d681SAndroid Build Coastguard Worker   // getBranchJumpOpValueMM - Return binary encoding of the microMIPS jump
72*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
73*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
74*9880d681SAndroid Build Coastguard Worker   unsigned getJumpTargetOpValueMM(const MCInst &MI, unsigned OpNo,
75*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
76*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
77*9880d681SAndroid Build Coastguard Worker 
78*9880d681SAndroid Build Coastguard Worker   // getUImm5Lsl2Encoding - Return binary encoding of the microMIPS jump
79*9880d681SAndroid Build Coastguard Worker   // target operand.
80*9880d681SAndroid Build Coastguard Worker   unsigned getUImm5Lsl2Encoding(const MCInst &MI, unsigned OpNo,
81*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
82*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
83*9880d681SAndroid Build Coastguard Worker 
84*9880d681SAndroid Build Coastguard Worker   unsigned getSImm3Lsa2Value(const MCInst &MI, unsigned OpNo,
85*9880d681SAndroid Build Coastguard Worker                              SmallVectorImpl<MCFixup> &Fixups,
86*9880d681SAndroid Build Coastguard Worker                              const MCSubtargetInfo &STI) const;
87*9880d681SAndroid Build Coastguard Worker 
88*9880d681SAndroid Build Coastguard Worker   unsigned getUImm6Lsl2Encoding(const MCInst &MI, unsigned OpNo,
89*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
90*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
91*9880d681SAndroid Build Coastguard Worker 
92*9880d681SAndroid Build Coastguard Worker   // getSImm9AddiuspValue - Return binary encoding of the microMIPS addiusp
93*9880d681SAndroid Build Coastguard Worker   // instruction immediate operand.
94*9880d681SAndroid Build Coastguard Worker   unsigned getSImm9AddiuspValue(const MCInst &MI, unsigned OpNo,
95*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
96*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
97*9880d681SAndroid Build Coastguard Worker 
98*9880d681SAndroid Build Coastguard Worker   // getBranchTargetOpValue - Return binary encoding of the branch
99*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
100*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
101*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTargetOpValue(const MCInst &MI, unsigned OpNo,
102*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
103*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
104*9880d681SAndroid Build Coastguard Worker 
105*9880d681SAndroid Build Coastguard Worker   // getBranchTargetOpValue1SImm16 - Return binary encoding of the branch
106*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
107*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
108*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTargetOpValue1SImm16(const MCInst &MI, unsigned OpNo,
109*9880d681SAndroid Build Coastguard Worker                                          SmallVectorImpl<MCFixup> &Fixups,
110*9880d681SAndroid Build Coastguard Worker                                          const MCSubtargetInfo &STI) const;
111*9880d681SAndroid Build Coastguard Worker 
112*9880d681SAndroid Build Coastguard Worker   // getBranchTargetOpValueMMR6 - Return binary encoding of the branch
113*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
114*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
115*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTargetOpValueMMR6(const MCInst &MI, unsigned OpNo,
116*9880d681SAndroid Build Coastguard Worker                                       SmallVectorImpl<MCFixup> &Fixups,
117*9880d681SAndroid Build Coastguard Worker                                       const MCSubtargetInfo &STI) const;
118*9880d681SAndroid Build Coastguard Worker 
119*9880d681SAndroid Build Coastguard Worker   // getBranchTarget7OpValue - Return binary encoding of the microMIPS branch
120*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
121*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
122*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTarget7OpValueMM(const MCInst &MI, unsigned OpNo,
123*9880d681SAndroid Build Coastguard Worker                                      SmallVectorImpl<MCFixup> &Fixups,
124*9880d681SAndroid Build Coastguard Worker                                      const MCSubtargetInfo &STI) const;
125*9880d681SAndroid Build Coastguard Worker 
126*9880d681SAndroid Build Coastguard Worker   // getBranchTargetOpValueMMPC10 - Return binary encoding of the microMIPS
127*9880d681SAndroid Build Coastguard Worker   // 10-bit branch target operand. If the machine operand requires relocation,
128*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
129*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTargetOpValueMMPC10(const MCInst &MI, unsigned OpNo,
130*9880d681SAndroid Build Coastguard Worker                                         SmallVectorImpl<MCFixup> &Fixups,
131*9880d681SAndroid Build Coastguard Worker                                         const MCSubtargetInfo &STI) const;
132*9880d681SAndroid Build Coastguard Worker 
133*9880d681SAndroid Build Coastguard Worker   // getBranchTargetOpValue - Return binary encoding of the microMIPS branch
134*9880d681SAndroid Build Coastguard Worker   // target operand. If the machine operand requires relocation,
135*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
136*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTargetOpValueMM(const MCInst &MI, unsigned OpNo,
137*9880d681SAndroid Build Coastguard Worker                                     SmallVectorImpl<MCFixup> &Fixups,
138*9880d681SAndroid Build Coastguard Worker                                     const MCSubtargetInfo &STI) const;
139*9880d681SAndroid Build Coastguard Worker 
140*9880d681SAndroid Build Coastguard Worker   // getBranchTarget21OpValue - Return binary encoding of the branch
141*9880d681SAndroid Build Coastguard Worker   // offset operand. If the machine operand requires relocation,
142*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
143*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTarget21OpValue(const MCInst &MI, unsigned OpNo,
144*9880d681SAndroid Build Coastguard Worker                                    SmallVectorImpl<MCFixup> &Fixups,
145*9880d681SAndroid Build Coastguard Worker                                    const MCSubtargetInfo &STI) const;
146*9880d681SAndroid Build Coastguard Worker 
147*9880d681SAndroid Build Coastguard Worker   // getBranchTarget21OpValueMM - Return binary encoding of the branch
148*9880d681SAndroid Build Coastguard Worker   // offset operand for microMIPS. If the machine operand requires
149*9880d681SAndroid Build Coastguard Worker   // relocation,record the relocation and return zero.
150*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTarget21OpValueMM(const MCInst &MI, unsigned OpNo,
151*9880d681SAndroid Build Coastguard Worker                                       SmallVectorImpl<MCFixup> &Fixups,
152*9880d681SAndroid Build Coastguard Worker                                       const MCSubtargetInfo &STI) const;
153*9880d681SAndroid Build Coastguard Worker 
154*9880d681SAndroid Build Coastguard Worker   // getBranchTarget26OpValue - Return binary encoding of the branch
155*9880d681SAndroid Build Coastguard Worker   // offset operand. If the machine operand requires relocation,
156*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
157*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTarget26OpValue(const MCInst &MI, unsigned OpNo,
158*9880d681SAndroid Build Coastguard Worker                                     SmallVectorImpl<MCFixup> &Fixups,
159*9880d681SAndroid Build Coastguard Worker                                     const MCSubtargetInfo &STI) const;
160*9880d681SAndroid Build Coastguard Worker 
161*9880d681SAndroid Build Coastguard Worker   // getBranchTarget26OpValueMM - Return binary encoding of the branch
162*9880d681SAndroid Build Coastguard Worker   // offset operand. If the machine operand requires relocation,
163*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
164*9880d681SAndroid Build Coastguard Worker   unsigned getBranchTarget26OpValueMM(const MCInst &MI, unsigned OpNo,
165*9880d681SAndroid Build Coastguard Worker                                       SmallVectorImpl<MCFixup> &Fixups,
166*9880d681SAndroid Build Coastguard Worker                                       const MCSubtargetInfo &STI) const;
167*9880d681SAndroid Build Coastguard Worker 
168*9880d681SAndroid Build Coastguard Worker   // getJumpOffset16OpValue - Return binary encoding of the jump
169*9880d681SAndroid Build Coastguard Worker   // offset operand. If the machine operand requires relocation,
170*9880d681SAndroid Build Coastguard Worker   // record the relocation and return zero.
171*9880d681SAndroid Build Coastguard Worker   unsigned getJumpOffset16OpValue(const MCInst &MI, unsigned OpNo,
172*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
173*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
174*9880d681SAndroid Build Coastguard Worker 
175*9880d681SAndroid Build Coastguard Worker   // getMachineOpValue - Return binary encoding of operand. If the machin
176*9880d681SAndroid Build Coastguard Worker   // operand requires relocation, record the relocation and return zero.
177*9880d681SAndroid Build Coastguard Worker   unsigned getMachineOpValue(const MCInst &MI, const MCOperand &MO,
178*9880d681SAndroid Build Coastguard Worker                              SmallVectorImpl<MCFixup> &Fixups,
179*9880d681SAndroid Build Coastguard Worker                              const MCSubtargetInfo &STI) const;
180*9880d681SAndroid Build Coastguard Worker 
181*9880d681SAndroid Build Coastguard Worker   unsigned getMSAMemEncoding(const MCInst &MI, unsigned OpNo,
182*9880d681SAndroid Build Coastguard Worker                              SmallVectorImpl<MCFixup> &Fixups,
183*9880d681SAndroid Build Coastguard Worker                              const MCSubtargetInfo &STI) const;
184*9880d681SAndroid Build Coastguard Worker 
185*9880d681SAndroid Build Coastguard Worker   template <unsigned ShiftAmount = 0>
186*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncoding(const MCInst &MI, unsigned OpNo,
187*9880d681SAndroid Build Coastguard Worker                           SmallVectorImpl<MCFixup> &Fixups,
188*9880d681SAndroid Build Coastguard Worker                           const MCSubtargetInfo &STI) const;
189*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm4(const MCInst &MI, unsigned OpNo,
190*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
191*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
192*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm4Lsl1(const MCInst &MI, unsigned OpNo,
193*9880d681SAndroid Build Coastguard Worker                                     SmallVectorImpl<MCFixup> &Fixups,
194*9880d681SAndroid Build Coastguard Worker                                     const MCSubtargetInfo &STI) const;
195*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm4Lsl2(const MCInst &MI, unsigned OpNo,
196*9880d681SAndroid Build Coastguard Worker                                     SmallVectorImpl<MCFixup> &Fixups,
197*9880d681SAndroid Build Coastguard Worker                                     const MCSubtargetInfo &STI) const;
198*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMSPImm5Lsl2(const MCInst &MI, unsigned OpNo,
199*9880d681SAndroid Build Coastguard Worker                                       SmallVectorImpl<MCFixup> &Fixups,
200*9880d681SAndroid Build Coastguard Worker                                       const MCSubtargetInfo &STI) const;
201*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMGPImm7Lsl2(const MCInst &MI, unsigned OpNo,
202*9880d681SAndroid Build Coastguard Worker                                       SmallVectorImpl<MCFixup> &Fixups,
203*9880d681SAndroid Build Coastguard Worker                                       const MCSubtargetInfo &STI) const;
204*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm9(const MCInst &MI, unsigned OpNo,
205*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
206*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
207*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm11(const MCInst &MI, unsigned OpNo,
208*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
209*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
210*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm12(const MCInst &MI, unsigned OpNo,
211*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
212*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
213*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm16(const MCInst &MI, unsigned OpNo,
214*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
215*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
216*9880d681SAndroid Build Coastguard Worker   unsigned getMemEncodingMMImm4sp(const MCInst &MI, unsigned OpNo,
217*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
218*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
219*9880d681SAndroid Build Coastguard Worker   unsigned getSizeInsEncoding(const MCInst &MI, unsigned OpNo,
220*9880d681SAndroid Build Coastguard Worker                               SmallVectorImpl<MCFixup> &Fixups,
221*9880d681SAndroid Build Coastguard Worker                               const MCSubtargetInfo &STI) const;
222*9880d681SAndroid Build Coastguard Worker 
223*9880d681SAndroid Build Coastguard Worker   /// Subtract Offset then encode as a N-bit unsigned integer.
224*9880d681SAndroid Build Coastguard Worker   template <unsigned Bits, int Offset>
225*9880d681SAndroid Build Coastguard Worker   unsigned getUImmWithOffsetEncoding(const MCInst &MI, unsigned OpNo,
226*9880d681SAndroid Build Coastguard Worker                                      SmallVectorImpl<MCFixup> &Fixups,
227*9880d681SAndroid Build Coastguard Worker                                      const MCSubtargetInfo &STI) const;
228*9880d681SAndroid Build Coastguard Worker 
229*9880d681SAndroid Build Coastguard Worker   unsigned getSimm19Lsl2Encoding(const MCInst &MI, unsigned OpNo,
230*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
231*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
232*9880d681SAndroid Build Coastguard Worker 
233*9880d681SAndroid Build Coastguard Worker   unsigned getSimm18Lsl3Encoding(const MCInst &MI, unsigned OpNo,
234*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
235*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
236*9880d681SAndroid Build Coastguard Worker 
237*9880d681SAndroid Build Coastguard Worker   unsigned getUImm3Mod8Encoding(const MCInst &MI, unsigned OpNo,
238*9880d681SAndroid Build Coastguard Worker                                 SmallVectorImpl<MCFixup> &Fixups,
239*9880d681SAndroid Build Coastguard Worker                                 const MCSubtargetInfo &STI) const;
240*9880d681SAndroid Build Coastguard Worker   unsigned getUImm4AndValue(const MCInst &MI, unsigned OpNo,
241*9880d681SAndroid Build Coastguard Worker                             SmallVectorImpl<MCFixup> &Fixups,
242*9880d681SAndroid Build Coastguard Worker                             const MCSubtargetInfo &STI) const;
243*9880d681SAndroid Build Coastguard Worker 
244*9880d681SAndroid Build Coastguard Worker   unsigned getRegisterPairOpValue(const MCInst &MI, unsigned OpNo,
245*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
246*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
247*9880d681SAndroid Build Coastguard Worker 
248*9880d681SAndroid Build Coastguard Worker   unsigned getMovePRegPairOpValue(const MCInst &MI, unsigned OpNo,
249*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
250*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
251*9880d681SAndroid Build Coastguard Worker 
252*9880d681SAndroid Build Coastguard Worker   unsigned getSimm23Lsl2Encoding(const MCInst &MI, unsigned OpNo,
253*9880d681SAndroid Build Coastguard Worker                                  SmallVectorImpl<MCFixup> &Fixups,
254*9880d681SAndroid Build Coastguard Worker                                  const MCSubtargetInfo &STI) const;
255*9880d681SAndroid Build Coastguard Worker 
256*9880d681SAndroid Build Coastguard Worker   unsigned getExprOpValue(const MCExpr *Expr, SmallVectorImpl<MCFixup> &Fixups,
257*9880d681SAndroid Build Coastguard Worker                           const MCSubtargetInfo &STI) const;
258*9880d681SAndroid Build Coastguard Worker 
259*9880d681SAndroid Build Coastguard Worker   unsigned getRegisterListOpValue(const MCInst &MI, unsigned OpNo,
260*9880d681SAndroid Build Coastguard Worker                                   SmallVectorImpl<MCFixup> &Fixups,
261*9880d681SAndroid Build Coastguard Worker                                   const MCSubtargetInfo &STI) const;
262*9880d681SAndroid Build Coastguard Worker 
263*9880d681SAndroid Build Coastguard Worker   unsigned getRegisterListOpValue16(const MCInst &MI, unsigned OpNo,
264*9880d681SAndroid Build Coastguard Worker                                     SmallVectorImpl<MCFixup> &Fixups,
265*9880d681SAndroid Build Coastguard Worker                                     const MCSubtargetInfo &STI) const;
266*9880d681SAndroid Build Coastguard Worker   private:
267*9880d681SAndroid Build Coastguard Worker   void LowerCompactBranch(MCInst& Inst) const;
268*9880d681SAndroid Build Coastguard Worker }; // class MipsMCCodeEmitter
269*9880d681SAndroid Build Coastguard Worker } // namespace llvm.
270*9880d681SAndroid Build Coastguard Worker 
271*9880d681SAndroid Build Coastguard Worker #endif
272