Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/Mips/MipsGenFastISel.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* "Fast" Instruction Selector for the Mips target                            *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
10
// FastEmit Immediate Predicate functions.
11
0
static bool Predicate_immZExt5(int64_t Imm) {
12
0
return Imm == (Imm & 0x1f);
13
0
}
14
0
static bool Predicate_immZExt6(int64_t Imm) {
15
0
return Imm == (Imm & 0x3f);
16
0
}
17
0
static bool Predicate_immSExt6(int64_t Imm) {
18
0
return isInt<6>(Imm);
19
0
}
20
0
static bool Predicate_immZExt4Ptr(int64_t Imm) {
21
0
return isUInt<4>(Imm);
22
0
}
23
0
static bool Predicate_immZExt3Ptr(int64_t Imm) {
24
0
return isUInt<3>(Imm);
25
0
}
26
0
static bool Predicate_immZExt2Ptr(int64_t Imm) {
27
0
return isUInt<2>(Imm);
28
0
}
29
0
static bool Predicate_immZExt1Ptr(int64_t Imm) {
30
0
return isUInt<1>(Imm);
31
0
}
32
0
static bool Predicate_immZExt4(int64_t Imm) {
33
0
return isUInt<4>(Imm);
34
0
}
35
0
static bool Predicate_immSExtAddiur2(int64_t Imm) {
36
0
return Imm == 1 || Imm == -1 ||
37
0
                                           ((Imm % 4 == 0) &&
38
0
                                            Imm < 28 && Imm > 0);
39
0
}
40
0
static bool Predicate_immSExtAddius5(int64_t Imm) {
41
0
return Imm >= -8 && Imm <= 7;
42
0
}
43
0
static bool Predicate_immZExtAndi16(int64_t Imm) {
44
0
return (Imm == 128 || (Imm >= 1 && Imm <= 4) || Imm == 7 || Imm == 8 ||
45
0
            Imm == 15 || Imm == 16 || Imm == 31 || Imm == 32 || Imm == 63 ||
46
0
            Imm == 64 || Imm == 255 || Imm == 32768 || Imm == 65535 );
47
0
}
48
0
static bool Predicate_immZExt2Shift(int64_t Imm) {
49
0
return Imm >= 1 && Imm <= 8;
50
0
}
51
52
53
// FastEmit functions for ISD::BITCAST.
54
55
0
unsigned fastEmit_ISD_BITCAST_MVT_i32_r(MVT RetVT, unsigned Op0) {
56
0
  if (RetVT.SimpleTy != MVT::f32)
57
0
    return 0;
58
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
59
0
    return fastEmitInst_r(Mips::MTC1_MMR6, &Mips::FGR32RegClass, Op0);
60
0
  }
61
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
62
0
    return fastEmitInst_r(Mips::MTC1_MM, &Mips::FGR32RegClass, Op0);
63
0
  }
64
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
65
0
    return fastEmitInst_r(Mips::MTC1, &Mips::FGR32RegClass, Op0);
66
0
  }
67
0
  return 0;
68
0
}
69
70
0
unsigned fastEmit_ISD_BITCAST_MVT_i64_r(MVT RetVT, unsigned Op0) {
71
0
  if (RetVT.SimpleTy != MVT::f64)
72
0
    return 0;
73
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
74
0
    return fastEmitInst_r(Mips::DMTC1, &Mips::FGR64RegClass, Op0);
75
0
  }
76
0
  return 0;
77
0
}
78
79
0
unsigned fastEmit_ISD_BITCAST_MVT_f32_r(MVT RetVT, unsigned Op0) {
80
0
  if (RetVT.SimpleTy != MVT::i32)
81
0
    return 0;
82
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
83
0
    return fastEmitInst_r(Mips::MFC1_MMR6, &Mips::GPR32RegClass, Op0);
84
0
  }
85
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
86
0
    return fastEmitInst_r(Mips::MFC1_MM, &Mips::GPR32RegClass, Op0);
87
0
  }
88
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
89
0
    return fastEmitInst_r(Mips::MFC1, &Mips::GPR32RegClass, Op0);
90
0
  }
91
0
  return 0;
92
0
}
93
94
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_r(MVT RetVT, unsigned Op0) {
95
0
  if (RetVT.SimpleTy != MVT::i64)
96
0
    return 0;
97
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
98
0
    return fastEmitInst_r(Mips::DMFC1, &Mips::GPR64RegClass, Op0);
99
0
  }
100
0
  return 0;
101
0
}
102
103
0
unsigned fastEmit_ISD_BITCAST_r(MVT VT, MVT RetVT, unsigned Op0) {
104
0
  switch (VT.SimpleTy) {
105
0
  case MVT::i32: return fastEmit_ISD_BITCAST_MVT_i32_r(RetVT, Op0);
106
0
  case MVT::i64: return fastEmit_ISD_BITCAST_MVT_i64_r(RetVT, Op0);
107
0
  case MVT::f32: return fastEmit_ISD_BITCAST_MVT_f32_r(RetVT, Op0);
108
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_f64_r(RetVT, Op0);
109
0
  default: return 0;
110
0
  }
111
0
}
112
113
// FastEmit functions for ISD::BRIND.
114
115
0
unsigned fastEmit_ISD_BRIND_MVT_i32_r(MVT RetVT, unsigned Op0) {
116
0
  if (RetVT.SimpleTy != MVT::isVoid)
117
0
    return 0;
118
0
  if ((Subtarget->inMips16Mode())) {
119
0
    return fastEmitInst_r(Mips::JrcRx16, &Mips::CPU16RegsRegClass, Op0);
120
0
  }
121
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
122
0
    return fastEmitInst_r(Mips::PseudoIndirectBranch_MMR6, &Mips::GPR32RegClass, Op0);
123
0
  }
124
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
125
0
    return fastEmitInst_r(Mips::PseudoIndirectBranch_MM, &Mips::GPR32RegClass, Op0);
126
0
  }
127
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
128
0
    return fastEmitInst_r(Mips::PseudoIndrectHazardBranchR6, &Mips::GPR32RegClass, Op0);
129
0
  }
130
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode())) {
131
0
    return fastEmitInst_r(Mips::PseudoIndirectBranchR6, &Mips::GPR32RegClass, Op0);
132
0
  }
133
0
  if ((Subtarget->hasMips32r2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6()) && (Subtarget->useIndirectJumpsHazard())) {
134
0
    return fastEmitInst_r(Mips::PseudoIndirectHazardBranch, &Mips::GPR32RegClass, Op0);
135
0
  }
136
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
137
0
    return fastEmitInst_r(Mips::PseudoIndirectBranch, &Mips::GPR32RegClass, Op0);
138
0
  }
139
0
  return 0;
140
0
}
141
142
0
unsigned fastEmit_ISD_BRIND_MVT_i64_r(MVT RetVT, unsigned Op0) {
143
0
  if (RetVT.SimpleTy != MVT::isVoid)
144
0
    return 0;
145
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
146
0
    return fastEmitInst_r(Mips::PseudoIndrectHazardBranch64R6, &Mips::GPR64RegClass, Op0);
147
0
  }
148
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode())) {
149
0
    return fastEmitInst_r(Mips::PseudoIndirectBranch64R6, &Mips::GPR64RegClass, Op0);
150
0
  }
151
0
  if ((Subtarget->hasMips32r2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isABI_N64()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6()) && (Subtarget->useIndirectJumpsHazard())) {
152
0
    return fastEmitInst_r(Mips::PseudoIndirectHazardBranch64, &Mips::GPR64RegClass, Op0);
153
0
  }
154
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
155
0
    return fastEmitInst_r(Mips::PseudoIndirectBranch64, &Mips::GPR64RegClass, Op0);
156
0
  }
157
0
  return 0;
158
0
}
159
160
0
unsigned fastEmit_ISD_BRIND_r(MVT VT, MVT RetVT, unsigned Op0) {
161
0
  switch (VT.SimpleTy) {
162
0
  case MVT::i32: return fastEmit_ISD_BRIND_MVT_i32_r(RetVT, Op0);
163
0
  case MVT::i64: return fastEmit_ISD_BRIND_MVT_i64_r(RetVT, Op0);
164
0
  default: return 0;
165
0
  }
166
0
}
167
168
// FastEmit functions for ISD::CTLZ.
169
170
0
unsigned fastEmit_ISD_CTLZ_MVT_i32_r(MVT RetVT, unsigned Op0) {
171
0
  if (RetVT.SimpleTy != MVT::i32)
172
0
    return 0;
173
0
  if ((Subtarget->inMicroMipsMode())) {
174
0
    return fastEmitInst_r(Mips::CLZ_MM, &Mips::GPR32RegClass, Op0);
175
0
  }
176
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding())) {
177
0
    return fastEmitInst_r(Mips::CLZ_R6, &Mips::GPR32RegClass, Op0);
178
0
  }
179
0
  if ((Subtarget->hasMips32()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
180
0
    return fastEmitInst_r(Mips::CLZ, &Mips::GPR32RegClass, Op0);
181
0
  }
182
0
  return 0;
183
0
}
184
185
0
unsigned fastEmit_ISD_CTLZ_MVT_i64_r(MVT RetVT, unsigned Op0) {
186
0
  if (RetVT.SimpleTy != MVT::i64)
187
0
    return 0;
188
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
189
0
    return fastEmitInst_r(Mips::DCLZ_R6, &Mips::GPR64RegClass, Op0);
190
0
  }
191
0
  if ((Subtarget->hasMips64()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isGP64bit()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips64r6())) {
192
0
    return fastEmitInst_r(Mips::DCLZ, &Mips::GPR64RegClass, Op0);
193
0
  }
194
0
  return 0;
195
0
}
196
197
0
unsigned fastEmit_ISD_CTLZ_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
198
0
  if (RetVT.SimpleTy != MVT::v16i8)
199
0
    return 0;
200
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
201
0
    return fastEmitInst_r(Mips::NLZC_B, &Mips::MSA128BRegClass, Op0);
202
0
  }
203
0
  return 0;
204
0
}
205
206
0
unsigned fastEmit_ISD_CTLZ_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
207
0
  if (RetVT.SimpleTy != MVT::v8i16)
208
0
    return 0;
209
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
210
0
    return fastEmitInst_r(Mips::NLZC_H, &Mips::MSA128HRegClass, Op0);
211
0
  }
212
0
  return 0;
213
0
}
214
215
0
unsigned fastEmit_ISD_CTLZ_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
216
0
  if (RetVT.SimpleTy != MVT::v4i32)
217
0
    return 0;
218
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
219
0
    return fastEmitInst_r(Mips::NLZC_W, &Mips::MSA128WRegClass, Op0);
220
0
  }
221
0
  return 0;
222
0
}
223
224
0
unsigned fastEmit_ISD_CTLZ_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
225
0
  if (RetVT.SimpleTy != MVT::v2i64)
226
0
    return 0;
227
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
228
0
    return fastEmitInst_r(Mips::NLZC_D, &Mips::MSA128DRegClass, Op0);
229
0
  }
230
0
  return 0;
231
0
}
232
233
0
unsigned fastEmit_ISD_CTLZ_r(MVT VT, MVT RetVT, unsigned Op0) {
234
0
  switch (VT.SimpleTy) {
235
0
  case MVT::i32: return fastEmit_ISD_CTLZ_MVT_i32_r(RetVT, Op0);
236
0
  case MVT::i64: return fastEmit_ISD_CTLZ_MVT_i64_r(RetVT, Op0);
237
0
  case MVT::v16i8: return fastEmit_ISD_CTLZ_MVT_v16i8_r(RetVT, Op0);
238
0
  case MVT::v8i16: return fastEmit_ISD_CTLZ_MVT_v8i16_r(RetVT, Op0);
239
0
  case MVT::v4i32: return fastEmit_ISD_CTLZ_MVT_v4i32_r(RetVT, Op0);
240
0
  case MVT::v2i64: return fastEmit_ISD_CTLZ_MVT_v2i64_r(RetVT, Op0);
241
0
  default: return 0;
242
0
  }
243
0
}
244
245
// FastEmit functions for ISD::CTPOP.
246
247
0
unsigned fastEmit_ISD_CTPOP_MVT_i32_r(MVT RetVT, unsigned Op0) {
248
0
  if (RetVT.SimpleTy != MVT::i32)
249
0
    return 0;
250
0
  if ((Subtarget->hasCnMips())) {
251
0
    return fastEmitInst_r(Mips::POP, &Mips::GPR32RegClass, Op0);
252
0
  }
253
0
  return 0;
254
0
}
255
256
0
unsigned fastEmit_ISD_CTPOP_MVT_i64_r(MVT RetVT, unsigned Op0) {
257
0
  if (RetVT.SimpleTy != MVT::i64)
258
0
    return 0;
259
0
  if ((Subtarget->hasCnMips())) {
260
0
    return fastEmitInst_r(Mips::DPOP, &Mips::GPR64RegClass, Op0);
261
0
  }
262
0
  return 0;
263
0
}
264
265
0
unsigned fastEmit_ISD_CTPOP_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
266
0
  if (RetVT.SimpleTy != MVT::v16i8)
267
0
    return 0;
268
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
269
0
    return fastEmitInst_r(Mips::PCNT_B, &Mips::MSA128BRegClass, Op0);
270
0
  }
271
0
  return 0;
272
0
}
273
274
0
unsigned fastEmit_ISD_CTPOP_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
275
0
  if (RetVT.SimpleTy != MVT::v8i16)
276
0
    return 0;
277
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
278
0
    return fastEmitInst_r(Mips::PCNT_H, &Mips::MSA128HRegClass, Op0);
279
0
  }
280
0
  return 0;
281
0
}
282
283
0
unsigned fastEmit_ISD_CTPOP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
284
0
  if (RetVT.SimpleTy != MVT::v4i32)
285
0
    return 0;
286
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
287
0
    return fastEmitInst_r(Mips::PCNT_W, &Mips::MSA128WRegClass, Op0);
288
0
  }
289
0
  return 0;
290
0
}
291
292
0
unsigned fastEmit_ISD_CTPOP_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
293
0
  if (RetVT.SimpleTy != MVT::v2i64)
294
0
    return 0;
295
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
296
0
    return fastEmitInst_r(Mips::PCNT_D, &Mips::MSA128DRegClass, Op0);
297
0
  }
298
0
  return 0;
299
0
}
300
301
0
unsigned fastEmit_ISD_CTPOP_r(MVT VT, MVT RetVT, unsigned Op0) {
302
0
  switch (VT.SimpleTy) {
303
0
  case MVT::i32: return fastEmit_ISD_CTPOP_MVT_i32_r(RetVT, Op0);
304
0
  case MVT::i64: return fastEmit_ISD_CTPOP_MVT_i64_r(RetVT, Op0);
305
0
  case MVT::v16i8: return fastEmit_ISD_CTPOP_MVT_v16i8_r(RetVT, Op0);
306
0
  case MVT::v8i16: return fastEmit_ISD_CTPOP_MVT_v8i16_r(RetVT, Op0);
307
0
  case MVT::v4i32: return fastEmit_ISD_CTPOP_MVT_v4i32_r(RetVT, Op0);
308
0
  case MVT::v2i64: return fastEmit_ISD_CTPOP_MVT_v2i64_r(RetVT, Op0);
309
0
  default: return 0;
310
0
  }
311
0
}
312
313
// FastEmit functions for ISD::FABS.
314
315
0
unsigned fastEmit_ISD_FABS_MVT_f32_r(MVT RetVT, unsigned Op0) {
316
0
  if (RetVT.SimpleTy != MVT::f32)
317
0
    return 0;
318
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (Subtarget->inAbs2008Mode() ||TM.Options.NoNaNsFPMath)) {
319
0
    return fastEmitInst_r(Mips::FABS_S_MM, &Mips::FGR32RegClass, Op0);
320
0
  }
321
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode()) && (Subtarget->inAbs2008Mode() ||TM.Options.NoNaNsFPMath)) {
322
0
    return fastEmitInst_r(Mips::FABS_S, &Mips::FGR32RegClass, Op0);
323
0
  }
324
0
  return 0;
325
0
}
326
327
0
unsigned fastEmit_ISD_FABS_MVT_f64_r(MVT RetVT, unsigned Op0) {
328
0
  if (RetVT.SimpleTy != MVT::f64)
329
0
    return 0;
330
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
331
0
    return fastEmitInst_r(Mips::FABS_D64_MM, &Mips::FGR64RegClass, Op0);
332
0
  }
333
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
334
0
    return fastEmitInst_r(Mips::FABS_D32_MM, &Mips::AFGR64RegClass, Op0);
335
0
  }
336
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode()) && (Subtarget->inAbs2008Mode() ||TM.Options.NoNaNsFPMath)) {
337
0
    return fastEmitInst_r(Mips::FABS_D64, &Mips::FGR64RegClass, Op0);
338
0
  }
339
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode()) && (Subtarget->inAbs2008Mode() ||TM.Options.NoNaNsFPMath)) {
340
0
    return fastEmitInst_r(Mips::FABS_D32, &Mips::AFGR64RegClass, Op0);
341
0
  }
342
0
  return 0;
343
0
}
344
345
0
unsigned fastEmit_ISD_FABS_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
346
0
  if (RetVT.SimpleTy != MVT::v4f32)
347
0
    return 0;
348
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
349
0
    return fastEmitInst_r(Mips::FABS_W, &Mips::MSA128WRegClass, Op0);
350
0
  }
351
0
  return 0;
352
0
}
353
354
0
unsigned fastEmit_ISD_FABS_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
355
0
  if (RetVT.SimpleTy != MVT::v2f64)
356
0
    return 0;
357
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
358
0
    return fastEmitInst_r(Mips::FABS_D, &Mips::MSA128DRegClass, Op0);
359
0
  }
360
0
  return 0;
361
0
}
362
363
0
unsigned fastEmit_ISD_FABS_r(MVT VT, MVT RetVT, unsigned Op0) {
364
0
  switch (VT.SimpleTy) {
365
0
  case MVT::f32: return fastEmit_ISD_FABS_MVT_f32_r(RetVT, Op0);
366
0
  case MVT::f64: return fastEmit_ISD_FABS_MVT_f64_r(RetVT, Op0);
367
0
  case MVT::v4f32: return fastEmit_ISD_FABS_MVT_v4f32_r(RetVT, Op0);
368
0
  case MVT::v2f64: return fastEmit_ISD_FABS_MVT_v2f64_r(RetVT, Op0);
369
0
  default: return 0;
370
0
  }
371
0
}
372
373
// FastEmit functions for ISD::FEXP2.
374
375
0
unsigned fastEmit_ISD_FEXP2_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
376
0
  if (RetVT.SimpleTy != MVT::v4f32)
377
0
    return 0;
378
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
379
0
    return fastEmitInst_r(Mips::FEXP2_W_1_PSEUDO, &Mips::MSA128WRegClass, Op0);
380
0
  }
381
0
  return 0;
382
0
}
383
384
0
unsigned fastEmit_ISD_FEXP2_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
385
0
  if (RetVT.SimpleTy != MVT::v2f64)
386
0
    return 0;
387
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
388
0
    return fastEmitInst_r(Mips::FEXP2_D_1_PSEUDO, &Mips::MSA128DRegClass, Op0);
389
0
  }
390
0
  return 0;
391
0
}
392
393
0
unsigned fastEmit_ISD_FEXP2_r(MVT VT, MVT RetVT, unsigned Op0) {
394
0
  switch (VT.SimpleTy) {
395
0
  case MVT::v4f32: return fastEmit_ISD_FEXP2_MVT_v4f32_r(RetVT, Op0);
396
0
  case MVT::v2f64: return fastEmit_ISD_FEXP2_MVT_v2f64_r(RetVT, Op0);
397
0
  default: return 0;
398
0
  }
399
0
}
400
401
// FastEmit functions for ISD::FLOG2.
402
403
0
unsigned fastEmit_ISD_FLOG2_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
404
0
  if (RetVT.SimpleTy != MVT::v4f32)
405
0
    return 0;
406
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
407
0
    return fastEmitInst_r(Mips::FLOG2_W, &Mips::MSA128WRegClass, Op0);
408
0
  }
409
0
  return 0;
410
0
}
411
412
0
unsigned fastEmit_ISD_FLOG2_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
413
0
  if (RetVT.SimpleTy != MVT::v2f64)
414
0
    return 0;
415
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
416
0
    return fastEmitInst_r(Mips::FLOG2_D, &Mips::MSA128DRegClass, Op0);
417
0
  }
418
0
  return 0;
419
0
}
420
421
0
unsigned fastEmit_ISD_FLOG2_r(MVT VT, MVT RetVT, unsigned Op0) {
422
0
  switch (VT.SimpleTy) {
423
0
  case MVT::v4f32: return fastEmit_ISD_FLOG2_MVT_v4f32_r(RetVT, Op0);
424
0
  case MVT::v2f64: return fastEmit_ISD_FLOG2_MVT_v2f64_r(RetVT, Op0);
425
0
  default: return 0;
426
0
  }
427
0
}
428
429
// FastEmit functions for ISD::FNEG.
430
431
0
unsigned fastEmit_ISD_FNEG_MVT_f32_r(MVT RetVT, unsigned Op0) {
432
0
  if (RetVT.SimpleTy != MVT::f32)
433
0
    return 0;
434
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
435
0
    return fastEmitInst_r(Mips::FNEG_S_MMR6, &Mips::FGR32RegClass, Op0);
436
0
  }
437
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
438
0
    return fastEmitInst_r(Mips::FNEG_S_MM, &Mips::FGR32RegClass, Op0);
439
0
  }
440
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat())) {
441
0
    return fastEmitInst_r(Mips::FNEG_S, &Mips::FGR32RegClass, Op0);
442
0
  }
443
0
  return 0;
444
0
}
445
446
0
unsigned fastEmit_ISD_FNEG_MVT_f64_r(MVT RetVT, unsigned Op0) {
447
0
  if (RetVT.SimpleTy != MVT::f64)
448
0
    return 0;
449
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
450
0
    return fastEmitInst_r(Mips::FNEG_D64_MM, &Mips::FGR64RegClass, Op0);
451
0
  }
452
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
453
0
    return fastEmitInst_r(Mips::FNEG_D32_MM, &Mips::AFGR64RegClass, Op0);
454
0
  }
455
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
456
0
    return fastEmitInst_r(Mips::FNEG_D64, &Mips::FGR64RegClass, Op0);
457
0
  }
458
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
459
0
    return fastEmitInst_r(Mips::FNEG_D32, &Mips::AFGR64RegClass, Op0);
460
0
  }
461
0
  return 0;
462
0
}
463
464
0
unsigned fastEmit_ISD_FNEG_r(MVT VT, MVT RetVT, unsigned Op0) {
465
0
  switch (VT.SimpleTy) {
466
0
  case MVT::f32: return fastEmit_ISD_FNEG_MVT_f32_r(RetVT, Op0);
467
0
  case MVT::f64: return fastEmit_ISD_FNEG_MVT_f64_r(RetVT, Op0);
468
0
  default: return 0;
469
0
  }
470
0
}
471
472
// FastEmit functions for ISD::FP_EXTEND.
473
474
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_f16_MVT_f32_r(unsigned Op0) {
475
0
  if ((Subtarget->hasMSA())) {
476
0
    return fastEmitInst_r(Mips::MSA_FP_EXTEND_W_PSEUDO, &Mips::FGR32RegClass, Op0);
477
0
  }
478
0
  return 0;
479
0
}
480
481
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_f16_MVT_f64_r(unsigned Op0) {
482
0
  if ((Subtarget->hasMSA())) {
483
0
    return fastEmitInst_r(Mips::MSA_FP_EXTEND_D_PSEUDO, &Mips::FGR64RegClass, Op0);
484
0
  }
485
0
  return 0;
486
0
}
487
488
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_f16_r(MVT RetVT, unsigned Op0) {
489
0
switch (RetVT.SimpleTy) {
490
0
  case MVT::f32: return fastEmit_ISD_FP_EXTEND_MVT_f16_MVT_f32_r(Op0);
491
0
  case MVT::f64: return fastEmit_ISD_FP_EXTEND_MVT_f16_MVT_f64_r(Op0);
492
0
  default: return 0;
493
0
}
494
0
}
495
496
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_f32_r(MVT RetVT, unsigned Op0) {
497
0
  if (RetVT.SimpleTy != MVT::f64)
498
0
    return 0;
499
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->isFP64bit())) {
500
0
    return fastEmitInst_r(Mips::CVT_D32_S_MM, &Mips::AFGR64RegClass, Op0);
501
0
  }
502
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit())) {
503
0
    return fastEmitInst_r(Mips::CVT_D64_S_MM, &Mips::FGR64RegClass, Op0);
504
0
  }
505
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
506
0
    return fastEmitInst_r(Mips::CVT_D64_S, &Mips::FGR64RegClass, Op0);
507
0
  }
508
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
509
0
    return fastEmitInst_r(Mips::CVT_D32_S, &Mips::AFGR64RegClass, Op0);
510
0
  }
511
0
  return 0;
512
0
}
513
514
0
unsigned fastEmit_ISD_FP_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
515
0
  switch (VT.SimpleTy) {
516
0
  case MVT::f16: return fastEmit_ISD_FP_EXTEND_MVT_f16_r(RetVT, Op0);
517
0
  case MVT::f32: return fastEmit_ISD_FP_EXTEND_MVT_f32_r(RetVT, Op0);
518
0
  default: return 0;
519
0
  }
520
0
}
521
522
// FastEmit functions for ISD::FP_ROUND.
523
524
0
unsigned fastEmit_ISD_FP_ROUND_MVT_f32_r(MVT RetVT, unsigned Op0) {
525
0
  if (RetVT.SimpleTy != MVT::f16)
526
0
    return 0;
527
0
  if ((Subtarget->hasMSA())) {
528
0
    return fastEmitInst_r(Mips::MSA_FP_ROUND_W_PSEUDO, &Mips::MSA128F16RegClass, Op0);
529
0
  }
530
0
  return 0;
531
0
}
532
533
0
unsigned fastEmit_ISD_FP_ROUND_MVT_f64_MVT_f16_r(unsigned Op0) {
534
0
  if ((Subtarget->hasMSA())) {
535
0
    return fastEmitInst_r(Mips::MSA_FP_ROUND_D_PSEUDO, &Mips::MSA128F16RegClass, Op0);
536
0
  }
537
0
  return 0;
538
0
}
539
540
0
unsigned fastEmit_ISD_FP_ROUND_MVT_f64_MVT_f32_r(unsigned Op0) {
541
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->isFP64bit())) {
542
0
    return fastEmitInst_r(Mips::CVT_S_D32_MM, &Mips::FGR32RegClass, Op0);
543
0
  }
544
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit())) {
545
0
    return fastEmitInst_r(Mips::CVT_S_D64_MM, &Mips::FGR32RegClass, Op0);
546
0
  }
547
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
548
0
    return fastEmitInst_r(Mips::CVT_S_D64, &Mips::FGR32RegClass, Op0);
549
0
  }
550
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
551
0
    return fastEmitInst_r(Mips::CVT_S_D32, &Mips::FGR32RegClass, Op0);
552
0
  }
553
0
  return 0;
554
0
}
555
556
0
unsigned fastEmit_ISD_FP_ROUND_MVT_f64_r(MVT RetVT, unsigned Op0) {
557
0
switch (RetVT.SimpleTy) {
558
0
  case MVT::f16: return fastEmit_ISD_FP_ROUND_MVT_f64_MVT_f16_r(Op0);
559
0
  case MVT::f32: return fastEmit_ISD_FP_ROUND_MVT_f64_MVT_f32_r(Op0);
560
0
  default: return 0;
561
0
}
562
0
}
563
564
0
unsigned fastEmit_ISD_FP_ROUND_r(MVT VT, MVT RetVT, unsigned Op0) {
565
0
  switch (VT.SimpleTy) {
566
0
  case MVT::f32: return fastEmit_ISD_FP_ROUND_MVT_f32_r(RetVT, Op0);
567
0
  case MVT::f64: return fastEmit_ISD_FP_ROUND_MVT_f64_r(RetVT, Op0);
568
0
  default: return 0;
569
0
  }
570
0
}
571
572
// FastEmit functions for ISD::FP_TO_SINT.
573
574
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
575
0
  if (RetVT.SimpleTy != MVT::v4i32)
576
0
    return 0;
577
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
578
0
    return fastEmitInst_r(Mips::FTRUNC_S_W, &Mips::MSA128WRegClass, Op0);
579
0
  }
580
0
  return 0;
581
0
}
582
583
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
584
0
  if (RetVT.SimpleTy != MVT::v2i64)
585
0
    return 0;
586
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
587
0
    return fastEmitInst_r(Mips::FTRUNC_S_D, &Mips::MSA128DRegClass, Op0);
588
0
  }
589
0
  return 0;
590
0
}
591
592
0
unsigned fastEmit_ISD_FP_TO_SINT_r(MVT VT, MVT RetVT, unsigned Op0) {
593
0
  switch (VT.SimpleTy) {
594
0
  case MVT::v4f32: return fastEmit_ISD_FP_TO_SINT_MVT_v4f32_r(RetVT, Op0);
595
0
  case MVT::v2f64: return fastEmit_ISD_FP_TO_SINT_MVT_v2f64_r(RetVT, Op0);
596
0
  default: return 0;
597
0
  }
598
0
}
599
600
// FastEmit functions for ISD::FP_TO_UINT.
601
602
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
603
0
  if (RetVT.SimpleTy != MVT::v4i32)
604
0
    return 0;
605
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
606
0
    return fastEmitInst_r(Mips::FTRUNC_U_W, &Mips::MSA128WRegClass, Op0);
607
0
  }
608
0
  return 0;
609
0
}
610
611
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
612
0
  if (RetVT.SimpleTy != MVT::v2i64)
613
0
    return 0;
614
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
615
0
    return fastEmitInst_r(Mips::FTRUNC_U_D, &Mips::MSA128DRegClass, Op0);
616
0
  }
617
0
  return 0;
618
0
}
619
620
0
unsigned fastEmit_ISD_FP_TO_UINT_r(MVT VT, MVT RetVT, unsigned Op0) {
621
0
  switch (VT.SimpleTy) {
622
0
  case MVT::v4f32: return fastEmit_ISD_FP_TO_UINT_MVT_v4f32_r(RetVT, Op0);
623
0
  case MVT::v2f64: return fastEmit_ISD_FP_TO_UINT_MVT_v2f64_r(RetVT, Op0);
624
0
  default: return 0;
625
0
  }
626
0
}
627
628
// FastEmit functions for ISD::FRINT.
629
630
0
unsigned fastEmit_ISD_FRINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
631
0
  if (RetVT.SimpleTy != MVT::v4f32)
632
0
    return 0;
633
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
634
0
    return fastEmitInst_r(Mips::FRINT_W, &Mips::MSA128WRegClass, Op0);
635
0
  }
636
0
  return 0;
637
0
}
638
639
0
unsigned fastEmit_ISD_FRINT_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
640
0
  if (RetVT.SimpleTy != MVT::v2f64)
641
0
    return 0;
642
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
643
0
    return fastEmitInst_r(Mips::FRINT_D, &Mips::MSA128DRegClass, Op0);
644
0
  }
645
0
  return 0;
646
0
}
647
648
0
unsigned fastEmit_ISD_FRINT_r(MVT VT, MVT RetVT, unsigned Op0) {
649
0
  switch (VT.SimpleTy) {
650
0
  case MVT::v4f32: return fastEmit_ISD_FRINT_MVT_v4f32_r(RetVT, Op0);
651
0
  case MVT::v2f64: return fastEmit_ISD_FRINT_MVT_v2f64_r(RetVT, Op0);
652
0
  default: return 0;
653
0
  }
654
0
}
655
656
// FastEmit functions for ISD::FSQRT.
657
658
0
unsigned fastEmit_ISD_FSQRT_MVT_f32_r(MVT RetVT, unsigned Op0) {
659
0
  if (RetVT.SimpleTy != MVT::f32)
660
0
    return 0;
661
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
662
0
    return fastEmitInst_r(Mips::FSQRT_S_MM, &Mips::FGR32RegClass, Op0);
663
0
  }
664
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
665
0
    return fastEmitInst_r(Mips::FSQRT_S, &Mips::FGR32RegClass, Op0);
666
0
  }
667
0
  return 0;
668
0
}
669
670
0
unsigned fastEmit_ISD_FSQRT_MVT_f64_r(MVT RetVT, unsigned Op0) {
671
0
  if (RetVT.SimpleTy != MVT::f64)
672
0
    return 0;
673
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
674
0
    return fastEmitInst_r(Mips::FSQRT_D64_MM, &Mips::FGR64RegClass, Op0);
675
0
  }
676
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
677
0
    return fastEmitInst_r(Mips::FSQRT_D32_MM, &Mips::AFGR64RegClass, Op0);
678
0
  }
679
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
680
0
    return fastEmitInst_r(Mips::FSQRT_D64, &Mips::FGR64RegClass, Op0);
681
0
  }
682
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
683
0
    return fastEmitInst_r(Mips::FSQRT_D32, &Mips::AFGR64RegClass, Op0);
684
0
  }
685
0
  return 0;
686
0
}
687
688
0
unsigned fastEmit_ISD_FSQRT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
689
0
  if (RetVT.SimpleTy != MVT::v4f32)
690
0
    return 0;
691
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
692
0
    return fastEmitInst_r(Mips::FSQRT_W, &Mips::MSA128WRegClass, Op0);
693
0
  }
694
0
  return 0;
695
0
}
696
697
0
unsigned fastEmit_ISD_FSQRT_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
698
0
  if (RetVT.SimpleTy != MVT::v2f64)
699
0
    return 0;
700
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
701
0
    return fastEmitInst_r(Mips::FSQRT_D, &Mips::MSA128DRegClass, Op0);
702
0
  }
703
0
  return 0;
704
0
}
705
706
0
unsigned fastEmit_ISD_FSQRT_r(MVT VT, MVT RetVT, unsigned Op0) {
707
0
  switch (VT.SimpleTy) {
708
0
  case MVT::f32: return fastEmit_ISD_FSQRT_MVT_f32_r(RetVT, Op0);
709
0
  case MVT::f64: return fastEmit_ISD_FSQRT_MVT_f64_r(RetVT, Op0);
710
0
  case MVT::v4f32: return fastEmit_ISD_FSQRT_MVT_v4f32_r(RetVT, Op0);
711
0
  case MVT::v2f64: return fastEmit_ISD_FSQRT_MVT_v2f64_r(RetVT, Op0);
712
0
  default: return 0;
713
0
  }
714
0
}
715
716
// FastEmit functions for ISD::SIGN_EXTEND.
717
718
0
unsigned fastEmit_ISD_SIGN_EXTEND_MVT_i32_r(MVT RetVT, unsigned Op0) {
719
0
  if (RetVT.SimpleTy != MVT::i64)
720
0
    return 0;
721
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isGP64bit())) {
722
0
    return fastEmitInst_r(Mips::SLL64_32, &Mips::GPR64RegClass, Op0);
723
0
  }
724
0
  return 0;
725
0
}
726
727
0
unsigned fastEmit_ISD_SIGN_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
728
0
  switch (VT.SimpleTy) {
729
0
  case MVT::i32: return fastEmit_ISD_SIGN_EXTEND_MVT_i32_r(RetVT, Op0);
730
0
  default: return 0;
731
0
  }
732
0
}
733
734
// FastEmit functions for ISD::SINT_TO_FP.
735
736
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_i32_MVT_f32_r(unsigned Op0) {
737
0
  return fastEmitInst_r(Mips::PseudoCVT_S_W, &Mips::FGR32RegClass, Op0);
738
0
}
739
740
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_i32_MVT_f64_r(unsigned Op0) {
741
0
  if ((Subtarget->isFP64bit())) {
742
0
    return fastEmitInst_r(Mips::PseudoCVT_D64_W, &Mips::FGR64RegClass, Op0);
743
0
  }
744
0
  if ((!Subtarget->isFP64bit())) {
745
0
    return fastEmitInst_r(Mips::PseudoCVT_D32_W, &Mips::AFGR64RegClass, Op0);
746
0
  }
747
0
  return 0;
748
0
}
749
750
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_i32_r(MVT RetVT, unsigned Op0) {
751
0
switch (RetVT.SimpleTy) {
752
0
  case MVT::f32: return fastEmit_ISD_SINT_TO_FP_MVT_i32_MVT_f32_r(Op0);
753
0
  case MVT::f64: return fastEmit_ISD_SINT_TO_FP_MVT_i32_MVT_f64_r(Op0);
754
0
  default: return 0;
755
0
}
756
0
}
757
758
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_i64_r(MVT RetVT, unsigned Op0) {
759
0
  if (RetVT.SimpleTy != MVT::f64)
760
0
    return 0;
761
0
  if ((Subtarget->isFP64bit())) {
762
0
    return fastEmitInst_r(Mips::PseudoCVT_D64_L, &Mips::FGR64RegClass, Op0);
763
0
  }
764
0
  return 0;
765
0
}
766
767
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
768
0
  if (RetVT.SimpleTy != MVT::v4f32)
769
0
    return 0;
770
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
771
0
    return fastEmitInst_r(Mips::FFINT_S_W, &Mips::MSA128WRegClass, Op0);
772
0
  }
773
0
  return 0;
774
0
}
775
776
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
777
0
  if (RetVT.SimpleTy != MVT::v2f64)
778
0
    return 0;
779
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
780
0
    return fastEmitInst_r(Mips::FFINT_S_D, &Mips::MSA128DRegClass, Op0);
781
0
  }
782
0
  return 0;
783
0
}
784
785
0
unsigned fastEmit_ISD_SINT_TO_FP_r(MVT VT, MVT RetVT, unsigned Op0) {
786
0
  switch (VT.SimpleTy) {
787
0
  case MVT::i32: return fastEmit_ISD_SINT_TO_FP_MVT_i32_r(RetVT, Op0);
788
0
  case MVT::i64: return fastEmit_ISD_SINT_TO_FP_MVT_i64_r(RetVT, Op0);
789
0
  case MVT::v4i32: return fastEmit_ISD_SINT_TO_FP_MVT_v4i32_r(RetVT, Op0);
790
0
  case MVT::v2i64: return fastEmit_ISD_SINT_TO_FP_MVT_v2i64_r(RetVT, Op0);
791
0
  default: return 0;
792
0
  }
793
0
}
794
795
// FastEmit functions for ISD::UINT_TO_FP.
796
797
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
798
0
  if (RetVT.SimpleTy != MVT::v4f32)
799
0
    return 0;
800
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
801
0
    return fastEmitInst_r(Mips::FFINT_U_W, &Mips::MSA128WRegClass, Op0);
802
0
  }
803
0
  return 0;
804
0
}
805
806
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
807
0
  if (RetVT.SimpleTy != MVT::v2f64)
808
0
    return 0;
809
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
810
0
    return fastEmitInst_r(Mips::FFINT_U_D, &Mips::MSA128DRegClass, Op0);
811
0
  }
812
0
  return 0;
813
0
}
814
815
0
unsigned fastEmit_ISD_UINT_TO_FP_r(MVT VT, MVT RetVT, unsigned Op0) {
816
0
  switch (VT.SimpleTy) {
817
0
  case MVT::v4i32: return fastEmit_ISD_UINT_TO_FP_MVT_v4i32_r(RetVT, Op0);
818
0
  case MVT::v2i64: return fastEmit_ISD_UINT_TO_FP_MVT_v2i64_r(RetVT, Op0);
819
0
  default: return 0;
820
0
  }
821
0
}
822
823
// FastEmit functions for MipsISD::JmpLink.
824
825
0
unsigned fastEmit_MipsISD_JmpLink_MVT_i32_r(MVT RetVT, unsigned Op0) {
826
0
  if (RetVT.SimpleTy != MVT::isVoid)
827
0
    return 0;
828
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
829
0
    return fastEmitInst_r(Mips::JALR16_MM, &Mips::GPR32RegClass, Op0);
830
0
  }
831
0
  if ((Subtarget->inMips16Mode())) {
832
0
    return fastEmitInst_r(Mips::JumpLinkReg16, &Mips::CPU16RegsRegClass, Op0);
833
0
  }
834
0
  if ((!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
835
0
    return fastEmitInst_r(Mips::JALRHBPseudo, &Mips::GPR32RegClass, Op0);
836
0
  }
837
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode())) {
838
0
    return fastEmitInst_r(Mips::JALRPseudo, &Mips::GPR32RegClass, Op0);
839
0
  }
840
0
  return 0;
841
0
}
842
843
0
unsigned fastEmit_MipsISD_JmpLink_MVT_i64_r(MVT RetVT, unsigned Op0) {
844
0
  if (RetVT.SimpleTy != MVT::isVoid)
845
0
    return 0;
846
0
  if ((Subtarget->isABI_N64()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
847
0
    return fastEmitInst_r(Mips::JALRHB64Pseudo, &Mips::GPR64RegClass, Op0);
848
0
  }
849
0
  if ((Subtarget->isABI_N64()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMips16Mode())) {
850
0
    return fastEmitInst_r(Mips::JALR64Pseudo, &Mips::GPR64RegClass, Op0);
851
0
  }
852
0
  return 0;
853
0
}
854
855
0
unsigned fastEmit_MipsISD_JmpLink_r(MVT VT, MVT RetVT, unsigned Op0) {
856
0
  switch (VT.SimpleTy) {
857
0
  case MVT::i32: return fastEmit_MipsISD_JmpLink_MVT_i32_r(RetVT, Op0);
858
0
  case MVT::i64: return fastEmit_MipsISD_JmpLink_MVT_i64_r(RetVT, Op0);
859
0
  default: return 0;
860
0
  }
861
0
}
862
863
// FastEmit functions for MipsISD::MFHI.
864
865
0
unsigned fastEmit_MipsISD_MFHI_MVT_Untyped_MVT_i32_r(unsigned Op0) {
866
0
  if ((Subtarget->hasDSP()) && (Subtarget->inMicroMipsMode())) {
867
0
    return fastEmitInst_r(Mips::MFHI_DSP_MM, &Mips::GPR32RegClass, Op0);
868
0
  }
869
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6())) {
870
0
    return fastEmitInst_r(Mips::PseudoMFHI_MM, &Mips::GPR32RegClass, Op0);
871
0
  }
872
0
  if ((Subtarget->hasDSP())) {
873
0
    return fastEmitInst_r(Mips::MFHI_DSP, &Mips::GPR32RegClass, Op0);
874
0
  }
875
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
876
0
    return fastEmitInst_r(Mips::PseudoMFHI, &Mips::GPR32RegClass, Op0);
877
0
  }
878
0
  return 0;
879
0
}
880
881
0
unsigned fastEmit_MipsISD_MFHI_MVT_Untyped_MVT_i64_r(unsigned Op0) {
882
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
883
0
    return fastEmitInst_r(Mips::PseudoMFHI64, &Mips::GPR64RegClass, Op0);
884
0
  }
885
0
  return 0;
886
0
}
887
888
0
unsigned fastEmit_MipsISD_MFHI_MVT_Untyped_r(MVT RetVT, unsigned Op0) {
889
0
switch (RetVT.SimpleTy) {
890
0
  case MVT::i32: return fastEmit_MipsISD_MFHI_MVT_Untyped_MVT_i32_r(Op0);
891
0
  case MVT::i64: return fastEmit_MipsISD_MFHI_MVT_Untyped_MVT_i64_r(Op0);
892
0
  default: return 0;
893
0
}
894
0
}
895
896
0
unsigned fastEmit_MipsISD_MFHI_r(MVT VT, MVT RetVT, unsigned Op0) {
897
0
  switch (VT.SimpleTy) {
898
0
  case MVT::Untyped: return fastEmit_MipsISD_MFHI_MVT_Untyped_r(RetVT, Op0);
899
0
  default: return 0;
900
0
  }
901
0
}
902
903
// FastEmit functions for MipsISD::MFLO.
904
905
0
unsigned fastEmit_MipsISD_MFLO_MVT_Untyped_MVT_i32_r(unsigned Op0) {
906
0
  if ((Subtarget->hasDSP()) && (Subtarget->inMicroMipsMode())) {
907
0
    return fastEmitInst_r(Mips::MFLO_DSP_MM, &Mips::GPR32RegClass, Op0);
908
0
  }
909
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6())) {
910
0
    return fastEmitInst_r(Mips::PseudoMFLO_MM, &Mips::GPR32RegClass, Op0);
911
0
  }
912
0
  if ((Subtarget->hasDSP())) {
913
0
    return fastEmitInst_r(Mips::MFLO_DSP, &Mips::GPR32RegClass, Op0);
914
0
  }
915
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
916
0
    return fastEmitInst_r(Mips::PseudoMFLO, &Mips::GPR32RegClass, Op0);
917
0
  }
918
0
  return 0;
919
0
}
920
921
0
unsigned fastEmit_MipsISD_MFLO_MVT_Untyped_MVT_i64_r(unsigned Op0) {
922
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
923
0
    return fastEmitInst_r(Mips::PseudoMFLO64, &Mips::GPR64RegClass, Op0);
924
0
  }
925
0
  return 0;
926
0
}
927
928
0
unsigned fastEmit_MipsISD_MFLO_MVT_Untyped_r(MVT RetVT, unsigned Op0) {
929
0
switch (RetVT.SimpleTy) {
930
0
  case MVT::i32: return fastEmit_MipsISD_MFLO_MVT_Untyped_MVT_i32_r(Op0);
931
0
  case MVT::i64: return fastEmit_MipsISD_MFLO_MVT_Untyped_MVT_i64_r(Op0);
932
0
  default: return 0;
933
0
}
934
0
}
935
936
0
unsigned fastEmit_MipsISD_MFLO_r(MVT VT, MVT RetVT, unsigned Op0) {
937
0
  switch (VT.SimpleTy) {
938
0
  case MVT::Untyped: return fastEmit_MipsISD_MFLO_MVT_Untyped_r(RetVT, Op0);
939
0
  default: return 0;
940
0
  }
941
0
}
942
943
// FastEmit functions for MipsISD::MTC1_D64.
944
945
0
unsigned fastEmit_MipsISD_MTC1_D64_MVT_i32_r(MVT RetVT, unsigned Op0) {
946
0
  if (RetVT.SimpleTy != MVT::f64)
947
0
    return 0;
948
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit())) {
949
0
    return fastEmitInst_r(Mips::MTC1_D64_MM, &Mips::FGR64RegClass, Op0);
950
0
  }
951
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit())) {
952
0
    return fastEmitInst_r(Mips::MTC1_D64, &Mips::FGR64RegClass, Op0);
953
0
  }
954
0
  return 0;
955
0
}
956
957
0
unsigned fastEmit_MipsISD_MTC1_D64_r(MVT VT, MVT RetVT, unsigned Op0) {
958
0
  switch (VT.SimpleTy) {
959
0
  case MVT::i32: return fastEmit_MipsISD_MTC1_D64_MVT_i32_r(RetVT, Op0);
960
0
  default: return 0;
961
0
  }
962
0
}
963
964
// FastEmit functions for MipsISD::TailCall.
965
966
0
unsigned fastEmit_MipsISD_TailCall_MVT_i32_r(MVT RetVT, unsigned Op0) {
967
0
  if (RetVT.SimpleTy != MVT::isVoid)
968
0
    return 0;
969
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
970
0
    return fastEmitInst_r(Mips::TAILCALLREG_MMR6, &Mips::GPR32RegClass, Op0);
971
0
  }
972
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
973
0
    return fastEmitInst_r(Mips::TAILCALLREG_MM, &Mips::GPR32RegClass, Op0);
974
0
  }
975
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
976
0
    return fastEmitInst_r(Mips::TAILCALLHBR6REG, &Mips::GPR32RegClass, Op0);
977
0
  }
978
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode())) {
979
0
    return fastEmitInst_r(Mips::TAILCALLR6REG, &Mips::GPR32RegClass, Op0);
980
0
  }
981
0
  if ((Subtarget->hasMips32()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6()) && (Subtarget->useIndirectJumpsHazard())) {
982
0
    return fastEmitInst_r(Mips::TAILCALLREGHB, &Mips::GPR32RegClass, Op0);
983
0
  }
984
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
985
0
    return fastEmitInst_r(Mips::TAILCALLREG, &Mips::GPR32RegClass, Op0);
986
0
  }
987
0
  return 0;
988
0
}
989
990
0
unsigned fastEmit_MipsISD_TailCall_MVT_i64_r(MVT RetVT, unsigned Op0) {
991
0
  if (RetVT.SimpleTy != MVT::isVoid)
992
0
    return 0;
993
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (Subtarget->useIndirectJumpsHazard())) {
994
0
    return fastEmitInst_r(Mips::TAILCALLHB64R6REG, &Mips::GPR64RegClass, Op0);
995
0
  }
996
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode())) {
997
0
    return fastEmitInst_r(Mips::TAILCALL64R6REG, &Mips::GPR64RegClass, Op0);
998
0
  }
999
0
  if ((Subtarget->hasMips32r2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isABI_N64()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6()) && (Subtarget->useIndirectJumpsHazard())) {
1000
0
    return fastEmitInst_r(Mips::TAILCALLREGHB64, &Mips::GPR64RegClass, Op0);
1001
0
  }
1002
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isABI_N64()) && (!Subtarget->useIndirectJumpsHazard()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->inMips16Mode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
1003
0
    return fastEmitInst_r(Mips::TAILCALLREG64, &Mips::GPR64RegClass, Op0);
1004
0
  }
1005
0
  return 0;
1006
0
}
1007
1008
0
unsigned fastEmit_MipsISD_TailCall_r(MVT VT, MVT RetVT, unsigned Op0) {
1009
0
  switch (VT.SimpleTy) {
1010
0
  case MVT::i32: return fastEmit_MipsISD_TailCall_MVT_i32_r(RetVT, Op0);
1011
0
  case MVT::i64: return fastEmit_MipsISD_TailCall_MVT_i64_r(RetVT, Op0);
1012
0
  default: return 0;
1013
0
  }
1014
0
}
1015
1016
// FastEmit functions for MipsISD::TruncIntFP.
1017
1018
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f32_MVT_f32_r(unsigned Op0) {
1019
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1020
0
    return fastEmitInst_r(Mips::TRUNC_W_S_MMR6, &Mips::FGR32RegClass, Op0);
1021
0
  }
1022
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
1023
0
    return fastEmitInst_r(Mips::TRUNC_W_S_MM, &Mips::FGR32RegClass, Op0);
1024
0
  }
1025
0
  if ((Subtarget->hasStandardEncoding())) {
1026
0
    return fastEmitInst_r(Mips::TRUNC_W_S, &Mips::FGR32RegClass, Op0);
1027
0
  }
1028
0
  return 0;
1029
0
}
1030
1031
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f32_MVT_f64_r(unsigned Op0) {
1032
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit())) {
1033
0
    return fastEmitInst_r(Mips::TRUNC_L_S, &Mips::FGR64RegClass, Op0);
1034
0
  }
1035
0
  return 0;
1036
0
}
1037
1038
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f32_r(MVT RetVT, unsigned Op0) {
1039
0
switch (RetVT.SimpleTy) {
1040
0
  case MVT::f32: return fastEmit_MipsISD_TruncIntFP_MVT_f32_MVT_f32_r(Op0);
1041
0
  case MVT::f64: return fastEmit_MipsISD_TruncIntFP_MVT_f32_MVT_f64_r(Op0);
1042
0
  default: return 0;
1043
0
}
1044
0
}
1045
1046
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f64_MVT_f32_r(unsigned Op0) {
1047
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1048
0
    return fastEmitInst_r(Mips::TRUNC_W_D_MMR6, &Mips::FGR32RegClass, Op0);
1049
0
  }
1050
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->hasMips32r6())) {
1051
0
    return fastEmitInst_r(Mips::CVT_W_D64_MM, &Mips::FGR32RegClass, Op0);
1052
0
  }
1053
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->isFP64bit()) && (!Subtarget->hasMips32r6())) {
1054
0
    return fastEmitInst_r(Mips::TRUNC_W_MM, &Mips::FGR32RegClass, Op0);
1055
0
  }
1056
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit())) {
1057
0
    return fastEmitInst_r(Mips::TRUNC_W_D64, &Mips::FGR32RegClass, Op0);
1058
0
  }
1059
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
1060
0
    return fastEmitInst_r(Mips::TRUNC_W_D32, &Mips::FGR32RegClass, Op0);
1061
0
  }
1062
0
  return 0;
1063
0
}
1064
1065
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f64_MVT_f64_r(unsigned Op0) {
1066
0
  if ((Subtarget->hasMips2()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit())) {
1067
0
    return fastEmitInst_r(Mips::TRUNC_L_D64, &Mips::FGR64RegClass, Op0);
1068
0
  }
1069
0
  return 0;
1070
0
}
1071
1072
0
unsigned fastEmit_MipsISD_TruncIntFP_MVT_f64_r(MVT RetVT, unsigned Op0) {
1073
0
switch (RetVT.SimpleTy) {
1074
0
  case MVT::f32: return fastEmit_MipsISD_TruncIntFP_MVT_f64_MVT_f32_r(Op0);
1075
0
  case MVT::f64: return fastEmit_MipsISD_TruncIntFP_MVT_f64_MVT_f64_r(Op0);
1076
0
  default: return 0;
1077
0
}
1078
0
}
1079
1080
0
unsigned fastEmit_MipsISD_TruncIntFP_r(MVT VT, MVT RetVT, unsigned Op0) {
1081
0
  switch (VT.SimpleTy) {
1082
0
  case MVT::f32: return fastEmit_MipsISD_TruncIntFP_MVT_f32_r(RetVT, Op0);
1083
0
  case MVT::f64: return fastEmit_MipsISD_TruncIntFP_MVT_f64_r(RetVT, Op0);
1084
0
  default: return 0;
1085
0
  }
1086
0
}
1087
1088
// FastEmit functions for MipsISD::VALL_NONZERO.
1089
1090
0
unsigned fastEmit_MipsISD_VALL_NONZERO_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
1091
0
  if (RetVT.SimpleTy != MVT::i32)
1092
0
    return 0;
1093
0
  return fastEmitInst_r(Mips::SNZ_B_PSEUDO, &Mips::GPR32RegClass, Op0);
1094
0
}
1095
1096
0
unsigned fastEmit_MipsISD_VALL_NONZERO_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
1097
0
  if (RetVT.SimpleTy != MVT::i32)
1098
0
    return 0;
1099
0
  return fastEmitInst_r(Mips::SNZ_H_PSEUDO, &Mips::GPR32RegClass, Op0);
1100
0
}
1101
1102
0
unsigned fastEmit_MipsISD_VALL_NONZERO_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
1103
0
  if (RetVT.SimpleTy != MVT::i32)
1104
0
    return 0;
1105
0
  return fastEmitInst_r(Mips::SNZ_W_PSEUDO, &Mips::GPR32RegClass, Op0);
1106
0
}
1107
1108
0
unsigned fastEmit_MipsISD_VALL_NONZERO_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
1109
0
  if (RetVT.SimpleTy != MVT::i32)
1110
0
    return 0;
1111
0
  return fastEmitInst_r(Mips::SNZ_D_PSEUDO, &Mips::GPR32RegClass, Op0);
1112
0
}
1113
1114
0
unsigned fastEmit_MipsISD_VALL_NONZERO_r(MVT VT, MVT RetVT, unsigned Op0) {
1115
0
  switch (VT.SimpleTy) {
1116
0
  case MVT::v16i8: return fastEmit_MipsISD_VALL_NONZERO_MVT_v16i8_r(RetVT, Op0);
1117
0
  case MVT::v8i16: return fastEmit_MipsISD_VALL_NONZERO_MVT_v8i16_r(RetVT, Op0);
1118
0
  case MVT::v4i32: return fastEmit_MipsISD_VALL_NONZERO_MVT_v4i32_r(RetVT, Op0);
1119
0
  case MVT::v2i64: return fastEmit_MipsISD_VALL_NONZERO_MVT_v2i64_r(RetVT, Op0);
1120
0
  default: return 0;
1121
0
  }
1122
0
}
1123
1124
// FastEmit functions for MipsISD::VALL_ZERO.
1125
1126
0
unsigned fastEmit_MipsISD_VALL_ZERO_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
1127
0
  if (RetVT.SimpleTy != MVT::i32)
1128
0
    return 0;
1129
0
  return fastEmitInst_r(Mips::SZ_B_PSEUDO, &Mips::GPR32RegClass, Op0);
1130
0
}
1131
1132
0
unsigned fastEmit_MipsISD_VALL_ZERO_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
1133
0
  if (RetVT.SimpleTy != MVT::i32)
1134
0
    return 0;
1135
0
  return fastEmitInst_r(Mips::SZ_H_PSEUDO, &Mips::GPR32RegClass, Op0);
1136
0
}
1137
1138
0
unsigned fastEmit_MipsISD_VALL_ZERO_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
1139
0
  if (RetVT.SimpleTy != MVT::i32)
1140
0
    return 0;
1141
0
  return fastEmitInst_r(Mips::SZ_W_PSEUDO, &Mips::GPR32RegClass, Op0);
1142
0
}
1143
1144
0
unsigned fastEmit_MipsISD_VALL_ZERO_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
1145
0
  if (RetVT.SimpleTy != MVT::i32)
1146
0
    return 0;
1147
0
  return fastEmitInst_r(Mips::SZ_D_PSEUDO, &Mips::GPR32RegClass, Op0);
1148
0
}
1149
1150
0
unsigned fastEmit_MipsISD_VALL_ZERO_r(MVT VT, MVT RetVT, unsigned Op0) {
1151
0
  switch (VT.SimpleTy) {
1152
0
  case MVT::v16i8: return fastEmit_MipsISD_VALL_ZERO_MVT_v16i8_r(RetVT, Op0);
1153
0
  case MVT::v8i16: return fastEmit_MipsISD_VALL_ZERO_MVT_v8i16_r(RetVT, Op0);
1154
0
  case MVT::v4i32: return fastEmit_MipsISD_VALL_ZERO_MVT_v4i32_r(RetVT, Op0);
1155
0
  case MVT::v2i64: return fastEmit_MipsISD_VALL_ZERO_MVT_v2i64_r(RetVT, Op0);
1156
0
  default: return 0;
1157
0
  }
1158
0
}
1159
1160
// FastEmit functions for MipsISD::VANY_NONZERO.
1161
1162
0
unsigned fastEmit_MipsISD_VANY_NONZERO_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
1163
0
  if (RetVT.SimpleTy != MVT::i32)
1164
0
    return 0;
1165
0
  return fastEmitInst_r(Mips::SNZ_V_PSEUDO, &Mips::GPR32RegClass, Op0);
1166
0
}
1167
1168
0
unsigned fastEmit_MipsISD_VANY_NONZERO_r(MVT VT, MVT RetVT, unsigned Op0) {
1169
0
  switch (VT.SimpleTy) {
1170
0
  case MVT::v16i8: return fastEmit_MipsISD_VANY_NONZERO_MVT_v16i8_r(RetVT, Op0);
1171
0
  default: return 0;
1172
0
  }
1173
0
}
1174
1175
// FastEmit functions for MipsISD::VANY_ZERO.
1176
1177
0
unsigned fastEmit_MipsISD_VANY_ZERO_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
1178
0
  if (RetVT.SimpleTy != MVT::i32)
1179
0
    return 0;
1180
0
  return fastEmitInst_r(Mips::SZ_V_PSEUDO, &Mips::GPR32RegClass, Op0);
1181
0
}
1182
1183
0
unsigned fastEmit_MipsISD_VANY_ZERO_r(MVT VT, MVT RetVT, unsigned Op0) {
1184
0
  switch (VT.SimpleTy) {
1185
0
  case MVT::v16i8: return fastEmit_MipsISD_VANY_ZERO_MVT_v16i8_r(RetVT, Op0);
1186
0
  default: return 0;
1187
0
  }
1188
0
}
1189
1190
// Top-level FastEmit function.
1191
1192
0
unsigned fastEmit_r(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0) override {
1193
0
  switch (Opcode) {
1194
0
  case ISD::BITCAST: return fastEmit_ISD_BITCAST_r(VT, RetVT, Op0);
1195
0
  case ISD::BRIND: return fastEmit_ISD_BRIND_r(VT, RetVT, Op0);
1196
0
  case ISD::CTLZ: return fastEmit_ISD_CTLZ_r(VT, RetVT, Op0);
1197
0
  case ISD::CTPOP: return fastEmit_ISD_CTPOP_r(VT, RetVT, Op0);
1198
0
  case ISD::FABS: return fastEmit_ISD_FABS_r(VT, RetVT, Op0);
1199
0
  case ISD::FEXP2: return fastEmit_ISD_FEXP2_r(VT, RetVT, Op0);
1200
0
  case ISD::FLOG2: return fastEmit_ISD_FLOG2_r(VT, RetVT, Op0);
1201
0
  case ISD::FNEG: return fastEmit_ISD_FNEG_r(VT, RetVT, Op0);
1202
0
  case ISD::FP_EXTEND: return fastEmit_ISD_FP_EXTEND_r(VT, RetVT, Op0);
1203
0
  case ISD::FP_ROUND: return fastEmit_ISD_FP_ROUND_r(VT, RetVT, Op0);
1204
0
  case ISD::FP_TO_SINT: return fastEmit_ISD_FP_TO_SINT_r(VT, RetVT, Op0);
1205
0
  case ISD::FP_TO_UINT: return fastEmit_ISD_FP_TO_UINT_r(VT, RetVT, Op0);
1206
0
  case ISD::FRINT: return fastEmit_ISD_FRINT_r(VT, RetVT, Op0);
1207
0
  case ISD::FSQRT: return fastEmit_ISD_FSQRT_r(VT, RetVT, Op0);
1208
0
  case ISD::SIGN_EXTEND: return fastEmit_ISD_SIGN_EXTEND_r(VT, RetVT, Op0);
1209
0
  case ISD::SINT_TO_FP: return fastEmit_ISD_SINT_TO_FP_r(VT, RetVT, Op0);
1210
0
  case ISD::UINT_TO_FP: return fastEmit_ISD_UINT_TO_FP_r(VT, RetVT, Op0);
1211
0
  case MipsISD::JmpLink: return fastEmit_MipsISD_JmpLink_r(VT, RetVT, Op0);
1212
0
  case MipsISD::MFHI: return fastEmit_MipsISD_MFHI_r(VT, RetVT, Op0);
1213
0
  case MipsISD::MFLO: return fastEmit_MipsISD_MFLO_r(VT, RetVT, Op0);
1214
0
  case MipsISD::MTC1_D64: return fastEmit_MipsISD_MTC1_D64_r(VT, RetVT, Op0);
1215
0
  case MipsISD::TailCall: return fastEmit_MipsISD_TailCall_r(VT, RetVT, Op0);
1216
0
  case MipsISD::TruncIntFP: return fastEmit_MipsISD_TruncIntFP_r(VT, RetVT, Op0);
1217
0
  case MipsISD::VALL_NONZERO: return fastEmit_MipsISD_VALL_NONZERO_r(VT, RetVT, Op0);
1218
0
  case MipsISD::VALL_ZERO: return fastEmit_MipsISD_VALL_ZERO_r(VT, RetVT, Op0);
1219
0
  case MipsISD::VANY_NONZERO: return fastEmit_MipsISD_VANY_NONZERO_r(VT, RetVT, Op0);
1220
0
  case MipsISD::VANY_ZERO: return fastEmit_MipsISD_VANY_ZERO_r(VT, RetVT, Op0);
1221
0
  default: return 0;
1222
0
  }
1223
0
}
1224
1225
// FastEmit functions for ISD::ADD.
1226
1227
0
unsigned fastEmit_ISD_ADD_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1228
0
  if (RetVT.SimpleTy != MVT::i32)
1229
0
    return 0;
1230
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1231
0
    return fastEmitInst_rr(Mips::ADDU16_MMR6, &Mips::GPRMM16RegClass, Op0, Op1);
1232
0
  }
1233
0
  if ((Subtarget->inMips16Mode())) {
1234
0
    return fastEmitInst_rr(Mips::AdduRxRyRz16, &Mips::CPU16RegsRegClass, Op0, Op1);
1235
0
  }
1236
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
1237
0
    return fastEmitInst_rr(Mips::ADDu_MM, &Mips::GPR32RegClass, Op0, Op1);
1238
0
  }
1239
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1240
0
    return fastEmitInst_rr(Mips::ADDu, &Mips::GPR32RegClass, Op0, Op1);
1241
0
  }
1242
0
  return 0;
1243
0
}
1244
1245
0
unsigned fastEmit_ISD_ADD_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1246
0
  if (RetVT.SimpleTy != MVT::i64)
1247
0
    return 0;
1248
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1249
0
    return fastEmitInst_rr(Mips::DADDu, &Mips::GPR64RegClass, Op0, Op1);
1250
0
  }
1251
0
  return 0;
1252
0
}
1253
1254
0
unsigned fastEmit_ISD_ADD_MVT_v4i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1255
0
  if (RetVT.SimpleTy != MVT::v4i8)
1256
0
    return 0;
1257
0
  if ((Subtarget->hasDSP())) {
1258
0
    return fastEmitInst_rr(Mips::ADDU_QB, &Mips::DSPRRegClass, Op0, Op1);
1259
0
  }
1260
0
  return 0;
1261
0
}
1262
1263
0
unsigned fastEmit_ISD_ADD_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1264
0
  if (RetVT.SimpleTy != MVT::v16i8)
1265
0
    return 0;
1266
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1267
0
    return fastEmitInst_rr(Mips::ADDV_B, &Mips::MSA128BRegClass, Op0, Op1);
1268
0
  }
1269
0
  return 0;
1270
0
}
1271
1272
0
unsigned fastEmit_ISD_ADD_MVT_v2i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1273
0
  if (RetVT.SimpleTy != MVT::v2i16)
1274
0
    return 0;
1275
0
  if ((Subtarget->hasDSP())) {
1276
0
    return fastEmitInst_rr(Mips::ADDQ_PH, &Mips::DSPRRegClass, Op0, Op1);
1277
0
  }
1278
0
  return 0;
1279
0
}
1280
1281
0
unsigned fastEmit_ISD_ADD_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1282
0
  if (RetVT.SimpleTy != MVT::v8i16)
1283
0
    return 0;
1284
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1285
0
    return fastEmitInst_rr(Mips::ADDV_H, &Mips::MSA128HRegClass, Op0, Op1);
1286
0
  }
1287
0
  return 0;
1288
0
}
1289
1290
0
unsigned fastEmit_ISD_ADD_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1291
0
  if (RetVT.SimpleTy != MVT::v4i32)
1292
0
    return 0;
1293
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1294
0
    return fastEmitInst_rr(Mips::ADDV_W, &Mips::MSA128WRegClass, Op0, Op1);
1295
0
  }
1296
0
  return 0;
1297
0
}
1298
1299
0
unsigned fastEmit_ISD_ADD_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1300
0
  if (RetVT.SimpleTy != MVT::v2i64)
1301
0
    return 0;
1302
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1303
0
    return fastEmitInst_rr(Mips::ADDV_D, &Mips::MSA128DRegClass, Op0, Op1);
1304
0
  }
1305
0
  return 0;
1306
0
}
1307
1308
0
unsigned fastEmit_ISD_ADD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1309
0
  switch (VT.SimpleTy) {
1310
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_rr(RetVT, Op0, Op1);
1311
0
  case MVT::i64: return fastEmit_ISD_ADD_MVT_i64_rr(RetVT, Op0, Op1);
1312
0
  case MVT::v4i8: return fastEmit_ISD_ADD_MVT_v4i8_rr(RetVT, Op0, Op1);
1313
0
  case MVT::v16i8: return fastEmit_ISD_ADD_MVT_v16i8_rr(RetVT, Op0, Op1);
1314
0
  case MVT::v2i16: return fastEmit_ISD_ADD_MVT_v2i16_rr(RetVT, Op0, Op1);
1315
0
  case MVT::v8i16: return fastEmit_ISD_ADD_MVT_v8i16_rr(RetVT, Op0, Op1);
1316
0
  case MVT::v4i32: return fastEmit_ISD_ADD_MVT_v4i32_rr(RetVT, Op0, Op1);
1317
0
  case MVT::v2i64: return fastEmit_ISD_ADD_MVT_v2i64_rr(RetVT, Op0, Op1);
1318
0
  default: return 0;
1319
0
  }
1320
0
}
1321
1322
// FastEmit functions for ISD::ADDC.
1323
1324
0
unsigned fastEmit_ISD_ADDC_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1325
0
  if (RetVT.SimpleTy != MVT::i32)
1326
0
    return 0;
1327
0
  if ((Subtarget->hasDSP())) {
1328
0
    return fastEmitInst_rr(Mips::ADDSC, &Mips::GPR32RegClass, Op0, Op1);
1329
0
  }
1330
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP())) {
1331
0
    return fastEmitInst_rr(Mips::ADDu, &Mips::GPR32RegClass, Op0, Op1);
1332
0
  }
1333
0
  return 0;
1334
0
}
1335
1336
0
unsigned fastEmit_ISD_ADDC_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1337
0
  if (RetVT.SimpleTy != MVT::i64)
1338
0
    return 0;
1339
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isGP64bit()) && (!Subtarget->hasDSP()) && (!Subtarget->inMicroMipsMode())) {
1340
0
    return fastEmitInst_rr(Mips::DADDu, &Mips::GPR64RegClass, Op0, Op1);
1341
0
  }
1342
0
  return 0;
1343
0
}
1344
1345
0
unsigned fastEmit_ISD_ADDC_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1346
0
  switch (VT.SimpleTy) {
1347
0
  case MVT::i32: return fastEmit_ISD_ADDC_MVT_i32_rr(RetVT, Op0, Op1);
1348
0
  case MVT::i64: return fastEmit_ISD_ADDC_MVT_i64_rr(RetVT, Op0, Op1);
1349
0
  default: return 0;
1350
0
  }
1351
0
}
1352
1353
// FastEmit functions for ISD::ADDE.
1354
1355
0
unsigned fastEmit_ISD_ADDE_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1356
0
  if (RetVT.SimpleTy != MVT::i32)
1357
0
    return 0;
1358
0
  if ((Subtarget->hasDSP())) {
1359
0
    return fastEmitInst_rr(Mips::ADDWC, &Mips::GPR32RegClass, Op0, Op1);
1360
0
  }
1361
0
  return 0;
1362
0
}
1363
1364
0
unsigned fastEmit_ISD_ADDE_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1365
0
  switch (VT.SimpleTy) {
1366
0
  case MVT::i32: return fastEmit_ISD_ADDE_MVT_i32_rr(RetVT, Op0, Op1);
1367
0
  default: return 0;
1368
0
  }
1369
0
}
1370
1371
// FastEmit functions for ISD::AND.
1372
1373
0
unsigned fastEmit_ISD_AND_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1374
0
  if (RetVT.SimpleTy != MVT::i32)
1375
0
    return 0;
1376
0
  if ((Subtarget->inMips16Mode())) {
1377
0
    return fastEmitInst_rr(Mips::AndRxRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
1378
0
  }
1379
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1380
0
    return fastEmitInst_rr(Mips::AND_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1381
0
  }
1382
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
1383
0
    return fastEmitInst_rr(Mips::AND_MM, &Mips::GPR32RegClass, Op0, Op1);
1384
0
  }
1385
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1386
0
    return fastEmitInst_rr(Mips::AND, &Mips::GPR32RegClass, Op0, Op1);
1387
0
  }
1388
0
  return 0;
1389
0
}
1390
1391
0
unsigned fastEmit_ISD_AND_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1392
0
  if (RetVT.SimpleTy != MVT::i64)
1393
0
    return 0;
1394
0
  if ((Subtarget->isGP64bit()) && (!Subtarget->inMips16Mode())) {
1395
0
    return fastEmitInst_rr(Mips::AND64, &Mips::GPR64RegClass, Op0, Op1);
1396
0
  }
1397
0
  return 0;
1398
0
}
1399
1400
0
unsigned fastEmit_ISD_AND_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1401
0
  if (RetVT.SimpleTy != MVT::v16i8)
1402
0
    return 0;
1403
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1404
0
    return fastEmitInst_rr(Mips::AND_V, &Mips::MSA128BRegClass, Op0, Op1);
1405
0
  }
1406
0
  return 0;
1407
0
}
1408
1409
0
unsigned fastEmit_ISD_AND_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1410
0
  if (RetVT.SimpleTy != MVT::v8i16)
1411
0
    return 0;
1412
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1413
0
    return fastEmitInst_rr(Mips::AND_V_H_PSEUDO, &Mips::MSA128HRegClass, Op0, Op1);
1414
0
  }
1415
0
  return 0;
1416
0
}
1417
1418
0
unsigned fastEmit_ISD_AND_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1419
0
  if (RetVT.SimpleTy != MVT::v4i32)
1420
0
    return 0;
1421
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1422
0
    return fastEmitInst_rr(Mips::AND_V_W_PSEUDO, &Mips::MSA128WRegClass, Op0, Op1);
1423
0
  }
1424
0
  return 0;
1425
0
}
1426
1427
0
unsigned fastEmit_ISD_AND_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1428
0
  if (RetVT.SimpleTy != MVT::v2i64)
1429
0
    return 0;
1430
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1431
0
    return fastEmitInst_rr(Mips::AND_V_D_PSEUDO, &Mips::MSA128DRegClass, Op0, Op1);
1432
0
  }
1433
0
  return 0;
1434
0
}
1435
1436
0
unsigned fastEmit_ISD_AND_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1437
0
  switch (VT.SimpleTy) {
1438
0
  case MVT::i32: return fastEmit_ISD_AND_MVT_i32_rr(RetVT, Op0, Op1);
1439
0
  case MVT::i64: return fastEmit_ISD_AND_MVT_i64_rr(RetVT, Op0, Op1);
1440
0
  case MVT::v16i8: return fastEmit_ISD_AND_MVT_v16i8_rr(RetVT, Op0, Op1);
1441
0
  case MVT::v8i16: return fastEmit_ISD_AND_MVT_v8i16_rr(RetVT, Op0, Op1);
1442
0
  case MVT::v4i32: return fastEmit_ISD_AND_MVT_v4i32_rr(RetVT, Op0, Op1);
1443
0
  case MVT::v2i64: return fastEmit_ISD_AND_MVT_v2i64_rr(RetVT, Op0, Op1);
1444
0
  default: return 0;
1445
0
  }
1446
0
}
1447
1448
// FastEmit functions for ISD::FADD.
1449
1450
0
unsigned fastEmit_ISD_FADD_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1451
0
  if (RetVT.SimpleTy != MVT::f32)
1452
0
    return 0;
1453
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
1454
0
    return fastEmitInst_rr(Mips::FADD_S_MM, &Mips::FGR32RegClass, Op0, Op1);
1455
0
  }
1456
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1457
0
    return fastEmitInst_rr(Mips::FADD_S, &Mips::FGR32RegClass, Op0, Op1);
1458
0
  }
1459
0
  return 0;
1460
0
}
1461
1462
0
unsigned fastEmit_ISD_FADD_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1463
0
  if (RetVT.SimpleTy != MVT::f64)
1464
0
    return 0;
1465
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
1466
0
    return fastEmitInst_rr(Mips::FADD_D64_MM, &Mips::FGR64RegClass, Op0, Op1);
1467
0
  }
1468
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
1469
0
    return fastEmitInst_rr(Mips::FADD_D32_MM, &Mips::AFGR64RegClass, Op0, Op1);
1470
0
  }
1471
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1472
0
    return fastEmitInst_rr(Mips::FADD_D64, &Mips::FGR64RegClass, Op0, Op1);
1473
0
  }
1474
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
1475
0
    return fastEmitInst_rr(Mips::FADD_D32, &Mips::AFGR64RegClass, Op0, Op1);
1476
0
  }
1477
0
  return 0;
1478
0
}
1479
1480
0
unsigned fastEmit_ISD_FADD_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1481
0
  if (RetVT.SimpleTy != MVT::v4f32)
1482
0
    return 0;
1483
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1484
0
    return fastEmitInst_rr(Mips::FADD_W, &Mips::MSA128WRegClass, Op0, Op1);
1485
0
  }
1486
0
  return 0;
1487
0
}
1488
1489
0
unsigned fastEmit_ISD_FADD_MVT_v2f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1490
0
  if (RetVT.SimpleTy != MVT::v2f64)
1491
0
    return 0;
1492
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1493
0
    return fastEmitInst_rr(Mips::FADD_D, &Mips::MSA128DRegClass, Op0, Op1);
1494
0
  }
1495
0
  return 0;
1496
0
}
1497
1498
0
unsigned fastEmit_ISD_FADD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1499
0
  switch (VT.SimpleTy) {
1500
0
  case MVT::f32: return fastEmit_ISD_FADD_MVT_f32_rr(RetVT, Op0, Op1);
1501
0
  case MVT::f64: return fastEmit_ISD_FADD_MVT_f64_rr(RetVT, Op0, Op1);
1502
0
  case MVT::v4f32: return fastEmit_ISD_FADD_MVT_v4f32_rr(RetVT, Op0, Op1);
1503
0
  case MVT::v2f64: return fastEmit_ISD_FADD_MVT_v2f64_rr(RetVT, Op0, Op1);
1504
0
  default: return 0;
1505
0
  }
1506
0
}
1507
1508
// FastEmit functions for ISD::FDIV.
1509
1510
0
unsigned fastEmit_ISD_FDIV_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1511
0
  if (RetVT.SimpleTy != MVT::f32)
1512
0
    return 0;
1513
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
1514
0
    return fastEmitInst_rr(Mips::FDIV_S_MM, &Mips::FGR32RegClass, Op0, Op1);
1515
0
  }
1516
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1517
0
    return fastEmitInst_rr(Mips::FDIV_S, &Mips::FGR32RegClass, Op0, Op1);
1518
0
  }
1519
0
  return 0;
1520
0
}
1521
1522
0
unsigned fastEmit_ISD_FDIV_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1523
0
  if (RetVT.SimpleTy != MVT::f64)
1524
0
    return 0;
1525
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
1526
0
    return fastEmitInst_rr(Mips::FDIV_D64_MM, &Mips::FGR64RegClass, Op0, Op1);
1527
0
  }
1528
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
1529
0
    return fastEmitInst_rr(Mips::FDIV_D32_MM, &Mips::AFGR64RegClass, Op0, Op1);
1530
0
  }
1531
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1532
0
    return fastEmitInst_rr(Mips::FDIV_D64, &Mips::FGR64RegClass, Op0, Op1);
1533
0
  }
1534
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
1535
0
    return fastEmitInst_rr(Mips::FDIV_D32, &Mips::AFGR64RegClass, Op0, Op1);
1536
0
  }
1537
0
  return 0;
1538
0
}
1539
1540
0
unsigned fastEmit_ISD_FDIV_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1541
0
  if (RetVT.SimpleTy != MVT::v4f32)
1542
0
    return 0;
1543
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1544
0
    return fastEmitInst_rr(Mips::FDIV_W, &Mips::MSA128WRegClass, Op0, Op1);
1545
0
  }
1546
0
  return 0;
1547
0
}
1548
1549
0
unsigned fastEmit_ISD_FDIV_MVT_v2f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1550
0
  if (RetVT.SimpleTy != MVT::v2f64)
1551
0
    return 0;
1552
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1553
0
    return fastEmitInst_rr(Mips::FDIV_D, &Mips::MSA128DRegClass, Op0, Op1);
1554
0
  }
1555
0
  return 0;
1556
0
}
1557
1558
0
unsigned fastEmit_ISD_FDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1559
0
  switch (VT.SimpleTy) {
1560
0
  case MVT::f32: return fastEmit_ISD_FDIV_MVT_f32_rr(RetVT, Op0, Op1);
1561
0
  case MVT::f64: return fastEmit_ISD_FDIV_MVT_f64_rr(RetVT, Op0, Op1);
1562
0
  case MVT::v4f32: return fastEmit_ISD_FDIV_MVT_v4f32_rr(RetVT, Op0, Op1);
1563
0
  case MVT::v2f64: return fastEmit_ISD_FDIV_MVT_v2f64_rr(RetVT, Op0, Op1);
1564
0
  default: return 0;
1565
0
  }
1566
0
}
1567
1568
// FastEmit functions for ISD::FMUL.
1569
1570
0
unsigned fastEmit_ISD_FMUL_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1571
0
  if (RetVT.SimpleTy != MVT::f32)
1572
0
    return 0;
1573
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
1574
0
    return fastEmitInst_rr(Mips::FMUL_S_MM, &Mips::FGR32RegClass, Op0, Op1);
1575
0
  }
1576
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1577
0
    return fastEmitInst_rr(Mips::FMUL_S, &Mips::FGR32RegClass, Op0, Op1);
1578
0
  }
1579
0
  return 0;
1580
0
}
1581
1582
0
unsigned fastEmit_ISD_FMUL_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1583
0
  if (RetVT.SimpleTy != MVT::f64)
1584
0
    return 0;
1585
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
1586
0
    return fastEmitInst_rr(Mips::FMUL_D64_MM, &Mips::FGR64RegClass, Op0, Op1);
1587
0
  }
1588
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
1589
0
    return fastEmitInst_rr(Mips::FMUL_D32_MM, &Mips::AFGR64RegClass, Op0, Op1);
1590
0
  }
1591
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1592
0
    return fastEmitInst_rr(Mips::FMUL_D64, &Mips::FGR64RegClass, Op0, Op1);
1593
0
  }
1594
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
1595
0
    return fastEmitInst_rr(Mips::FMUL_D32, &Mips::AFGR64RegClass, Op0, Op1);
1596
0
  }
1597
0
  return 0;
1598
0
}
1599
1600
0
unsigned fastEmit_ISD_FMUL_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1601
0
  if (RetVT.SimpleTy != MVT::v4f32)
1602
0
    return 0;
1603
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1604
0
    return fastEmitInst_rr(Mips::FMUL_W, &Mips::MSA128WRegClass, Op0, Op1);
1605
0
  }
1606
0
  return 0;
1607
0
}
1608
1609
0
unsigned fastEmit_ISD_FMUL_MVT_v2f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1610
0
  if (RetVT.SimpleTy != MVT::v2f64)
1611
0
    return 0;
1612
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1613
0
    return fastEmitInst_rr(Mips::FMUL_D, &Mips::MSA128DRegClass, Op0, Op1);
1614
0
  }
1615
0
  return 0;
1616
0
}
1617
1618
0
unsigned fastEmit_ISD_FMUL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1619
0
  switch (VT.SimpleTy) {
1620
0
  case MVT::f32: return fastEmit_ISD_FMUL_MVT_f32_rr(RetVT, Op0, Op1);
1621
0
  case MVT::f64: return fastEmit_ISD_FMUL_MVT_f64_rr(RetVT, Op0, Op1);
1622
0
  case MVT::v4f32: return fastEmit_ISD_FMUL_MVT_v4f32_rr(RetVT, Op0, Op1);
1623
0
  case MVT::v2f64: return fastEmit_ISD_FMUL_MVT_v2f64_rr(RetVT, Op0, Op1);
1624
0
  default: return 0;
1625
0
  }
1626
0
}
1627
1628
// FastEmit functions for ISD::FSUB.
1629
1630
0
unsigned fastEmit_ISD_FSUB_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1631
0
  if (RetVT.SimpleTy != MVT::f32)
1632
0
    return 0;
1633
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat())) {
1634
0
    return fastEmitInst_rr(Mips::FSUB_S_MM, &Mips::FGR32RegClass, Op0, Op1);
1635
0
  }
1636
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1637
0
    return fastEmitInst_rr(Mips::FSUB_S, &Mips::FGR32RegClass, Op0, Op1);
1638
0
  }
1639
0
  return 0;
1640
0
}
1641
1642
0
unsigned fastEmit_ISD_FSUB_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1643
0
  if (RetVT.SimpleTy != MVT::f64)
1644
0
    return 0;
1645
0
  if ((Subtarget->inMicroMipsMode()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat())) {
1646
0
    return fastEmitInst_rr(Mips::FSUB_D64_MM, &Mips::FGR64RegClass, Op0, Op1);
1647
0
  }
1648
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit())) {
1649
0
    return fastEmitInst_rr(Mips::FSUB_D32_MM, &Mips::AFGR64RegClass, Op0, Op1);
1650
0
  }
1651
0
  if ((Subtarget->hasStandardEncoding()) && (Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMicroMipsMode())) {
1652
0
    return fastEmitInst_rr(Mips::FSUB_D64, &Mips::FGR64RegClass, Op0, Op1);
1653
0
  }
1654
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMicroMipsMode())) {
1655
0
    return fastEmitInst_rr(Mips::FSUB_D32, &Mips::AFGR64RegClass, Op0, Op1);
1656
0
  }
1657
0
  return 0;
1658
0
}
1659
1660
0
unsigned fastEmit_ISD_FSUB_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1661
0
  if (RetVT.SimpleTy != MVT::v4f32)
1662
0
    return 0;
1663
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1664
0
    return fastEmitInst_rr(Mips::FSUB_W, &Mips::MSA128WRegClass, Op0, Op1);
1665
0
  }
1666
0
  return 0;
1667
0
}
1668
1669
0
unsigned fastEmit_ISD_FSUB_MVT_v2f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1670
0
  if (RetVT.SimpleTy != MVT::v2f64)
1671
0
    return 0;
1672
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1673
0
    return fastEmitInst_rr(Mips::FSUB_D, &Mips::MSA128DRegClass, Op0, Op1);
1674
0
  }
1675
0
  return 0;
1676
0
}
1677
1678
0
unsigned fastEmit_ISD_FSUB_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1679
0
  switch (VT.SimpleTy) {
1680
0
  case MVT::f32: return fastEmit_ISD_FSUB_MVT_f32_rr(RetVT, Op0, Op1);
1681
0
  case MVT::f64: return fastEmit_ISD_FSUB_MVT_f64_rr(RetVT, Op0, Op1);
1682
0
  case MVT::v4f32: return fastEmit_ISD_FSUB_MVT_v4f32_rr(RetVT, Op0, Op1);
1683
0
  case MVT::v2f64: return fastEmit_ISD_FSUB_MVT_v2f64_rr(RetVT, Op0, Op1);
1684
0
  default: return 0;
1685
0
  }
1686
0
}
1687
1688
// FastEmit functions for ISD::MUL.
1689
1690
0
unsigned fastEmit_ISD_MUL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1691
0
  if (RetVT.SimpleTy != MVT::i32)
1692
0
    return 0;
1693
0
  if ((Subtarget->inMips16Mode())) {
1694
0
    return fastEmitInst_rr(Mips::MultRxRyRz16, &Mips::CPU16RegsRegClass, Op0, Op1);
1695
0
  }
1696
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1697
0
    return fastEmitInst_rr(Mips::MUL_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1698
0
  }
1699
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
1700
0
    return fastEmitInst_rr(Mips::MUL_MM, &Mips::GPR32RegClass, Op0, Op1);
1701
0
  }
1702
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1703
0
    return fastEmitInst_rr(Mips::MUL_R6, &Mips::GPR32RegClass, Op0, Op1);
1704
0
  }
1705
0
  if ((Subtarget->hasMips32()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
1706
0
    return fastEmitInst_rr(Mips::MUL, &Mips::GPR32RegClass, Op0, Op1);
1707
0
  }
1708
0
  return 0;
1709
0
}
1710
1711
0
unsigned fastEmit_ISD_MUL_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1712
0
  if (RetVT.SimpleTy != MVT::i64)
1713
0
    return 0;
1714
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1715
0
    return fastEmitInst_rr(Mips::DMUL_R6, &Mips::GPR64RegClass, Op0, Op1);
1716
0
  }
1717
0
  if ((Subtarget->hasCnMips())) {
1718
0
    return fastEmitInst_rr(Mips::DMUL, &Mips::GPR64RegClass, Op0, Op1);
1719
0
  }
1720
0
  return 0;
1721
0
}
1722
1723
0
unsigned fastEmit_ISD_MUL_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1724
0
  if (RetVT.SimpleTy != MVT::v16i8)
1725
0
    return 0;
1726
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1727
0
    return fastEmitInst_rr(Mips::MULV_B, &Mips::MSA128BRegClass, Op0, Op1);
1728
0
  }
1729
0
  return 0;
1730
0
}
1731
1732
0
unsigned fastEmit_ISD_MUL_MVT_v2i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1733
0
  if (RetVT.SimpleTy != MVT::v2i16)
1734
0
    return 0;
1735
0
  if ((Subtarget->hasDSPR2())) {
1736
0
    return fastEmitInst_rr(Mips::MUL_PH, &Mips::DSPRRegClass, Op0, Op1);
1737
0
  }
1738
0
  return 0;
1739
0
}
1740
1741
0
unsigned fastEmit_ISD_MUL_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1742
0
  if (RetVT.SimpleTy != MVT::v8i16)
1743
0
    return 0;
1744
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1745
0
    return fastEmitInst_rr(Mips::MULV_H, &Mips::MSA128HRegClass, Op0, Op1);
1746
0
  }
1747
0
  return 0;
1748
0
}
1749
1750
0
unsigned fastEmit_ISD_MUL_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1751
0
  if (RetVT.SimpleTy != MVT::v4i32)
1752
0
    return 0;
1753
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1754
0
    return fastEmitInst_rr(Mips::MULV_W, &Mips::MSA128WRegClass, Op0, Op1);
1755
0
  }
1756
0
  return 0;
1757
0
}
1758
1759
0
unsigned fastEmit_ISD_MUL_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1760
0
  if (RetVT.SimpleTy != MVT::v2i64)
1761
0
    return 0;
1762
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1763
0
    return fastEmitInst_rr(Mips::MULV_D, &Mips::MSA128DRegClass, Op0, Op1);
1764
0
  }
1765
0
  return 0;
1766
0
}
1767
1768
0
unsigned fastEmit_ISD_MUL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1769
0
  switch (VT.SimpleTy) {
1770
0
  case MVT::i32: return fastEmit_ISD_MUL_MVT_i32_rr(RetVT, Op0, Op1);
1771
0
  case MVT::i64: return fastEmit_ISD_MUL_MVT_i64_rr(RetVT, Op0, Op1);
1772
0
  case MVT::v16i8: return fastEmit_ISD_MUL_MVT_v16i8_rr(RetVT, Op0, Op1);
1773
0
  case MVT::v2i16: return fastEmit_ISD_MUL_MVT_v2i16_rr(RetVT, Op0, Op1);
1774
0
  case MVT::v8i16: return fastEmit_ISD_MUL_MVT_v8i16_rr(RetVT, Op0, Op1);
1775
0
  case MVT::v4i32: return fastEmit_ISD_MUL_MVT_v4i32_rr(RetVT, Op0, Op1);
1776
0
  case MVT::v2i64: return fastEmit_ISD_MUL_MVT_v2i64_rr(RetVT, Op0, Op1);
1777
0
  default: return 0;
1778
0
  }
1779
0
}
1780
1781
// FastEmit functions for ISD::MULHS.
1782
1783
0
unsigned fastEmit_ISD_MULHS_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1784
0
  if (RetVT.SimpleTy != MVT::i32)
1785
0
    return 0;
1786
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1787
0
    return fastEmitInst_rr(Mips::MUH_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1788
0
  }
1789
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1790
0
    return fastEmitInst_rr(Mips::MUH, &Mips::GPR32RegClass, Op0, Op1);
1791
0
  }
1792
0
  return 0;
1793
0
}
1794
1795
0
unsigned fastEmit_ISD_MULHS_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1796
0
  if (RetVT.SimpleTy != MVT::i64)
1797
0
    return 0;
1798
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1799
0
    return fastEmitInst_rr(Mips::DMUH, &Mips::GPR64RegClass, Op0, Op1);
1800
0
  }
1801
0
  return 0;
1802
0
}
1803
1804
0
unsigned fastEmit_ISD_MULHS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1805
0
  switch (VT.SimpleTy) {
1806
0
  case MVT::i32: return fastEmit_ISD_MULHS_MVT_i32_rr(RetVT, Op0, Op1);
1807
0
  case MVT::i64: return fastEmit_ISD_MULHS_MVT_i64_rr(RetVT, Op0, Op1);
1808
0
  default: return 0;
1809
0
  }
1810
0
}
1811
1812
// FastEmit functions for ISD::MULHU.
1813
1814
0
unsigned fastEmit_ISD_MULHU_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1815
0
  if (RetVT.SimpleTy != MVT::i32)
1816
0
    return 0;
1817
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1818
0
    return fastEmitInst_rr(Mips::MUHU_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1819
0
  }
1820
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1821
0
    return fastEmitInst_rr(Mips::MUHU, &Mips::GPR32RegClass, Op0, Op1);
1822
0
  }
1823
0
  return 0;
1824
0
}
1825
1826
0
unsigned fastEmit_ISD_MULHU_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1827
0
  if (RetVT.SimpleTy != MVT::i64)
1828
0
    return 0;
1829
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1830
0
    return fastEmitInst_rr(Mips::DMUHU, &Mips::GPR64RegClass, Op0, Op1);
1831
0
  }
1832
0
  return 0;
1833
0
}
1834
1835
0
unsigned fastEmit_ISD_MULHU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1836
0
  switch (VT.SimpleTy) {
1837
0
  case MVT::i32: return fastEmit_ISD_MULHU_MVT_i32_rr(RetVT, Op0, Op1);
1838
0
  case MVT::i64: return fastEmit_ISD_MULHU_MVT_i64_rr(RetVT, Op0, Op1);
1839
0
  default: return 0;
1840
0
  }
1841
0
}
1842
1843
// FastEmit functions for ISD::OR.
1844
1845
0
unsigned fastEmit_ISD_OR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1846
0
  if (RetVT.SimpleTy != MVT::i32)
1847
0
    return 0;
1848
0
  if ((Subtarget->inMips16Mode())) {
1849
0
    return fastEmitInst_rr(Mips::OrRxRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
1850
0
  }
1851
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1852
0
    return fastEmitInst_rr(Mips::OR_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1853
0
  }
1854
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
1855
0
    return fastEmitInst_rr(Mips::OR_MM, &Mips::GPR32RegClass, Op0, Op1);
1856
0
  }
1857
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1858
0
    return fastEmitInst_rr(Mips::OR, &Mips::GPR32RegClass, Op0, Op1);
1859
0
  }
1860
0
  return 0;
1861
0
}
1862
1863
0
unsigned fastEmit_ISD_OR_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1864
0
  if (RetVT.SimpleTy != MVT::i64)
1865
0
    return 0;
1866
0
  if ((Subtarget->isGP64bit()) && (!Subtarget->inMips16Mode())) {
1867
0
    return fastEmitInst_rr(Mips::OR64, &Mips::GPR64RegClass, Op0, Op1);
1868
0
  }
1869
0
  return 0;
1870
0
}
1871
1872
0
unsigned fastEmit_ISD_OR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1873
0
  if (RetVT.SimpleTy != MVT::v16i8)
1874
0
    return 0;
1875
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1876
0
    return fastEmitInst_rr(Mips::OR_V, &Mips::MSA128BRegClass, Op0, Op1);
1877
0
  }
1878
0
  return 0;
1879
0
}
1880
1881
0
unsigned fastEmit_ISD_OR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1882
0
  if (RetVT.SimpleTy != MVT::v8i16)
1883
0
    return 0;
1884
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1885
0
    return fastEmitInst_rr(Mips::OR_V_H_PSEUDO, &Mips::MSA128HRegClass, Op0, Op1);
1886
0
  }
1887
0
  return 0;
1888
0
}
1889
1890
0
unsigned fastEmit_ISD_OR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1891
0
  if (RetVT.SimpleTy != MVT::v4i32)
1892
0
    return 0;
1893
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1894
0
    return fastEmitInst_rr(Mips::OR_V_W_PSEUDO, &Mips::MSA128WRegClass, Op0, Op1);
1895
0
  }
1896
0
  return 0;
1897
0
}
1898
1899
0
unsigned fastEmit_ISD_OR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1900
0
  if (RetVT.SimpleTy != MVT::v2i64)
1901
0
    return 0;
1902
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1903
0
    return fastEmitInst_rr(Mips::OR_V_D_PSEUDO, &Mips::MSA128DRegClass, Op0, Op1);
1904
0
  }
1905
0
  return 0;
1906
0
}
1907
1908
0
unsigned fastEmit_ISD_OR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1909
0
  switch (VT.SimpleTy) {
1910
0
  case MVT::i32: return fastEmit_ISD_OR_MVT_i32_rr(RetVT, Op0, Op1);
1911
0
  case MVT::i64: return fastEmit_ISD_OR_MVT_i64_rr(RetVT, Op0, Op1);
1912
0
  case MVT::v16i8: return fastEmit_ISD_OR_MVT_v16i8_rr(RetVT, Op0, Op1);
1913
0
  case MVT::v8i16: return fastEmit_ISD_OR_MVT_v8i16_rr(RetVT, Op0, Op1);
1914
0
  case MVT::v4i32: return fastEmit_ISD_OR_MVT_v4i32_rr(RetVT, Op0, Op1);
1915
0
  case MVT::v2i64: return fastEmit_ISD_OR_MVT_v2i64_rr(RetVT, Op0, Op1);
1916
0
  default: return 0;
1917
0
  }
1918
0
}
1919
1920
// FastEmit functions for ISD::ROTR.
1921
1922
0
unsigned fastEmit_ISD_ROTR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1923
0
  if (RetVT.SimpleTy != MVT::i32)
1924
0
    return 0;
1925
0
  if ((Subtarget->inMicroMipsMode())) {
1926
0
    return fastEmitInst_rr(Mips::ROTRV_MM, &Mips::GPR32RegClass, Op0, Op1);
1927
0
  }
1928
0
  if ((Subtarget->hasMips32r2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1929
0
    return fastEmitInst_rr(Mips::ROTRV, &Mips::GPR32RegClass, Op0, Op1);
1930
0
  }
1931
0
  return 0;
1932
0
}
1933
1934
0
unsigned fastEmit_ISD_ROTR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
1935
0
  switch (VT.SimpleTy) {
1936
0
  case MVT::i32: return fastEmit_ISD_ROTR_MVT_i32_rr(RetVT, Op0, Op1);
1937
0
  default: return 0;
1938
0
  }
1939
0
}
1940
1941
// FastEmit functions for ISD::SDIV.
1942
1943
0
unsigned fastEmit_ISD_SDIV_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1944
0
  if (RetVT.SimpleTy != MVT::i32)
1945
0
    return 0;
1946
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
1947
0
    return fastEmitInst_rr(Mips::DIV_MMR6, &Mips::GPR32RegClass, Op0, Op1);
1948
0
  }
1949
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1950
0
    return fastEmitInst_rr(Mips::DIV, &Mips::GPR32RegClass, Op0, Op1);
1951
0
  }
1952
0
  return 0;
1953
0
}
1954
1955
0
unsigned fastEmit_ISD_SDIV_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1956
0
  if (RetVT.SimpleTy != MVT::i64)
1957
0
    return 0;
1958
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
1959
0
    return fastEmitInst_rr(Mips::DDIV, &Mips::GPR64RegClass, Op0, Op1);
1960
0
  }
1961
0
  return 0;
1962
0
}
1963
1964
0
unsigned fastEmit_ISD_SDIV_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1965
0
  if (RetVT.SimpleTy != MVT::v16i8)
1966
0
    return 0;
1967
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1968
0
    return fastEmitInst_rr(Mips::DIV_S_B, &Mips::MSA128BRegClass, Op0, Op1);
1969
0
  }
1970
0
  return 0;
1971
0
}
1972
1973
0
unsigned fastEmit_ISD_SDIV_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1974
0
  if (RetVT.SimpleTy != MVT::v8i16)
1975
0
    return 0;
1976
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1977
0
    return fastEmitInst_rr(Mips::DIV_S_H, &Mips::MSA128HRegClass, Op0, Op1);
1978
0
  }
1979
0
  return 0;
1980
0
}
1981
1982
0
unsigned fastEmit_ISD_SDIV_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1983
0
  if (RetVT.SimpleTy != MVT::v4i32)
1984
0
    return 0;
1985
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1986
0
    return fastEmitInst_rr(Mips::DIV_S_W, &Mips::MSA128WRegClass, Op0, Op1);
1987
0
  }
1988
0
  return 0;
1989
0
}
1990
1991
0
unsigned fastEmit_ISD_SDIV_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
1992
0
  if (RetVT.SimpleTy != MVT::v2i64)
1993
0
    return 0;
1994
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
1995
0
    return fastEmitInst_rr(Mips::DIV_S_D, &Mips::MSA128DRegClass, Op0, Op1);
1996
0
  }
1997
0
  return 0;
1998
0
}
1999
2000
0
unsigned fastEmit_ISD_SDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2001
0
  switch (VT.SimpleTy) {
2002
0
  case MVT::i32: return fastEmit_ISD_SDIV_MVT_i32_rr(RetVT, Op0, Op1);
2003
0
  case MVT::i64: return fastEmit_ISD_SDIV_MVT_i64_rr(RetVT, Op0, Op1);
2004
0
  case MVT::v16i8: return fastEmit_ISD_SDIV_MVT_v16i8_rr(RetVT, Op0, Op1);
2005
0
  case MVT::v8i16: return fastEmit_ISD_SDIV_MVT_v8i16_rr(RetVT, Op0, Op1);
2006
0
  case MVT::v4i32: return fastEmit_ISD_SDIV_MVT_v4i32_rr(RetVT, Op0, Op1);
2007
0
  case MVT::v2i64: return fastEmit_ISD_SDIV_MVT_v2i64_rr(RetVT, Op0, Op1);
2008
0
  default: return 0;
2009
0
  }
2010
0
}
2011
2012
// FastEmit functions for ISD::SHL.
2013
2014
0
unsigned fastEmit_ISD_SHL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2015
0
  if (RetVT.SimpleTy != MVT::i32)
2016
0
    return 0;
2017
0
  if ((Subtarget->inMicroMipsMode())) {
2018
0
    return fastEmitInst_rr(Mips::SLLV_MM, &Mips::GPR32RegClass, Op0, Op1);
2019
0
  }
2020
0
  if ((Subtarget->inMips16Mode())) {
2021
0
    return fastEmitInst_rr(Mips::SllvRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2022
0
  }
2023
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2024
0
    return fastEmitInst_rr(Mips::SLLV, &Mips::GPR32RegClass, Op0, Op1);
2025
0
  }
2026
0
  return 0;
2027
0
}
2028
2029
0
unsigned fastEmit_ISD_SHL_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2030
0
  if (RetVT.SimpleTy != MVT::v16i8)
2031
0
    return 0;
2032
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2033
0
    return fastEmitInst_rr(Mips::SLL_B, &Mips::MSA128BRegClass, Op0, Op1);
2034
0
  }
2035
0
  return 0;
2036
0
}
2037
2038
0
unsigned fastEmit_ISD_SHL_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2039
0
  if (RetVT.SimpleTy != MVT::v8i16)
2040
0
    return 0;
2041
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2042
0
    return fastEmitInst_rr(Mips::SLL_H, &Mips::MSA128HRegClass, Op0, Op1);
2043
0
  }
2044
0
  return 0;
2045
0
}
2046
2047
0
unsigned fastEmit_ISD_SHL_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2048
0
  if (RetVT.SimpleTy != MVT::v4i32)
2049
0
    return 0;
2050
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2051
0
    return fastEmitInst_rr(Mips::SLL_W, &Mips::MSA128WRegClass, Op0, Op1);
2052
0
  }
2053
0
  return 0;
2054
0
}
2055
2056
0
unsigned fastEmit_ISD_SHL_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2057
0
  if (RetVT.SimpleTy != MVT::v2i64)
2058
0
    return 0;
2059
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2060
0
    return fastEmitInst_rr(Mips::SLL_D, &Mips::MSA128DRegClass, Op0, Op1);
2061
0
  }
2062
0
  return 0;
2063
0
}
2064
2065
0
unsigned fastEmit_ISD_SHL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2066
0
  switch (VT.SimpleTy) {
2067
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_rr(RetVT, Op0, Op1);
2068
0
  case MVT::v16i8: return fastEmit_ISD_SHL_MVT_v16i8_rr(RetVT, Op0, Op1);
2069
0
  case MVT::v8i16: return fastEmit_ISD_SHL_MVT_v8i16_rr(RetVT, Op0, Op1);
2070
0
  case MVT::v4i32: return fastEmit_ISD_SHL_MVT_v4i32_rr(RetVT, Op0, Op1);
2071
0
  case MVT::v2i64: return fastEmit_ISD_SHL_MVT_v2i64_rr(RetVT, Op0, Op1);
2072
0
  default: return 0;
2073
0
  }
2074
0
}
2075
2076
// FastEmit functions for ISD::SMAX.
2077
2078
0
unsigned fastEmit_ISD_SMAX_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2079
0
  if (RetVT.SimpleTy != MVT::v16i8)
2080
0
    return 0;
2081
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2082
0
    return fastEmitInst_rr(Mips::MAX_S_B, &Mips::MSA128BRegClass, Op0, Op1);
2083
0
  }
2084
0
  return 0;
2085
0
}
2086
2087
0
unsigned fastEmit_ISD_SMAX_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2088
0
  if (RetVT.SimpleTy != MVT::v8i16)
2089
0
    return 0;
2090
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2091
0
    return fastEmitInst_rr(Mips::MAX_S_H, &Mips::MSA128HRegClass, Op0, Op1);
2092
0
  }
2093
0
  return 0;
2094
0
}
2095
2096
0
unsigned fastEmit_ISD_SMAX_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2097
0
  if (RetVT.SimpleTy != MVT::v4i32)
2098
0
    return 0;
2099
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2100
0
    return fastEmitInst_rr(Mips::MAX_S_W, &Mips::MSA128WRegClass, Op0, Op1);
2101
0
  }
2102
0
  return 0;
2103
0
}
2104
2105
0
unsigned fastEmit_ISD_SMAX_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2106
0
  if (RetVT.SimpleTy != MVT::v2i64)
2107
0
    return 0;
2108
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2109
0
    return fastEmitInst_rr(Mips::MAX_S_D, &Mips::MSA128DRegClass, Op0, Op1);
2110
0
  }
2111
0
  return 0;
2112
0
}
2113
2114
0
unsigned fastEmit_ISD_SMAX_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2115
0
  switch (VT.SimpleTy) {
2116
0
  case MVT::v16i8: return fastEmit_ISD_SMAX_MVT_v16i8_rr(RetVT, Op0, Op1);
2117
0
  case MVT::v8i16: return fastEmit_ISD_SMAX_MVT_v8i16_rr(RetVT, Op0, Op1);
2118
0
  case MVT::v4i32: return fastEmit_ISD_SMAX_MVT_v4i32_rr(RetVT, Op0, Op1);
2119
0
  case MVT::v2i64: return fastEmit_ISD_SMAX_MVT_v2i64_rr(RetVT, Op0, Op1);
2120
0
  default: return 0;
2121
0
  }
2122
0
}
2123
2124
// FastEmit functions for ISD::SMIN.
2125
2126
0
unsigned fastEmit_ISD_SMIN_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2127
0
  if (RetVT.SimpleTy != MVT::v16i8)
2128
0
    return 0;
2129
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2130
0
    return fastEmitInst_rr(Mips::MIN_S_B, &Mips::MSA128BRegClass, Op0, Op1);
2131
0
  }
2132
0
  return 0;
2133
0
}
2134
2135
0
unsigned fastEmit_ISD_SMIN_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2136
0
  if (RetVT.SimpleTy != MVT::v8i16)
2137
0
    return 0;
2138
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2139
0
    return fastEmitInst_rr(Mips::MIN_S_H, &Mips::MSA128HRegClass, Op0, Op1);
2140
0
  }
2141
0
  return 0;
2142
0
}
2143
2144
0
unsigned fastEmit_ISD_SMIN_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2145
0
  if (RetVT.SimpleTy != MVT::v4i32)
2146
0
    return 0;
2147
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2148
0
    return fastEmitInst_rr(Mips::MIN_S_W, &Mips::MSA128WRegClass, Op0, Op1);
2149
0
  }
2150
0
  return 0;
2151
0
}
2152
2153
0
unsigned fastEmit_ISD_SMIN_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2154
0
  if (RetVT.SimpleTy != MVT::v2i64)
2155
0
    return 0;
2156
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2157
0
    return fastEmitInst_rr(Mips::MIN_S_D, &Mips::MSA128DRegClass, Op0, Op1);
2158
0
  }
2159
0
  return 0;
2160
0
}
2161
2162
0
unsigned fastEmit_ISD_SMIN_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2163
0
  switch (VT.SimpleTy) {
2164
0
  case MVT::v16i8: return fastEmit_ISD_SMIN_MVT_v16i8_rr(RetVT, Op0, Op1);
2165
0
  case MVT::v8i16: return fastEmit_ISD_SMIN_MVT_v8i16_rr(RetVT, Op0, Op1);
2166
0
  case MVT::v4i32: return fastEmit_ISD_SMIN_MVT_v4i32_rr(RetVT, Op0, Op1);
2167
0
  case MVT::v2i64: return fastEmit_ISD_SMIN_MVT_v2i64_rr(RetVT, Op0, Op1);
2168
0
  default: return 0;
2169
0
  }
2170
0
}
2171
2172
// FastEmit functions for ISD::SRA.
2173
2174
0
unsigned fastEmit_ISD_SRA_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2175
0
  if (RetVT.SimpleTy != MVT::i32)
2176
0
    return 0;
2177
0
  if ((Subtarget->inMicroMipsMode())) {
2178
0
    return fastEmitInst_rr(Mips::SRAV_MM, &Mips::GPR32RegClass, Op0, Op1);
2179
0
  }
2180
0
  if ((Subtarget->inMips16Mode())) {
2181
0
    return fastEmitInst_rr(Mips::SravRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2182
0
  }
2183
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2184
0
    return fastEmitInst_rr(Mips::SRAV, &Mips::GPR32RegClass, Op0, Op1);
2185
0
  }
2186
0
  return 0;
2187
0
}
2188
2189
0
unsigned fastEmit_ISD_SRA_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2190
0
  if (RetVT.SimpleTy != MVT::v16i8)
2191
0
    return 0;
2192
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2193
0
    return fastEmitInst_rr(Mips::SRA_B, &Mips::MSA128BRegClass, Op0, Op1);
2194
0
  }
2195
0
  return 0;
2196
0
}
2197
2198
0
unsigned fastEmit_ISD_SRA_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2199
0
  if (RetVT.SimpleTy != MVT::v8i16)
2200
0
    return 0;
2201
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2202
0
    return fastEmitInst_rr(Mips::SRA_H, &Mips::MSA128HRegClass, Op0, Op1);
2203
0
  }
2204
0
  return 0;
2205
0
}
2206
2207
0
unsigned fastEmit_ISD_SRA_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2208
0
  if (RetVT.SimpleTy != MVT::v4i32)
2209
0
    return 0;
2210
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2211
0
    return fastEmitInst_rr(Mips::SRA_W, &Mips::MSA128WRegClass, Op0, Op1);
2212
0
  }
2213
0
  return 0;
2214
0
}
2215
2216
0
unsigned fastEmit_ISD_SRA_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2217
0
  if (RetVT.SimpleTy != MVT::v2i64)
2218
0
    return 0;
2219
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2220
0
    return fastEmitInst_rr(Mips::SRA_D, &Mips::MSA128DRegClass, Op0, Op1);
2221
0
  }
2222
0
  return 0;
2223
0
}
2224
2225
0
unsigned fastEmit_ISD_SRA_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2226
0
  switch (VT.SimpleTy) {
2227
0
  case MVT::i32: return fastEmit_ISD_SRA_MVT_i32_rr(RetVT, Op0, Op1);
2228
0
  case MVT::v16i8: return fastEmit_ISD_SRA_MVT_v16i8_rr(RetVT, Op0, Op1);
2229
0
  case MVT::v8i16: return fastEmit_ISD_SRA_MVT_v8i16_rr(RetVT, Op0, Op1);
2230
0
  case MVT::v4i32: return fastEmit_ISD_SRA_MVT_v4i32_rr(RetVT, Op0, Op1);
2231
0
  case MVT::v2i64: return fastEmit_ISD_SRA_MVT_v2i64_rr(RetVT, Op0, Op1);
2232
0
  default: return 0;
2233
0
  }
2234
0
}
2235
2236
// FastEmit functions for ISD::SREM.
2237
2238
0
unsigned fastEmit_ISD_SREM_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2239
0
  if (RetVT.SimpleTy != MVT::i32)
2240
0
    return 0;
2241
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2242
0
    return fastEmitInst_rr(Mips::MOD_MMR6, &Mips::GPR32RegClass, Op0, Op1);
2243
0
  }
2244
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2245
0
    return fastEmitInst_rr(Mips::MOD, &Mips::GPR32RegClass, Op0, Op1);
2246
0
  }
2247
0
  return 0;
2248
0
}
2249
2250
0
unsigned fastEmit_ISD_SREM_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2251
0
  if (RetVT.SimpleTy != MVT::i64)
2252
0
    return 0;
2253
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2254
0
    return fastEmitInst_rr(Mips::DMOD, &Mips::GPR64RegClass, Op0, Op1);
2255
0
  }
2256
0
  return 0;
2257
0
}
2258
2259
0
unsigned fastEmit_ISD_SREM_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2260
0
  if (RetVT.SimpleTy != MVT::v16i8)
2261
0
    return 0;
2262
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2263
0
    return fastEmitInst_rr(Mips::MOD_S_B, &Mips::MSA128BRegClass, Op0, Op1);
2264
0
  }
2265
0
  return 0;
2266
0
}
2267
2268
0
unsigned fastEmit_ISD_SREM_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2269
0
  if (RetVT.SimpleTy != MVT::v8i16)
2270
0
    return 0;
2271
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2272
0
    return fastEmitInst_rr(Mips::MOD_S_H, &Mips::MSA128HRegClass, Op0, Op1);
2273
0
  }
2274
0
  return 0;
2275
0
}
2276
2277
0
unsigned fastEmit_ISD_SREM_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2278
0
  if (RetVT.SimpleTy != MVT::v4i32)
2279
0
    return 0;
2280
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2281
0
    return fastEmitInst_rr(Mips::MOD_S_W, &Mips::MSA128WRegClass, Op0, Op1);
2282
0
  }
2283
0
  return 0;
2284
0
}
2285
2286
0
unsigned fastEmit_ISD_SREM_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2287
0
  if (RetVT.SimpleTy != MVT::v2i64)
2288
0
    return 0;
2289
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2290
0
    return fastEmitInst_rr(Mips::MOD_S_D, &Mips::MSA128DRegClass, Op0, Op1);
2291
0
  }
2292
0
  return 0;
2293
0
}
2294
2295
0
unsigned fastEmit_ISD_SREM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2296
0
  switch (VT.SimpleTy) {
2297
0
  case MVT::i32: return fastEmit_ISD_SREM_MVT_i32_rr(RetVT, Op0, Op1);
2298
0
  case MVT::i64: return fastEmit_ISD_SREM_MVT_i64_rr(RetVT, Op0, Op1);
2299
0
  case MVT::v16i8: return fastEmit_ISD_SREM_MVT_v16i8_rr(RetVT, Op0, Op1);
2300
0
  case MVT::v8i16: return fastEmit_ISD_SREM_MVT_v8i16_rr(RetVT, Op0, Op1);
2301
0
  case MVT::v4i32: return fastEmit_ISD_SREM_MVT_v4i32_rr(RetVT, Op0, Op1);
2302
0
  case MVT::v2i64: return fastEmit_ISD_SREM_MVT_v2i64_rr(RetVT, Op0, Op1);
2303
0
  default: return 0;
2304
0
  }
2305
0
}
2306
2307
// FastEmit functions for ISD::SRL.
2308
2309
0
unsigned fastEmit_ISD_SRL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2310
0
  if (RetVT.SimpleTy != MVT::i32)
2311
0
    return 0;
2312
0
  if ((Subtarget->inMicroMipsMode())) {
2313
0
    return fastEmitInst_rr(Mips::SRLV_MM, &Mips::GPR32RegClass, Op0, Op1);
2314
0
  }
2315
0
  if ((Subtarget->inMips16Mode())) {
2316
0
    return fastEmitInst_rr(Mips::SrlvRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2317
0
  }
2318
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2319
0
    return fastEmitInst_rr(Mips::SRLV, &Mips::GPR32RegClass, Op0, Op1);
2320
0
  }
2321
0
  return 0;
2322
0
}
2323
2324
0
unsigned fastEmit_ISD_SRL_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2325
0
  if (RetVT.SimpleTy != MVT::v16i8)
2326
0
    return 0;
2327
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2328
0
    return fastEmitInst_rr(Mips::SRL_B, &Mips::MSA128BRegClass, Op0, Op1);
2329
0
  }
2330
0
  return 0;
2331
0
}
2332
2333
0
unsigned fastEmit_ISD_SRL_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2334
0
  if (RetVT.SimpleTy != MVT::v8i16)
2335
0
    return 0;
2336
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2337
0
    return fastEmitInst_rr(Mips::SRL_H, &Mips::MSA128HRegClass, Op0, Op1);
2338
0
  }
2339
0
  return 0;
2340
0
}
2341
2342
0
unsigned fastEmit_ISD_SRL_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2343
0
  if (RetVT.SimpleTy != MVT::v4i32)
2344
0
    return 0;
2345
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2346
0
    return fastEmitInst_rr(Mips::SRL_W, &Mips::MSA128WRegClass, Op0, Op1);
2347
0
  }
2348
0
  return 0;
2349
0
}
2350
2351
0
unsigned fastEmit_ISD_SRL_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2352
0
  if (RetVT.SimpleTy != MVT::v2i64)
2353
0
    return 0;
2354
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2355
0
    return fastEmitInst_rr(Mips::SRL_D, &Mips::MSA128DRegClass, Op0, Op1);
2356
0
  }
2357
0
  return 0;
2358
0
}
2359
2360
0
unsigned fastEmit_ISD_SRL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2361
0
  switch (VT.SimpleTy) {
2362
0
  case MVT::i32: return fastEmit_ISD_SRL_MVT_i32_rr(RetVT, Op0, Op1);
2363
0
  case MVT::v16i8: return fastEmit_ISD_SRL_MVT_v16i8_rr(RetVT, Op0, Op1);
2364
0
  case MVT::v8i16: return fastEmit_ISD_SRL_MVT_v8i16_rr(RetVT, Op0, Op1);
2365
0
  case MVT::v4i32: return fastEmit_ISD_SRL_MVT_v4i32_rr(RetVT, Op0, Op1);
2366
0
  case MVT::v2i64: return fastEmit_ISD_SRL_MVT_v2i64_rr(RetVT, Op0, Op1);
2367
0
  default: return 0;
2368
0
  }
2369
0
}
2370
2371
// FastEmit functions for ISD::SUB.
2372
2373
0
unsigned fastEmit_ISD_SUB_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2374
0
  if (RetVT.SimpleTy != MVT::i32)
2375
0
    return 0;
2376
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2377
0
    return fastEmitInst_rr(Mips::SUBU16_MMR6, &Mips::GPRMM16RegClass, Op0, Op1);
2378
0
  }
2379
0
  if ((Subtarget->inMips16Mode())) {
2380
0
    return fastEmitInst_rr(Mips::SubuRxRyRz16, &Mips::CPU16RegsRegClass, Op0, Op1);
2381
0
  }
2382
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
2383
0
    return fastEmitInst_rr(Mips::SUBu_MM, &Mips::GPR32RegClass, Op0, Op1);
2384
0
  }
2385
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2386
0
    return fastEmitInst_rr(Mips::SUBu, &Mips::GPR32RegClass, Op0, Op1);
2387
0
  }
2388
0
  return 0;
2389
0
}
2390
2391
0
unsigned fastEmit_ISD_SUB_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2392
0
  if (RetVT.SimpleTy != MVT::i64)
2393
0
    return 0;
2394
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2395
0
    return fastEmitInst_rr(Mips::DSUBu, &Mips::GPR64RegClass, Op0, Op1);
2396
0
  }
2397
0
  return 0;
2398
0
}
2399
2400
0
unsigned fastEmit_ISD_SUB_MVT_v4i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2401
0
  if (RetVT.SimpleTy != MVT::v4i8)
2402
0
    return 0;
2403
0
  if ((Subtarget->hasDSP())) {
2404
0
    return fastEmitInst_rr(Mips::SUBU_QB, &Mips::DSPRRegClass, Op0, Op1);
2405
0
  }
2406
0
  return 0;
2407
0
}
2408
2409
0
unsigned fastEmit_ISD_SUB_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2410
0
  if (RetVT.SimpleTy != MVT::v16i8)
2411
0
    return 0;
2412
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2413
0
    return fastEmitInst_rr(Mips::SUBV_B, &Mips::MSA128BRegClass, Op0, Op1);
2414
0
  }
2415
0
  return 0;
2416
0
}
2417
2418
0
unsigned fastEmit_ISD_SUB_MVT_v2i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2419
0
  if (RetVT.SimpleTy != MVT::v2i16)
2420
0
    return 0;
2421
0
  if ((Subtarget->hasDSP())) {
2422
0
    return fastEmitInst_rr(Mips::SUBQ_PH, &Mips::DSPRRegClass, Op0, Op1);
2423
0
  }
2424
0
  return 0;
2425
0
}
2426
2427
0
unsigned fastEmit_ISD_SUB_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2428
0
  if (RetVT.SimpleTy != MVT::v8i16)
2429
0
    return 0;
2430
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2431
0
    return fastEmitInst_rr(Mips::SUBV_H, &Mips::MSA128HRegClass, Op0, Op1);
2432
0
  }
2433
0
  return 0;
2434
0
}
2435
2436
0
unsigned fastEmit_ISD_SUB_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2437
0
  if (RetVT.SimpleTy != MVT::v4i32)
2438
0
    return 0;
2439
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2440
0
    return fastEmitInst_rr(Mips::SUBV_W, &Mips::MSA128WRegClass, Op0, Op1);
2441
0
  }
2442
0
  return 0;
2443
0
}
2444
2445
0
unsigned fastEmit_ISD_SUB_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2446
0
  if (RetVT.SimpleTy != MVT::v2i64)
2447
0
    return 0;
2448
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2449
0
    return fastEmitInst_rr(Mips::SUBV_D, &Mips::MSA128DRegClass, Op0, Op1);
2450
0
  }
2451
0
  return 0;
2452
0
}
2453
2454
0
unsigned fastEmit_ISD_SUB_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2455
0
  switch (VT.SimpleTy) {
2456
0
  case MVT::i32: return fastEmit_ISD_SUB_MVT_i32_rr(RetVT, Op0, Op1);
2457
0
  case MVT::i64: return fastEmit_ISD_SUB_MVT_i64_rr(RetVT, Op0, Op1);
2458
0
  case MVT::v4i8: return fastEmit_ISD_SUB_MVT_v4i8_rr(RetVT, Op0, Op1);
2459
0
  case MVT::v16i8: return fastEmit_ISD_SUB_MVT_v16i8_rr(RetVT, Op0, Op1);
2460
0
  case MVT::v2i16: return fastEmit_ISD_SUB_MVT_v2i16_rr(RetVT, Op0, Op1);
2461
0
  case MVT::v8i16: return fastEmit_ISD_SUB_MVT_v8i16_rr(RetVT, Op0, Op1);
2462
0
  case MVT::v4i32: return fastEmit_ISD_SUB_MVT_v4i32_rr(RetVT, Op0, Op1);
2463
0
  case MVT::v2i64: return fastEmit_ISD_SUB_MVT_v2i64_rr(RetVT, Op0, Op1);
2464
0
  default: return 0;
2465
0
  }
2466
0
}
2467
2468
// FastEmit functions for ISD::SUBC.
2469
2470
0
unsigned fastEmit_ISD_SUBC_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2471
0
  if (RetVT.SimpleTy != MVT::i32)
2472
0
    return 0;
2473
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2474
0
    return fastEmitInst_rr(Mips::SUBU_MMR6, &Mips::GPR32RegClass, Op0, Op1);
2475
0
  }
2476
0
  if ((Subtarget->inMicroMipsMode())) {
2477
0
    return fastEmitInst_rr(Mips::SUBu_MM, &Mips::GPR32RegClass, Op0, Op1);
2478
0
  }
2479
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2480
0
    return fastEmitInst_rr(Mips::SUBu, &Mips::GPR32RegClass, Op0, Op1);
2481
0
  }
2482
0
  return 0;
2483
0
}
2484
2485
0
unsigned fastEmit_ISD_SUBC_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2486
0
  if (RetVT.SimpleTy != MVT::i64)
2487
0
    return 0;
2488
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (Subtarget->isGP64bit()) && (!Subtarget->inMicroMipsMode())) {
2489
0
    return fastEmitInst_rr(Mips::DSUBu, &Mips::GPR64RegClass, Op0, Op1);
2490
0
  }
2491
0
  return 0;
2492
0
}
2493
2494
0
unsigned fastEmit_ISD_SUBC_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2495
0
  switch (VT.SimpleTy) {
2496
0
  case MVT::i32: return fastEmit_ISD_SUBC_MVT_i32_rr(RetVT, Op0, Op1);
2497
0
  case MVT::i64: return fastEmit_ISD_SUBC_MVT_i64_rr(RetVT, Op0, Op1);
2498
0
  default: return 0;
2499
0
  }
2500
0
}
2501
2502
// FastEmit functions for ISD::UDIV.
2503
2504
0
unsigned fastEmit_ISD_UDIV_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2505
0
  if (RetVT.SimpleTy != MVT::i32)
2506
0
    return 0;
2507
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2508
0
    return fastEmitInst_rr(Mips::DIVU_MMR6, &Mips::GPR32RegClass, Op0, Op1);
2509
0
  }
2510
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2511
0
    return fastEmitInst_rr(Mips::DIVU, &Mips::GPR32RegClass, Op0, Op1);
2512
0
  }
2513
0
  return 0;
2514
0
}
2515
2516
0
unsigned fastEmit_ISD_UDIV_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2517
0
  if (RetVT.SimpleTy != MVT::i64)
2518
0
    return 0;
2519
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2520
0
    return fastEmitInst_rr(Mips::DDIVU, &Mips::GPR64RegClass, Op0, Op1);
2521
0
  }
2522
0
  return 0;
2523
0
}
2524
2525
0
unsigned fastEmit_ISD_UDIV_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2526
0
  if (RetVT.SimpleTy != MVT::v16i8)
2527
0
    return 0;
2528
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2529
0
    return fastEmitInst_rr(Mips::DIV_U_B, &Mips::MSA128BRegClass, Op0, Op1);
2530
0
  }
2531
0
  return 0;
2532
0
}
2533
2534
0
unsigned fastEmit_ISD_UDIV_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2535
0
  if (RetVT.SimpleTy != MVT::v8i16)
2536
0
    return 0;
2537
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2538
0
    return fastEmitInst_rr(Mips::DIV_U_H, &Mips::MSA128HRegClass, Op0, Op1);
2539
0
  }
2540
0
  return 0;
2541
0
}
2542
2543
0
unsigned fastEmit_ISD_UDIV_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2544
0
  if (RetVT.SimpleTy != MVT::v4i32)
2545
0
    return 0;
2546
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2547
0
    return fastEmitInst_rr(Mips::DIV_U_W, &Mips::MSA128WRegClass, Op0, Op1);
2548
0
  }
2549
0
  return 0;
2550
0
}
2551
2552
0
unsigned fastEmit_ISD_UDIV_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2553
0
  if (RetVT.SimpleTy != MVT::v2i64)
2554
0
    return 0;
2555
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2556
0
    return fastEmitInst_rr(Mips::DIV_U_D, &Mips::MSA128DRegClass, Op0, Op1);
2557
0
  }
2558
0
  return 0;
2559
0
}
2560
2561
0
unsigned fastEmit_ISD_UDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2562
0
  switch (VT.SimpleTy) {
2563
0
  case MVT::i32: return fastEmit_ISD_UDIV_MVT_i32_rr(RetVT, Op0, Op1);
2564
0
  case MVT::i64: return fastEmit_ISD_UDIV_MVT_i64_rr(RetVT, Op0, Op1);
2565
0
  case MVT::v16i8: return fastEmit_ISD_UDIV_MVT_v16i8_rr(RetVT, Op0, Op1);
2566
0
  case MVT::v8i16: return fastEmit_ISD_UDIV_MVT_v8i16_rr(RetVT, Op0, Op1);
2567
0
  case MVT::v4i32: return fastEmit_ISD_UDIV_MVT_v4i32_rr(RetVT, Op0, Op1);
2568
0
  case MVT::v2i64: return fastEmit_ISD_UDIV_MVT_v2i64_rr(RetVT, Op0, Op1);
2569
0
  default: return 0;
2570
0
  }
2571
0
}
2572
2573
// FastEmit functions for ISD::UMAX.
2574
2575
0
unsigned fastEmit_ISD_UMAX_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2576
0
  if (RetVT.SimpleTy != MVT::v16i8)
2577
0
    return 0;
2578
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2579
0
    return fastEmitInst_rr(Mips::MAX_U_B, &Mips::MSA128BRegClass, Op0, Op1);
2580
0
  }
2581
0
  return 0;
2582
0
}
2583
2584
0
unsigned fastEmit_ISD_UMAX_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2585
0
  if (RetVT.SimpleTy != MVT::v8i16)
2586
0
    return 0;
2587
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2588
0
    return fastEmitInst_rr(Mips::MAX_U_H, &Mips::MSA128HRegClass, Op0, Op1);
2589
0
  }
2590
0
  return 0;
2591
0
}
2592
2593
0
unsigned fastEmit_ISD_UMAX_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2594
0
  if (RetVT.SimpleTy != MVT::v4i32)
2595
0
    return 0;
2596
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2597
0
    return fastEmitInst_rr(Mips::MAX_U_W, &Mips::MSA128WRegClass, Op0, Op1);
2598
0
  }
2599
0
  return 0;
2600
0
}
2601
2602
0
unsigned fastEmit_ISD_UMAX_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2603
0
  if (RetVT.SimpleTy != MVT::v2i64)
2604
0
    return 0;
2605
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2606
0
    return fastEmitInst_rr(Mips::MAX_U_D, &Mips::MSA128DRegClass, Op0, Op1);
2607
0
  }
2608
0
  return 0;
2609
0
}
2610
2611
0
unsigned fastEmit_ISD_UMAX_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2612
0
  switch (VT.SimpleTy) {
2613
0
  case MVT::v16i8: return fastEmit_ISD_UMAX_MVT_v16i8_rr(RetVT, Op0, Op1);
2614
0
  case MVT::v8i16: return fastEmit_ISD_UMAX_MVT_v8i16_rr(RetVT, Op0, Op1);
2615
0
  case MVT::v4i32: return fastEmit_ISD_UMAX_MVT_v4i32_rr(RetVT, Op0, Op1);
2616
0
  case MVT::v2i64: return fastEmit_ISD_UMAX_MVT_v2i64_rr(RetVT, Op0, Op1);
2617
0
  default: return 0;
2618
0
  }
2619
0
}
2620
2621
// FastEmit functions for ISD::UMIN.
2622
2623
0
unsigned fastEmit_ISD_UMIN_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2624
0
  if (RetVT.SimpleTy != MVT::v16i8)
2625
0
    return 0;
2626
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2627
0
    return fastEmitInst_rr(Mips::MIN_U_B, &Mips::MSA128BRegClass, Op0, Op1);
2628
0
  }
2629
0
  return 0;
2630
0
}
2631
2632
0
unsigned fastEmit_ISD_UMIN_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2633
0
  if (RetVT.SimpleTy != MVT::v8i16)
2634
0
    return 0;
2635
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2636
0
    return fastEmitInst_rr(Mips::MIN_U_H, &Mips::MSA128HRegClass, Op0, Op1);
2637
0
  }
2638
0
  return 0;
2639
0
}
2640
2641
0
unsigned fastEmit_ISD_UMIN_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2642
0
  if (RetVT.SimpleTy != MVT::v4i32)
2643
0
    return 0;
2644
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2645
0
    return fastEmitInst_rr(Mips::MIN_U_W, &Mips::MSA128WRegClass, Op0, Op1);
2646
0
  }
2647
0
  return 0;
2648
0
}
2649
2650
0
unsigned fastEmit_ISD_UMIN_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2651
0
  if (RetVT.SimpleTy != MVT::v2i64)
2652
0
    return 0;
2653
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2654
0
    return fastEmitInst_rr(Mips::MIN_U_D, &Mips::MSA128DRegClass, Op0, Op1);
2655
0
  }
2656
0
  return 0;
2657
0
}
2658
2659
0
unsigned fastEmit_ISD_UMIN_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2660
0
  switch (VT.SimpleTy) {
2661
0
  case MVT::v16i8: return fastEmit_ISD_UMIN_MVT_v16i8_rr(RetVT, Op0, Op1);
2662
0
  case MVT::v8i16: return fastEmit_ISD_UMIN_MVT_v8i16_rr(RetVT, Op0, Op1);
2663
0
  case MVT::v4i32: return fastEmit_ISD_UMIN_MVT_v4i32_rr(RetVT, Op0, Op1);
2664
0
  case MVT::v2i64: return fastEmit_ISD_UMIN_MVT_v2i64_rr(RetVT, Op0, Op1);
2665
0
  default: return 0;
2666
0
  }
2667
0
}
2668
2669
// FastEmit functions for ISD::UREM.
2670
2671
0
unsigned fastEmit_ISD_UREM_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2672
0
  if (RetVT.SimpleTy != MVT::i32)
2673
0
    return 0;
2674
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2675
0
    return fastEmitInst_rr(Mips::MODU_MMR6, &Mips::GPR32RegClass, Op0, Op1);
2676
0
  }
2677
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2678
0
    return fastEmitInst_rr(Mips::MODU, &Mips::GPR32RegClass, Op0, Op1);
2679
0
  }
2680
0
  return 0;
2681
0
}
2682
2683
0
unsigned fastEmit_ISD_UREM_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2684
0
  if (RetVT.SimpleTy != MVT::i64)
2685
0
    return 0;
2686
0
  if ((Subtarget->hasMips64r6()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2687
0
    return fastEmitInst_rr(Mips::DMODU, &Mips::GPR64RegClass, Op0, Op1);
2688
0
  }
2689
0
  return 0;
2690
0
}
2691
2692
0
unsigned fastEmit_ISD_UREM_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2693
0
  if (RetVT.SimpleTy != MVT::v16i8)
2694
0
    return 0;
2695
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2696
0
    return fastEmitInst_rr(Mips::MOD_U_B, &Mips::MSA128BRegClass, Op0, Op1);
2697
0
  }
2698
0
  return 0;
2699
0
}
2700
2701
0
unsigned fastEmit_ISD_UREM_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2702
0
  if (RetVT.SimpleTy != MVT::v8i16)
2703
0
    return 0;
2704
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2705
0
    return fastEmitInst_rr(Mips::MOD_U_H, &Mips::MSA128HRegClass, Op0, Op1);
2706
0
  }
2707
0
  return 0;
2708
0
}
2709
2710
0
unsigned fastEmit_ISD_UREM_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2711
0
  if (RetVT.SimpleTy != MVT::v4i32)
2712
0
    return 0;
2713
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2714
0
    return fastEmitInst_rr(Mips::MOD_U_W, &Mips::MSA128WRegClass, Op0, Op1);
2715
0
  }
2716
0
  return 0;
2717
0
}
2718
2719
0
unsigned fastEmit_ISD_UREM_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2720
0
  if (RetVT.SimpleTy != MVT::v2i64)
2721
0
    return 0;
2722
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2723
0
    return fastEmitInst_rr(Mips::MOD_U_D, &Mips::MSA128DRegClass, Op0, Op1);
2724
0
  }
2725
0
  return 0;
2726
0
}
2727
2728
0
unsigned fastEmit_ISD_UREM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2729
0
  switch (VT.SimpleTy) {
2730
0
  case MVT::i32: return fastEmit_ISD_UREM_MVT_i32_rr(RetVT, Op0, Op1);
2731
0
  case MVT::i64: return fastEmit_ISD_UREM_MVT_i64_rr(RetVT, Op0, Op1);
2732
0
  case MVT::v16i8: return fastEmit_ISD_UREM_MVT_v16i8_rr(RetVT, Op0, Op1);
2733
0
  case MVT::v8i16: return fastEmit_ISD_UREM_MVT_v8i16_rr(RetVT, Op0, Op1);
2734
0
  case MVT::v4i32: return fastEmit_ISD_UREM_MVT_v4i32_rr(RetVT, Op0, Op1);
2735
0
  case MVT::v2i64: return fastEmit_ISD_UREM_MVT_v2i64_rr(RetVT, Op0, Op1);
2736
0
  default: return 0;
2737
0
  }
2738
0
}
2739
2740
// FastEmit functions for ISD::XOR.
2741
2742
0
unsigned fastEmit_ISD_XOR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2743
0
  if (RetVT.SimpleTy != MVT::i32)
2744
0
    return 0;
2745
0
  if ((Subtarget->inMips16Mode())) {
2746
0
    return fastEmitInst_rr(Mips::XorRxRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2747
0
  }
2748
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
2749
0
    return fastEmitInst_rr(Mips::XOR_MMR6, &Mips::GPR32RegClass, Op0, Op1);
2750
0
  }
2751
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6())) {
2752
0
    return fastEmitInst_rr(Mips::XOR_MM, &Mips::GPR32RegClass, Op0, Op1);
2753
0
  }
2754
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
2755
0
    return fastEmitInst_rr(Mips::XOR, &Mips::GPR32RegClass, Op0, Op1);
2756
0
  }
2757
0
  return 0;
2758
0
}
2759
2760
0
unsigned fastEmit_ISD_XOR_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2761
0
  if (RetVT.SimpleTy != MVT::i64)
2762
0
    return 0;
2763
0
  if ((Subtarget->isGP64bit()) && (!Subtarget->inMips16Mode())) {
2764
0
    return fastEmitInst_rr(Mips::XOR64, &Mips::GPR64RegClass, Op0, Op1);
2765
0
  }
2766
0
  return 0;
2767
0
}
2768
2769
0
unsigned fastEmit_ISD_XOR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2770
0
  if (RetVT.SimpleTy != MVT::v16i8)
2771
0
    return 0;
2772
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2773
0
    return fastEmitInst_rr(Mips::XOR_V, &Mips::MSA128BRegClass, Op0, Op1);
2774
0
  }
2775
0
  return 0;
2776
0
}
2777
2778
0
unsigned fastEmit_ISD_XOR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2779
0
  if (RetVT.SimpleTy != MVT::v8i16)
2780
0
    return 0;
2781
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2782
0
    return fastEmitInst_rr(Mips::XOR_V_H_PSEUDO, &Mips::MSA128HRegClass, Op0, Op1);
2783
0
  }
2784
0
  return 0;
2785
0
}
2786
2787
0
unsigned fastEmit_ISD_XOR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2788
0
  if (RetVT.SimpleTy != MVT::v4i32)
2789
0
    return 0;
2790
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2791
0
    return fastEmitInst_rr(Mips::XOR_V_W_PSEUDO, &Mips::MSA128WRegClass, Op0, Op1);
2792
0
  }
2793
0
  return 0;
2794
0
}
2795
2796
0
unsigned fastEmit_ISD_XOR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2797
0
  if (RetVT.SimpleTy != MVT::v2i64)
2798
0
    return 0;
2799
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2800
0
    return fastEmitInst_rr(Mips::XOR_V_D_PSEUDO, &Mips::MSA128DRegClass, Op0, Op1);
2801
0
  }
2802
0
  return 0;
2803
0
}
2804
2805
0
unsigned fastEmit_ISD_XOR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2806
0
  switch (VT.SimpleTy) {
2807
0
  case MVT::i32: return fastEmit_ISD_XOR_MVT_i32_rr(RetVT, Op0, Op1);
2808
0
  case MVT::i64: return fastEmit_ISD_XOR_MVT_i64_rr(RetVT, Op0, Op1);
2809
0
  case MVT::v16i8: return fastEmit_ISD_XOR_MVT_v16i8_rr(RetVT, Op0, Op1);
2810
0
  case MVT::v8i16: return fastEmit_ISD_XOR_MVT_v8i16_rr(RetVT, Op0, Op1);
2811
0
  case MVT::v4i32: return fastEmit_ISD_XOR_MVT_v4i32_rr(RetVT, Op0, Op1);
2812
0
  case MVT::v2i64: return fastEmit_ISD_XOR_MVT_v2i64_rr(RetVT, Op0, Op1);
2813
0
  default: return 0;
2814
0
  }
2815
0
}
2816
2817
// FastEmit functions for MipsISD::BuildPairF64.
2818
2819
0
unsigned fastEmit_MipsISD_BuildPairF64_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2820
0
  if (RetVT.SimpleTy != MVT::f64)
2821
0
    return 0;
2822
0
  if ((Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMips16Mode())) {
2823
0
    return fastEmitInst_rr(Mips::BuildPairF64_64, &Mips::FGR64RegClass, Op0, Op1);
2824
0
  }
2825
0
  if ((!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMips16Mode())) {
2826
0
    return fastEmitInst_rr(Mips::BuildPairF64, &Mips::AFGR64RegClass, Op0, Op1);
2827
0
  }
2828
0
  return 0;
2829
0
}
2830
2831
0
unsigned fastEmit_MipsISD_BuildPairF64_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2832
0
  switch (VT.SimpleTy) {
2833
0
  case MVT::i32: return fastEmit_MipsISD_BuildPairF64_MVT_i32_rr(RetVT, Op0, Op1);
2834
0
  default: return 0;
2835
0
  }
2836
0
}
2837
2838
// FastEmit functions for MipsISD::DivRem.
2839
2840
0
unsigned fastEmit_MipsISD_DivRem_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2841
0
  if (RetVT.SimpleTy != MVT::Untyped)
2842
0
    return 0;
2843
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2844
0
    return fastEmitInst_rr(Mips::SDIV_MM_Pseudo, &Mips::ACC64RegClass, Op0, Op1);
2845
0
  }
2846
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2847
0
    return fastEmitInst_rr(Mips::PseudoSDIV, &Mips::ACC64RegClass, Op0, Op1);
2848
0
  }
2849
0
  return 0;
2850
0
}
2851
2852
0
unsigned fastEmit_MipsISD_DivRem_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2853
0
  if (RetVT.SimpleTy != MVT::Untyped)
2854
0
    return 0;
2855
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2856
0
    return fastEmitInst_rr(Mips::PseudoDSDIV, &Mips::ACC128RegClass, Op0, Op1);
2857
0
  }
2858
0
  return 0;
2859
0
}
2860
2861
0
unsigned fastEmit_MipsISD_DivRem_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2862
0
  switch (VT.SimpleTy) {
2863
0
  case MVT::i32: return fastEmit_MipsISD_DivRem_MVT_i32_rr(RetVT, Op0, Op1);
2864
0
  case MVT::i64: return fastEmit_MipsISD_DivRem_MVT_i64_rr(RetVT, Op0, Op1);
2865
0
  default: return 0;
2866
0
  }
2867
0
}
2868
2869
// FastEmit functions for MipsISD::DivRem16.
2870
2871
0
unsigned fastEmit_MipsISD_DivRem16_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2872
0
  if (RetVT.SimpleTy != MVT::isVoid)
2873
0
    return 0;
2874
0
  if ((Subtarget->inMips16Mode())) {
2875
0
    return fastEmitInst_rr(Mips::DivRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2876
0
  }
2877
0
  return 0;
2878
0
}
2879
2880
0
unsigned fastEmit_MipsISD_DivRem16_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2881
0
  switch (VT.SimpleTy) {
2882
0
  case MVT::i32: return fastEmit_MipsISD_DivRem16_MVT_i32_rr(RetVT, Op0, Op1);
2883
0
  default: return 0;
2884
0
  }
2885
0
}
2886
2887
// FastEmit functions for MipsISD::DivRemU.
2888
2889
0
unsigned fastEmit_MipsISD_DivRemU_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2890
0
  if (RetVT.SimpleTy != MVT::Untyped)
2891
0
    return 0;
2892
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2893
0
    return fastEmitInst_rr(Mips::UDIV_MM_Pseudo, &Mips::ACC64RegClass, Op0, Op1);
2894
0
  }
2895
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2896
0
    return fastEmitInst_rr(Mips::PseudoUDIV, &Mips::ACC64RegClass, Op0, Op1);
2897
0
  }
2898
0
  return 0;
2899
0
}
2900
2901
0
unsigned fastEmit_MipsISD_DivRemU_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2902
0
  if (RetVT.SimpleTy != MVT::Untyped)
2903
0
    return 0;
2904
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
2905
0
    return fastEmitInst_rr(Mips::PseudoDUDIV, &Mips::ACC128RegClass, Op0, Op1);
2906
0
  }
2907
0
  return 0;
2908
0
}
2909
2910
0
unsigned fastEmit_MipsISD_DivRemU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2911
0
  switch (VT.SimpleTy) {
2912
0
  case MVT::i32: return fastEmit_MipsISD_DivRemU_MVT_i32_rr(RetVT, Op0, Op1);
2913
0
  case MVT::i64: return fastEmit_MipsISD_DivRemU_MVT_i64_rr(RetVT, Op0, Op1);
2914
0
  default: return 0;
2915
0
  }
2916
0
}
2917
2918
// FastEmit functions for MipsISD::DivRemU16.
2919
2920
0
unsigned fastEmit_MipsISD_DivRemU16_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2921
0
  if (RetVT.SimpleTy != MVT::isVoid)
2922
0
    return 0;
2923
0
  if ((Subtarget->inMips16Mode())) {
2924
0
    return fastEmitInst_rr(Mips::DivuRxRy16, &Mips::CPU16RegsRegClass, Op0, Op1);
2925
0
  }
2926
0
  return 0;
2927
0
}
2928
2929
0
unsigned fastEmit_MipsISD_DivRemU16_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2930
0
  switch (VT.SimpleTy) {
2931
0
  case MVT::i32: return fastEmit_MipsISD_DivRemU16_MVT_i32_rr(RetVT, Op0, Op1);
2932
0
  default: return 0;
2933
0
  }
2934
0
}
2935
2936
// FastEmit functions for MipsISD::EH_RETURN.
2937
2938
0
unsigned fastEmit_MipsISD_EH_RETURN_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2939
0
  if (RetVT.SimpleTy != MVT::isVoid)
2940
0
    return 0;
2941
0
  return fastEmitInst_rr(Mips::MIPSeh_return32, &Mips::GPR32RegClass, Op0, Op1);
2942
0
}
2943
2944
0
unsigned fastEmit_MipsISD_EH_RETURN_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2945
0
  if (RetVT.SimpleTy != MVT::isVoid)
2946
0
    return 0;
2947
0
  return fastEmitInst_rr(Mips::MIPSeh_return64, &Mips::GPR64RegClass, Op0, Op1);
2948
0
}
2949
2950
0
unsigned fastEmit_MipsISD_EH_RETURN_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2951
0
  switch (VT.SimpleTy) {
2952
0
  case MVT::i32: return fastEmit_MipsISD_EH_RETURN_MVT_i32_rr(RetVT, Op0, Op1);
2953
0
  case MVT::i64: return fastEmit_MipsISD_EH_RETURN_MVT_i64_rr(RetVT, Op0, Op1);
2954
0
  default: return 0;
2955
0
  }
2956
0
}
2957
2958
// FastEmit functions for MipsISD::ILVEV.
2959
2960
0
unsigned fastEmit_MipsISD_ILVEV_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2961
0
  if (RetVT.SimpleTy != MVT::v16i8)
2962
0
    return 0;
2963
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2964
0
    return fastEmitInst_rr(Mips::ILVEV_B, &Mips::MSA128BRegClass, Op0, Op1);
2965
0
  }
2966
0
  return 0;
2967
0
}
2968
2969
0
unsigned fastEmit_MipsISD_ILVEV_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2970
0
  if (RetVT.SimpleTy != MVT::v8i16)
2971
0
    return 0;
2972
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2973
0
    return fastEmitInst_rr(Mips::ILVEV_H, &Mips::MSA128HRegClass, Op0, Op1);
2974
0
  }
2975
0
  return 0;
2976
0
}
2977
2978
0
unsigned fastEmit_MipsISD_ILVEV_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2979
0
  if (RetVT.SimpleTy != MVT::v4i32)
2980
0
    return 0;
2981
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2982
0
    return fastEmitInst_rr(Mips::ILVEV_W, &Mips::MSA128WRegClass, Op0, Op1);
2983
0
  }
2984
0
  return 0;
2985
0
}
2986
2987
0
unsigned fastEmit_MipsISD_ILVEV_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
2988
0
  if (RetVT.SimpleTy != MVT::v2i64)
2989
0
    return 0;
2990
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
2991
0
    return fastEmitInst_rr(Mips::ILVEV_D, &Mips::MSA128DRegClass, Op0, Op1);
2992
0
  }
2993
0
  return 0;
2994
0
}
2995
2996
0
unsigned fastEmit_MipsISD_ILVEV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
2997
0
  switch (VT.SimpleTy) {
2998
0
  case MVT::v16i8: return fastEmit_MipsISD_ILVEV_MVT_v16i8_rr(RetVT, Op0, Op1);
2999
0
  case MVT::v8i16: return fastEmit_MipsISD_ILVEV_MVT_v8i16_rr(RetVT, Op0, Op1);
3000
0
  case MVT::v4i32: return fastEmit_MipsISD_ILVEV_MVT_v4i32_rr(RetVT, Op0, Op1);
3001
0
  case MVT::v2i64: return fastEmit_MipsISD_ILVEV_MVT_v2i64_rr(RetVT, Op0, Op1);
3002
0
  default: return 0;
3003
0
  }
3004
0
}
3005
3006
// FastEmit functions for MipsISD::ILVL.
3007
3008
0
unsigned fastEmit_MipsISD_ILVL_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3009
0
  if (RetVT.SimpleTy != MVT::v16i8)
3010
0
    return 0;
3011
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3012
0
    return fastEmitInst_rr(Mips::ILVL_B, &Mips::MSA128BRegClass, Op0, Op1);
3013
0
  }
3014
0
  return 0;
3015
0
}
3016
3017
0
unsigned fastEmit_MipsISD_ILVL_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3018
0
  if (RetVT.SimpleTy != MVT::v8i16)
3019
0
    return 0;
3020
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3021
0
    return fastEmitInst_rr(Mips::ILVL_H, &Mips::MSA128HRegClass, Op0, Op1);
3022
0
  }
3023
0
  return 0;
3024
0
}
3025
3026
0
unsigned fastEmit_MipsISD_ILVL_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3027
0
  if (RetVT.SimpleTy != MVT::v4i32)
3028
0
    return 0;
3029
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3030
0
    return fastEmitInst_rr(Mips::ILVL_W, &Mips::MSA128WRegClass, Op0, Op1);
3031
0
  }
3032
0
  return 0;
3033
0
}
3034
3035
0
unsigned fastEmit_MipsISD_ILVL_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3036
0
  if (RetVT.SimpleTy != MVT::v2i64)
3037
0
    return 0;
3038
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3039
0
    return fastEmitInst_rr(Mips::ILVL_D, &Mips::MSA128DRegClass, Op0, Op1);
3040
0
  }
3041
0
  return 0;
3042
0
}
3043
3044
0
unsigned fastEmit_MipsISD_ILVL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3045
0
  switch (VT.SimpleTy) {
3046
0
  case MVT::v16i8: return fastEmit_MipsISD_ILVL_MVT_v16i8_rr(RetVT, Op0, Op1);
3047
0
  case MVT::v8i16: return fastEmit_MipsISD_ILVL_MVT_v8i16_rr(RetVT, Op0, Op1);
3048
0
  case MVT::v4i32: return fastEmit_MipsISD_ILVL_MVT_v4i32_rr(RetVT, Op0, Op1);
3049
0
  case MVT::v2i64: return fastEmit_MipsISD_ILVL_MVT_v2i64_rr(RetVT, Op0, Op1);
3050
0
  default: return 0;
3051
0
  }
3052
0
}
3053
3054
// FastEmit functions for MipsISD::ILVOD.
3055
3056
0
unsigned fastEmit_MipsISD_ILVOD_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3057
0
  if (RetVT.SimpleTy != MVT::v16i8)
3058
0
    return 0;
3059
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3060
0
    return fastEmitInst_rr(Mips::ILVOD_B, &Mips::MSA128BRegClass, Op0, Op1);
3061
0
  }
3062
0
  return 0;
3063
0
}
3064
3065
0
unsigned fastEmit_MipsISD_ILVOD_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3066
0
  if (RetVT.SimpleTy != MVT::v8i16)
3067
0
    return 0;
3068
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3069
0
    return fastEmitInst_rr(Mips::ILVOD_H, &Mips::MSA128HRegClass, Op0, Op1);
3070
0
  }
3071
0
  return 0;
3072
0
}
3073
3074
0
unsigned fastEmit_MipsISD_ILVOD_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3075
0
  if (RetVT.SimpleTy != MVT::v4i32)
3076
0
    return 0;
3077
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3078
0
    return fastEmitInst_rr(Mips::ILVOD_W, &Mips::MSA128WRegClass, Op0, Op1);
3079
0
  }
3080
0
  return 0;
3081
0
}
3082
3083
0
unsigned fastEmit_MipsISD_ILVOD_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3084
0
  if (RetVT.SimpleTy != MVT::v2i64)
3085
0
    return 0;
3086
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3087
0
    return fastEmitInst_rr(Mips::ILVOD_D, &Mips::MSA128DRegClass, Op0, Op1);
3088
0
  }
3089
0
  return 0;
3090
0
}
3091
3092
0
unsigned fastEmit_MipsISD_ILVOD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3093
0
  switch (VT.SimpleTy) {
3094
0
  case MVT::v16i8: return fastEmit_MipsISD_ILVOD_MVT_v16i8_rr(RetVT, Op0, Op1);
3095
0
  case MVT::v8i16: return fastEmit_MipsISD_ILVOD_MVT_v8i16_rr(RetVT, Op0, Op1);
3096
0
  case MVT::v4i32: return fastEmit_MipsISD_ILVOD_MVT_v4i32_rr(RetVT, Op0, Op1);
3097
0
  case MVT::v2i64: return fastEmit_MipsISD_ILVOD_MVT_v2i64_rr(RetVT, Op0, Op1);
3098
0
  default: return 0;
3099
0
  }
3100
0
}
3101
3102
// FastEmit functions for MipsISD::ILVR.
3103
3104
0
unsigned fastEmit_MipsISD_ILVR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3105
0
  if (RetVT.SimpleTy != MVT::v16i8)
3106
0
    return 0;
3107
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3108
0
    return fastEmitInst_rr(Mips::ILVR_B, &Mips::MSA128BRegClass, Op0, Op1);
3109
0
  }
3110
0
  return 0;
3111
0
}
3112
3113
0
unsigned fastEmit_MipsISD_ILVR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3114
0
  if (RetVT.SimpleTy != MVT::v8i16)
3115
0
    return 0;
3116
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3117
0
    return fastEmitInst_rr(Mips::ILVR_H, &Mips::MSA128HRegClass, Op0, Op1);
3118
0
  }
3119
0
  return 0;
3120
0
}
3121
3122
0
unsigned fastEmit_MipsISD_ILVR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3123
0
  if (RetVT.SimpleTy != MVT::v4i32)
3124
0
    return 0;
3125
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3126
0
    return fastEmitInst_rr(Mips::ILVR_W, &Mips::MSA128WRegClass, Op0, Op1);
3127
0
  }
3128
0
  return 0;
3129
0
}
3130
3131
0
unsigned fastEmit_MipsISD_ILVR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3132
0
  if (RetVT.SimpleTy != MVT::v2i64)
3133
0
    return 0;
3134
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3135
0
    return fastEmitInst_rr(Mips::ILVR_D, &Mips::MSA128DRegClass, Op0, Op1);
3136
0
  }
3137
0
  return 0;
3138
0
}
3139
3140
0
unsigned fastEmit_MipsISD_ILVR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3141
0
  switch (VT.SimpleTy) {
3142
0
  case MVT::v16i8: return fastEmit_MipsISD_ILVR_MVT_v16i8_rr(RetVT, Op0, Op1);
3143
0
  case MVT::v8i16: return fastEmit_MipsISD_ILVR_MVT_v8i16_rr(RetVT, Op0, Op1);
3144
0
  case MVT::v4i32: return fastEmit_MipsISD_ILVR_MVT_v4i32_rr(RetVT, Op0, Op1);
3145
0
  case MVT::v2i64: return fastEmit_MipsISD_ILVR_MVT_v2i64_rr(RetVT, Op0, Op1);
3146
0
  default: return 0;
3147
0
  }
3148
0
}
3149
3150
// FastEmit functions for MipsISD::MTLOHI.
3151
3152
0
unsigned fastEmit_MipsISD_MTLOHI_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3153
0
  if (RetVT.SimpleTy != MVT::Untyped)
3154
0
    return 0;
3155
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6())) {
3156
0
    return fastEmitInst_rr(Mips::PseudoMTLOHI_MM, &Mips::ACC64RegClass, Op0, Op1);
3157
0
  }
3158
0
  if ((Subtarget->hasDSP()) && (!Subtarget->inMips16Mode())) {
3159
0
    return fastEmitInst_rr(Mips::PseudoMTLOHI_DSP, &Mips::ACC64DSPRegClass, Op0, Op1);
3160
0
  }
3161
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3162
0
    return fastEmitInst_rr(Mips::PseudoMTLOHI, &Mips::ACC64RegClass, Op0, Op1);
3163
0
  }
3164
0
  return 0;
3165
0
}
3166
3167
0
unsigned fastEmit_MipsISD_MTLOHI_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3168
0
  if (RetVT.SimpleTy != MVT::Untyped)
3169
0
    return 0;
3170
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3171
0
    return fastEmitInst_rr(Mips::PseudoMTLOHI64, &Mips::ACC128RegClass, Op0, Op1);
3172
0
  }
3173
0
  return 0;
3174
0
}
3175
3176
0
unsigned fastEmit_MipsISD_MTLOHI_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3177
0
  switch (VT.SimpleTy) {
3178
0
  case MVT::i32: return fastEmit_MipsISD_MTLOHI_MVT_i32_rr(RetVT, Op0, Op1);
3179
0
  case MVT::i64: return fastEmit_MipsISD_MTLOHI_MVT_i64_rr(RetVT, Op0, Op1);
3180
0
  default: return 0;
3181
0
  }
3182
0
}
3183
3184
// FastEmit functions for MipsISD::Mult.
3185
3186
0
unsigned fastEmit_MipsISD_Mult_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3187
0
  if (RetVT.SimpleTy != MVT::Untyped)
3188
0
    return 0;
3189
0
  if ((Subtarget->hasDSP()) && (Subtarget->inMicroMipsMode())) {
3190
0
    return fastEmitInst_rr(Mips::MULT_DSP_MM, &Mips::ACC64DSPRegClass, Op0, Op1);
3191
0
  }
3192
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6())) {
3193
0
    return fastEmitInst_rr(Mips::PseudoMULT_MM, &Mips::ACC64RegClass, Op0, Op1);
3194
0
  }
3195
0
  if ((Subtarget->hasDSP())) {
3196
0
    return fastEmitInst_rr(Mips::MULT_DSP, &Mips::ACC64DSPRegClass, Op0, Op1);
3197
0
  }
3198
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3199
0
    return fastEmitInst_rr(Mips::PseudoMULT, &Mips::ACC64RegClass, Op0, Op1);
3200
0
  }
3201
0
  return 0;
3202
0
}
3203
3204
0
unsigned fastEmit_MipsISD_Mult_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3205
0
  if (RetVT.SimpleTy != MVT::Untyped)
3206
0
    return 0;
3207
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3208
0
    return fastEmitInst_rr(Mips::PseudoDMULT, &Mips::ACC128RegClass, Op0, Op1);
3209
0
  }
3210
0
  return 0;
3211
0
}
3212
3213
0
unsigned fastEmit_MipsISD_Mult_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3214
0
  switch (VT.SimpleTy) {
3215
0
  case MVT::i32: return fastEmit_MipsISD_Mult_MVT_i32_rr(RetVT, Op0, Op1);
3216
0
  case MVT::i64: return fastEmit_MipsISD_Mult_MVT_i64_rr(RetVT, Op0, Op1);
3217
0
  default: return 0;
3218
0
  }
3219
0
}
3220
3221
// FastEmit functions for MipsISD::Multu.
3222
3223
0
unsigned fastEmit_MipsISD_Multu_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3224
0
  if (RetVT.SimpleTy != MVT::Untyped)
3225
0
    return 0;
3226
0
  if ((Subtarget->hasDSP()) && (Subtarget->inMicroMipsMode())) {
3227
0
    return fastEmitInst_rr(Mips::MULTU_DSP_MM, &Mips::ACC64DSPRegClass, Op0, Op1);
3228
0
  }
3229
0
  if ((Subtarget->inMicroMipsMode()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6())) {
3230
0
    return fastEmitInst_rr(Mips::PseudoMULTu_MM, &Mips::ACC64RegClass, Op0, Op1);
3231
0
  }
3232
0
  if ((Subtarget->hasDSP())) {
3233
0
    return fastEmitInst_rr(Mips::MULTU_DSP, &Mips::ACC64DSPRegClass, Op0, Op1);
3234
0
  }
3235
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->hasDSP()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3236
0
    return fastEmitInst_rr(Mips::PseudoMULTu, &Mips::ACC64RegClass, Op0, Op1);
3237
0
  }
3238
0
  return 0;
3239
0
}
3240
3241
0
unsigned fastEmit_MipsISD_Multu_MVT_i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3242
0
  if (RetVT.SimpleTy != MVT::Untyped)
3243
0
    return 0;
3244
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->hasMips32r6()) && (!Subtarget->hasMips64r6())) {
3245
0
    return fastEmitInst_rr(Mips::PseudoDMULTu, &Mips::ACC128RegClass, Op0, Op1);
3246
0
  }
3247
0
  return 0;
3248
0
}
3249
3250
0
unsigned fastEmit_MipsISD_Multu_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3251
0
  switch (VT.SimpleTy) {
3252
0
  case MVT::i32: return fastEmit_MipsISD_Multu_MVT_i32_rr(RetVT, Op0, Op1);
3253
0
  case MVT::i64: return fastEmit_MipsISD_Multu_MVT_i64_rr(RetVT, Op0, Op1);
3254
0
  default: return 0;
3255
0
  }
3256
0
}
3257
3258
// FastEmit functions for MipsISD::PCKEV.
3259
3260
0
unsigned fastEmit_MipsISD_PCKEV_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3261
0
  if (RetVT.SimpleTy != MVT::v16i8)
3262
0
    return 0;
3263
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3264
0
    return fastEmitInst_rr(Mips::PCKEV_B, &Mips::MSA128BRegClass, Op0, Op1);
3265
0
  }
3266
0
  return 0;
3267
0
}
3268
3269
0
unsigned fastEmit_MipsISD_PCKEV_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3270
0
  if (RetVT.SimpleTy != MVT::v8i16)
3271
0
    return 0;
3272
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3273
0
    return fastEmitInst_rr(Mips::PCKEV_H, &Mips::MSA128HRegClass, Op0, Op1);
3274
0
  }
3275
0
  return 0;
3276
0
}
3277
3278
0
unsigned fastEmit_MipsISD_PCKEV_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3279
0
  if (RetVT.SimpleTy != MVT::v4i32)
3280
0
    return 0;
3281
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3282
0
    return fastEmitInst_rr(Mips::PCKEV_W, &Mips::MSA128WRegClass, Op0, Op1);
3283
0
  }
3284
0
  return 0;
3285
0
}
3286
3287
0
unsigned fastEmit_MipsISD_PCKEV_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3288
0
  if (RetVT.SimpleTy != MVT::v2i64)
3289
0
    return 0;
3290
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3291
0
    return fastEmitInst_rr(Mips::PCKEV_D, &Mips::MSA128DRegClass, Op0, Op1);
3292
0
  }
3293
0
  return 0;
3294
0
}
3295
3296
0
unsigned fastEmit_MipsISD_PCKEV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3297
0
  switch (VT.SimpleTy) {
3298
0
  case MVT::v16i8: return fastEmit_MipsISD_PCKEV_MVT_v16i8_rr(RetVT, Op0, Op1);
3299
0
  case MVT::v8i16: return fastEmit_MipsISD_PCKEV_MVT_v8i16_rr(RetVT, Op0, Op1);
3300
0
  case MVT::v4i32: return fastEmit_MipsISD_PCKEV_MVT_v4i32_rr(RetVT, Op0, Op1);
3301
0
  case MVT::v2i64: return fastEmit_MipsISD_PCKEV_MVT_v2i64_rr(RetVT, Op0, Op1);
3302
0
  default: return 0;
3303
0
  }
3304
0
}
3305
3306
// FastEmit functions for MipsISD::PCKOD.
3307
3308
0
unsigned fastEmit_MipsISD_PCKOD_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3309
0
  if (RetVT.SimpleTy != MVT::v16i8)
3310
0
    return 0;
3311
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3312
0
    return fastEmitInst_rr(Mips::PCKOD_B, &Mips::MSA128BRegClass, Op0, Op1);
3313
0
  }
3314
0
  return 0;
3315
0
}
3316
3317
0
unsigned fastEmit_MipsISD_PCKOD_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3318
0
  if (RetVT.SimpleTy != MVT::v8i16)
3319
0
    return 0;
3320
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3321
0
    return fastEmitInst_rr(Mips::PCKOD_H, &Mips::MSA128HRegClass, Op0, Op1);
3322
0
  }
3323
0
  return 0;
3324
0
}
3325
3326
0
unsigned fastEmit_MipsISD_PCKOD_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3327
0
  if (RetVT.SimpleTy != MVT::v4i32)
3328
0
    return 0;
3329
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3330
0
    return fastEmitInst_rr(Mips::PCKOD_W, &Mips::MSA128WRegClass, Op0, Op1);
3331
0
  }
3332
0
  return 0;
3333
0
}
3334
3335
0
unsigned fastEmit_MipsISD_PCKOD_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3336
0
  if (RetVT.SimpleTy != MVT::v2i64)
3337
0
    return 0;
3338
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3339
0
    return fastEmitInst_rr(Mips::PCKOD_D, &Mips::MSA128DRegClass, Op0, Op1);
3340
0
  }
3341
0
  return 0;
3342
0
}
3343
3344
0
unsigned fastEmit_MipsISD_PCKOD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3345
0
  switch (VT.SimpleTy) {
3346
0
  case MVT::v16i8: return fastEmit_MipsISD_PCKOD_MVT_v16i8_rr(RetVT, Op0, Op1);
3347
0
  case MVT::v8i16: return fastEmit_MipsISD_PCKOD_MVT_v8i16_rr(RetVT, Op0, Op1);
3348
0
  case MVT::v4i32: return fastEmit_MipsISD_PCKOD_MVT_v4i32_rr(RetVT, Op0, Op1);
3349
0
  case MVT::v2i64: return fastEmit_MipsISD_PCKOD_MVT_v2i64_rr(RetVT, Op0, Op1);
3350
0
  default: return 0;
3351
0
  }
3352
0
}
3353
3354
// FastEmit functions for MipsISD::VNOR.
3355
3356
0
unsigned fastEmit_MipsISD_VNOR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3357
0
  if (RetVT.SimpleTy != MVT::v16i8)
3358
0
    return 0;
3359
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3360
0
    return fastEmitInst_rr(Mips::NOR_V, &Mips::MSA128BRegClass, Op0, Op1);
3361
0
  }
3362
0
  return 0;
3363
0
}
3364
3365
0
unsigned fastEmit_MipsISD_VNOR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3366
0
  if (RetVT.SimpleTy != MVT::v8i16)
3367
0
    return 0;
3368
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3369
0
    return fastEmitInst_rr(Mips::NOR_V_H_PSEUDO, &Mips::MSA128HRegClass, Op0, Op1);
3370
0
  }
3371
0
  return 0;
3372
0
}
3373
3374
0
unsigned fastEmit_MipsISD_VNOR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3375
0
  if (RetVT.SimpleTy != MVT::v4i32)
3376
0
    return 0;
3377
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3378
0
    return fastEmitInst_rr(Mips::NOR_V_W_PSEUDO, &Mips::MSA128WRegClass, Op0, Op1);
3379
0
  }
3380
0
  return 0;
3381
0
}
3382
3383
0
unsigned fastEmit_MipsISD_VNOR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3384
0
  if (RetVT.SimpleTy != MVT::v2i64)
3385
0
    return 0;
3386
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3387
0
    return fastEmitInst_rr(Mips::NOR_V_D_PSEUDO, &Mips::MSA128DRegClass, Op0, Op1);
3388
0
  }
3389
0
  return 0;
3390
0
}
3391
3392
0
unsigned fastEmit_MipsISD_VNOR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3393
0
  switch (VT.SimpleTy) {
3394
0
  case MVT::v16i8: return fastEmit_MipsISD_VNOR_MVT_v16i8_rr(RetVT, Op0, Op1);
3395
0
  case MVT::v8i16: return fastEmit_MipsISD_VNOR_MVT_v8i16_rr(RetVT, Op0, Op1);
3396
0
  case MVT::v4i32: return fastEmit_MipsISD_VNOR_MVT_v4i32_rr(RetVT, Op0, Op1);
3397
0
  case MVT::v2i64: return fastEmit_MipsISD_VNOR_MVT_v2i64_rr(RetVT, Op0, Op1);
3398
0
  default: return 0;
3399
0
  }
3400
0
}
3401
3402
// Top-level FastEmit function.
3403
3404
0
unsigned fastEmit_rr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, unsigned Op1) override {
3405
0
  switch (Opcode) {
3406
0
  case ISD::ADD: return fastEmit_ISD_ADD_rr(VT, RetVT, Op0, Op1);
3407
0
  case ISD::ADDC: return fastEmit_ISD_ADDC_rr(VT, RetVT, Op0, Op1);
3408
0
  case ISD::ADDE: return fastEmit_ISD_ADDE_rr(VT, RetVT, Op0, Op1);
3409
0
  case ISD::AND: return fastEmit_ISD_AND_rr(VT, RetVT, Op0, Op1);
3410
0
  case ISD::FADD: return fastEmit_ISD_FADD_rr(VT, RetVT, Op0, Op1);
3411
0
  case ISD::FDIV: return fastEmit_ISD_FDIV_rr(VT, RetVT, Op0, Op1);
3412
0
  case ISD::FMUL: return fastEmit_ISD_FMUL_rr(VT, RetVT, Op0, Op1);
3413
0
  case ISD::FSUB: return fastEmit_ISD_FSUB_rr(VT, RetVT, Op0, Op1);
3414
0
  case ISD::MUL: return fastEmit_ISD_MUL_rr(VT, RetVT, Op0, Op1);
3415
0
  case ISD::MULHS: return fastEmit_ISD_MULHS_rr(VT, RetVT, Op0, Op1);
3416
0
  case ISD::MULHU: return fastEmit_ISD_MULHU_rr(VT, RetVT, Op0, Op1);
3417
0
  case ISD::OR: return fastEmit_ISD_OR_rr(VT, RetVT, Op0, Op1);
3418
0
  case ISD::ROTR: return fastEmit_ISD_ROTR_rr(VT, RetVT, Op0, Op1);
3419
0
  case ISD::SDIV: return fastEmit_ISD_SDIV_rr(VT, RetVT, Op0, Op1);
3420
0
  case ISD::SHL: return fastEmit_ISD_SHL_rr(VT, RetVT, Op0, Op1);
3421
0
  case ISD::SMAX: return fastEmit_ISD_SMAX_rr(VT, RetVT, Op0, Op1);
3422
0
  case ISD::SMIN: return fastEmit_ISD_SMIN_rr(VT, RetVT, Op0, Op1);
3423
0
  case ISD::SRA: return fastEmit_ISD_SRA_rr(VT, RetVT, Op0, Op1);
3424
0
  case ISD::SREM: return fastEmit_ISD_SREM_rr(VT, RetVT, Op0, Op1);
3425
0
  case ISD::SRL: return fastEmit_ISD_SRL_rr(VT, RetVT, Op0, Op1);
3426
0
  case ISD::SUB: return fastEmit_ISD_SUB_rr(VT, RetVT, Op0, Op1);
3427
0
  case ISD::SUBC: return fastEmit_ISD_SUBC_rr(VT, RetVT, Op0, Op1);
3428
0
  case ISD::UDIV: return fastEmit_ISD_UDIV_rr(VT, RetVT, Op0, Op1);
3429
0
  case ISD::UMAX: return fastEmit_ISD_UMAX_rr(VT, RetVT, Op0, Op1);
3430
0
  case ISD::UMIN: return fastEmit_ISD_UMIN_rr(VT, RetVT, Op0, Op1);
3431
0
  case ISD::UREM: return fastEmit_ISD_UREM_rr(VT, RetVT, Op0, Op1);
3432
0
  case ISD::XOR: return fastEmit_ISD_XOR_rr(VT, RetVT, Op0, Op1);
3433
0
  case MipsISD::BuildPairF64: return fastEmit_MipsISD_BuildPairF64_rr(VT, RetVT, Op0, Op1);
3434
0
  case MipsISD::DivRem: return fastEmit_MipsISD_DivRem_rr(VT, RetVT, Op0, Op1);
3435
0
  case MipsISD::DivRem16: return fastEmit_MipsISD_DivRem16_rr(VT, RetVT, Op0, Op1);
3436
0
  case MipsISD::DivRemU: return fastEmit_MipsISD_DivRemU_rr(VT, RetVT, Op0, Op1);
3437
0
  case MipsISD::DivRemU16: return fastEmit_MipsISD_DivRemU16_rr(VT, RetVT, Op0, Op1);
3438
0
  case MipsISD::EH_RETURN: return fastEmit_MipsISD_EH_RETURN_rr(VT, RetVT, Op0, Op1);
3439
0
  case MipsISD::ILVEV: return fastEmit_MipsISD_ILVEV_rr(VT, RetVT, Op0, Op1);
3440
0
  case MipsISD::ILVL: return fastEmit_MipsISD_ILVL_rr(VT, RetVT, Op0, Op1);
3441
0
  case MipsISD::ILVOD: return fastEmit_MipsISD_ILVOD_rr(VT, RetVT, Op0, Op1);
3442
0
  case MipsISD::ILVR: return fastEmit_MipsISD_ILVR_rr(VT, RetVT, Op0, Op1);
3443
0
  case MipsISD::MTLOHI: return fastEmit_MipsISD_MTLOHI_rr(VT, RetVT, Op0, Op1);
3444
0
  case MipsISD::Mult: return fastEmit_MipsISD_Mult_rr(VT, RetVT, Op0, Op1);
3445
0
  case MipsISD::Multu: return fastEmit_MipsISD_Multu_rr(VT, RetVT, Op0, Op1);
3446
0
  case MipsISD::PCKEV: return fastEmit_MipsISD_PCKEV_rr(VT, RetVT, Op0, Op1);
3447
0
  case MipsISD::PCKOD: return fastEmit_MipsISD_PCKOD_rr(VT, RetVT, Op0, Op1);
3448
0
  case MipsISD::VNOR: return fastEmit_MipsISD_VNOR_rr(VT, RetVT, Op0, Op1);
3449
0
  default: return 0;
3450
0
  }
3451
0
}
3452
3453
// FastEmit functions for MipsISD::ExtractElementF64.
3454
3455
0
unsigned fastEmit_MipsISD_ExtractElementF64_MVT_f64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3456
0
  if (RetVT.SimpleTy != MVT::i32)
3457
0
    return 0;
3458
0
  if ((Subtarget->isFP64bit()) && (!Subtarget->useSoftFloat()) && (!Subtarget->inMips16Mode())) {
3459
0
    return fastEmitInst_ri(Mips::ExtractElementF64_64, &Mips::GPR32RegClass, Op0, imm1);
3460
0
  }
3461
0
  if ((!Subtarget->useSoftFloat()) && (!Subtarget->isFP64bit()) && (!Subtarget->inMips16Mode())) {
3462
0
    return fastEmitInst_ri(Mips::ExtractElementF64, &Mips::GPR32RegClass, Op0, imm1);
3463
0
  }
3464
0
  return 0;
3465
0
}
3466
3467
0
unsigned fastEmit_MipsISD_ExtractElementF64_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3468
0
  switch (VT.SimpleTy) {
3469
0
  case MVT::f64: return fastEmit_MipsISD_ExtractElementF64_MVT_f64_ri(RetVT, Op0, imm1);
3470
0
  default: return 0;
3471
0
  }
3472
0
}
3473
3474
// FastEmit functions for MipsISD::SHLL_DSP.
3475
3476
0
unsigned fastEmit_MipsISD_SHLL_DSP_MVT_v4i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3477
0
  if (RetVT.SimpleTy != MVT::v4i8)
3478
0
    return 0;
3479
0
  if ((Subtarget->hasDSP())) {
3480
0
    return fastEmitInst_ri(Mips::SHLL_QB, &Mips::DSPRRegClass, Op0, imm1);
3481
0
  }
3482
0
  return 0;
3483
0
}
3484
3485
0
unsigned fastEmit_MipsISD_SHLL_DSP_MVT_v2i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3486
0
  if (RetVT.SimpleTy != MVT::v2i16)
3487
0
    return 0;
3488
0
  if ((Subtarget->hasDSP())) {
3489
0
    return fastEmitInst_ri(Mips::SHLL_PH, &Mips::DSPRRegClass, Op0, imm1);
3490
0
  }
3491
0
  return 0;
3492
0
}
3493
3494
0
unsigned fastEmit_MipsISD_SHLL_DSP_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3495
0
  switch (VT.SimpleTy) {
3496
0
  case MVT::v4i8: return fastEmit_MipsISD_SHLL_DSP_MVT_v4i8_ri(RetVT, Op0, imm1);
3497
0
  case MVT::v2i16: return fastEmit_MipsISD_SHLL_DSP_MVT_v2i16_ri(RetVT, Op0, imm1);
3498
0
  default: return 0;
3499
0
  }
3500
0
}
3501
3502
// FastEmit functions for MipsISD::SHRA_DSP.
3503
3504
0
unsigned fastEmit_MipsISD_SHRA_DSP_MVT_v4i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3505
0
  if (RetVT.SimpleTy != MVT::v4i8)
3506
0
    return 0;
3507
0
  if ((Subtarget->hasDSPR2())) {
3508
0
    return fastEmitInst_ri(Mips::SHRA_QB, &Mips::DSPRRegClass, Op0, imm1);
3509
0
  }
3510
0
  return 0;
3511
0
}
3512
3513
0
unsigned fastEmit_MipsISD_SHRA_DSP_MVT_v2i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3514
0
  if (RetVT.SimpleTy != MVT::v2i16)
3515
0
    return 0;
3516
0
  if ((Subtarget->hasDSP())) {
3517
0
    return fastEmitInst_ri(Mips::SHRA_PH, &Mips::DSPRRegClass, Op0, imm1);
3518
0
  }
3519
0
  return 0;
3520
0
}
3521
3522
0
unsigned fastEmit_MipsISD_SHRA_DSP_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3523
0
  switch (VT.SimpleTy) {
3524
0
  case MVT::v4i8: return fastEmit_MipsISD_SHRA_DSP_MVT_v4i8_ri(RetVT, Op0, imm1);
3525
0
  case MVT::v2i16: return fastEmit_MipsISD_SHRA_DSP_MVT_v2i16_ri(RetVT, Op0, imm1);
3526
0
  default: return 0;
3527
0
  }
3528
0
}
3529
3530
// FastEmit functions for MipsISD::SHRL_DSP.
3531
3532
0
unsigned fastEmit_MipsISD_SHRL_DSP_MVT_v4i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3533
0
  if (RetVT.SimpleTy != MVT::v4i8)
3534
0
    return 0;
3535
0
  if ((Subtarget->hasDSP())) {
3536
0
    return fastEmitInst_ri(Mips::SHRL_QB, &Mips::DSPRRegClass, Op0, imm1);
3537
0
  }
3538
0
  return 0;
3539
0
}
3540
3541
0
unsigned fastEmit_MipsISD_SHRL_DSP_MVT_v2i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
3542
0
  if (RetVT.SimpleTy != MVT::v2i16)
3543
0
    return 0;
3544
0
  if ((Subtarget->hasDSPR2())) {
3545
0
    return fastEmitInst_ri(Mips::SHRL_PH, &Mips::DSPRRegClass, Op0, imm1);
3546
0
  }
3547
0
  return 0;
3548
0
}
3549
3550
0
unsigned fastEmit_MipsISD_SHRL_DSP_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3551
0
  switch (VT.SimpleTy) {
3552
0
  case MVT::v4i8: return fastEmit_MipsISD_SHRL_DSP_MVT_v4i8_ri(RetVT, Op0, imm1);
3553
0
  case MVT::v2i16: return fastEmit_MipsISD_SHRL_DSP_MVT_v2i16_ri(RetVT, Op0, imm1);
3554
0
  default: return 0;
3555
0
  }
3556
0
}
3557
3558
// Top-level FastEmit function.
3559
3560
0
unsigned fastEmit_ri(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) override {
3561
0
  if (VT == MVT::i32 && Predicate_immZExt5(imm1))
3562
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt5(VT, RetVT, Opcode, Op0, imm1))
3563
0
      return Reg;
3564
3565
0
  if (VT == MVT::i32 && Predicate_immZExt6(imm1))
3566
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt6(VT, RetVT, Opcode, Op0, imm1))
3567
0
      return Reg;
3568
3569
0
  if (VT == MVT::iPTR && Predicate_immZExt2Ptr(imm1))
3570
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt2Ptr(VT, RetVT, Opcode, Op0, imm1))
3571
0
      return Reg;
3572
3573
0
  if (VT == MVT::iPTR && Predicate_immZExt1Ptr(imm1))
3574
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt1Ptr(VT, RetVT, Opcode, Op0, imm1))
3575
0
      return Reg;
3576
3577
0
  if (VT == MVT::i32 && Predicate_immZExt4(imm1))
3578
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt4(VT, RetVT, Opcode, Op0, imm1))
3579
0
      return Reg;
3580
3581
0
  if (VT == MVT::i32 && Predicate_immSExtAddiur2(imm1))
3582
0
    if (unsigned Reg = fastEmit_ri_Predicate_immSExtAddiur2(VT, RetVT, Opcode, Op0, imm1))
3583
0
      return Reg;
3584
3585
0
  if (VT == MVT::i32 && Predicate_immSExtAddius5(imm1))
3586
0
    if (unsigned Reg = fastEmit_ri_Predicate_immSExtAddius5(VT, RetVT, Opcode, Op0, imm1))
3587
0
      return Reg;
3588
3589
0
  if (VT == MVT::i32 && Predicate_immZExtAndi16(imm1))
3590
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExtAndi16(VT, RetVT, Opcode, Op0, imm1))
3591
0
      return Reg;
3592
3593
0
  if (VT == MVT::i32 && Predicate_immZExt2Shift(imm1))
3594
0
    if (unsigned Reg = fastEmit_ri_Predicate_immZExt2Shift(VT, RetVT, Opcode, Op0, imm1))
3595
0
      return Reg;
3596
3597
0
  switch (Opcode) {
3598
0
  case MipsISD::ExtractElementF64: return fastEmit_MipsISD_ExtractElementF64_ri(VT, RetVT, Op0, imm1);
3599
0
  case MipsISD::SHLL_DSP: return fastEmit_MipsISD_SHLL_DSP_ri(VT, RetVT, Op0, imm1);
3600
0
  case MipsISD::SHRA_DSP: return fastEmit_MipsISD_SHRA_DSP_ri(VT, RetVT, Op0, imm1);
3601
0
  case MipsISD::SHRL_DSP: return fastEmit_MipsISD_SHRL_DSP_ri(VT, RetVT, Op0, imm1);
3602
0
  default: return 0;
3603
0
  }
3604
0
}
3605
3606
// FastEmit functions for ISD::ROTR.
3607
3608
0
unsigned fastEmit_ISD_ROTR_MVT_i32_ri_Predicate_immZExt5(MVT RetVT, unsigned Op0, uint64_t imm1) {
3609
0
  if (RetVT.SimpleTy != MVT::i32)
3610
0
    return 0;
3611
0
  if ((Subtarget->inMicroMipsMode())) {
3612
0
    return fastEmitInst_ri(Mips::ROTR_MM, &Mips::GPR32RegClass, Op0, imm1);
3613
0
  }
3614
0
  if ((Subtarget->hasMips32r2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3615
0
    return fastEmitInst_ri(Mips::ROTR, &Mips::GPR32RegClass, Op0, imm1);
3616
0
  }
3617
0
  return 0;
3618
0
}
3619
3620
0
unsigned fastEmit_ISD_ROTR_ri_Predicate_immZExt5(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3621
0
  switch (VT.SimpleTy) {
3622
0
  case MVT::i32: return fastEmit_ISD_ROTR_MVT_i32_ri_Predicate_immZExt5(RetVT, Op0, imm1);
3623
0
  default: return 0;
3624
0
  }
3625
0
}
3626
3627
// FastEmit functions for ISD::SHL.
3628
3629
0
unsigned fastEmit_ISD_SHL_MVT_i32_ri_Predicate_immZExt5(MVT RetVT, unsigned Op0, uint64_t imm1) {
3630
0
  if (RetVT.SimpleTy != MVT::i32)
3631
0
    return 0;
3632
0
  if ((Subtarget->inMicroMipsMode())) {
3633
0
    return fastEmitInst_ri(Mips::SLL_MM, &Mips::GPR32RegClass, Op0, imm1);
3634
0
  }
3635
0
  if ((Subtarget->inMips16Mode())) {
3636
0
    return fastEmitInst_ri(Mips::SllX16, &Mips::CPU16RegsRegClass, Op0, imm1);
3637
0
  }
3638
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3639
0
    return fastEmitInst_ri(Mips::SLL, &Mips::GPR32RegClass, Op0, imm1);
3640
0
  }
3641
0
  return 0;
3642
0
}
3643
3644
0
unsigned fastEmit_ISD_SHL_ri_Predicate_immZExt5(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3645
0
  switch (VT.SimpleTy) {
3646
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_ri_Predicate_immZExt5(RetVT, Op0, imm1);
3647
0
  default: return 0;
3648
0
  }
3649
0
}
3650
3651
// FastEmit functions for ISD::SRA.
3652
3653
0
unsigned fastEmit_ISD_SRA_MVT_i32_ri_Predicate_immZExt5(MVT RetVT, unsigned Op0, uint64_t imm1) {
3654
0
  if (RetVT.SimpleTy != MVT::i32)
3655
0
    return 0;
3656
0
  if ((Subtarget->inMicroMipsMode())) {
3657
0
    return fastEmitInst_ri(Mips::SRA_MM, &Mips::GPR32RegClass, Op0, imm1);
3658
0
  }
3659
0
  if ((Subtarget->inMips16Mode())) {
3660
0
    return fastEmitInst_ri(Mips::SraX16, &Mips::CPU16RegsRegClass, Op0, imm1);
3661
0
  }
3662
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3663
0
    return fastEmitInst_ri(Mips::SRA, &Mips::GPR32RegClass, Op0, imm1);
3664
0
  }
3665
0
  return 0;
3666
0
}
3667
3668
0
unsigned fastEmit_ISD_SRA_ri_Predicate_immZExt5(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3669
0
  switch (VT.SimpleTy) {
3670
0
  case MVT::i32: return fastEmit_ISD_SRA_MVT_i32_ri_Predicate_immZExt5(RetVT, Op0, imm1);
3671
0
  default: return 0;
3672
0
  }
3673
0
}
3674
3675
// FastEmit functions for ISD::SRL.
3676
3677
0
unsigned fastEmit_ISD_SRL_MVT_i32_ri_Predicate_immZExt5(MVT RetVT, unsigned Op0, uint64_t imm1) {
3678
0
  if (RetVT.SimpleTy != MVT::i32)
3679
0
    return 0;
3680
0
  if ((Subtarget->inMicroMipsMode())) {
3681
0
    return fastEmitInst_ri(Mips::SRL_MM, &Mips::GPR32RegClass, Op0, imm1);
3682
0
  }
3683
0
  if ((Subtarget->inMips16Mode())) {
3684
0
    return fastEmitInst_ri(Mips::SrlX16, &Mips::CPU16RegsRegClass, Op0, imm1);
3685
0
  }
3686
0
  if ((Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3687
0
    return fastEmitInst_ri(Mips::SRL, &Mips::GPR32RegClass, Op0, imm1);
3688
0
  }
3689
0
  return 0;
3690
0
}
3691
3692
0
unsigned fastEmit_ISD_SRL_ri_Predicate_immZExt5(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3693
0
  switch (VT.SimpleTy) {
3694
0
  case MVT::i32: return fastEmit_ISD_SRL_MVT_i32_ri_Predicate_immZExt5(RetVT, Op0, imm1);
3695
0
  default: return 0;
3696
0
  }
3697
0
}
3698
3699
// Top-level FastEmit function.
3700
3701
0
unsigned fastEmit_ri_Predicate_immZExt5(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3702
0
  switch (Opcode) {
3703
0
  case ISD::ROTR: return fastEmit_ISD_ROTR_ri_Predicate_immZExt5(VT, RetVT, Op0, imm1);
3704
0
  case ISD::SHL: return fastEmit_ISD_SHL_ri_Predicate_immZExt5(VT, RetVT, Op0, imm1);
3705
0
  case ISD::SRA: return fastEmit_ISD_SRA_ri_Predicate_immZExt5(VT, RetVT, Op0, imm1);
3706
0
  case ISD::SRL: return fastEmit_ISD_SRL_ri_Predicate_immZExt5(VT, RetVT, Op0, imm1);
3707
0
  default: return 0;
3708
0
  }
3709
0
}
3710
3711
// FastEmit functions for ISD::ROTR.
3712
3713
0
unsigned fastEmit_ISD_ROTR_MVT_i64_ri_Predicate_immZExt6(MVT RetVT, unsigned Op0, uint64_t imm1) {
3714
0
  if (RetVT.SimpleTy != MVT::i64)
3715
0
    return 0;
3716
0
  if ((Subtarget->hasMips64r2()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3717
0
    return fastEmitInst_ri(Mips::DROTR, &Mips::GPR64RegClass, Op0, imm1);
3718
0
  }
3719
0
  return 0;
3720
0
}
3721
3722
0
unsigned fastEmit_ISD_ROTR_ri_Predicate_immZExt6(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3723
0
  switch (VT.SimpleTy) {
3724
0
  case MVT::i64: return fastEmit_ISD_ROTR_MVT_i64_ri_Predicate_immZExt6(RetVT, Op0, imm1);
3725
0
  default: return 0;
3726
0
  }
3727
0
}
3728
3729
// FastEmit functions for ISD::SHL.
3730
3731
0
unsigned fastEmit_ISD_SHL_MVT_i64_ri_Predicate_immZExt6(MVT RetVT, unsigned Op0, uint64_t imm1) {
3732
0
  if (RetVT.SimpleTy != MVT::i64)
3733
0
    return 0;
3734
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3735
0
    return fastEmitInst_ri(Mips::DSLL, &Mips::GPR64RegClass, Op0, imm1);
3736
0
  }
3737
0
  return 0;
3738
0
}
3739
3740
0
unsigned fastEmit_ISD_SHL_ri_Predicate_immZExt6(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3741
0
  switch (VT.SimpleTy) {
3742
0
  case MVT::i64: return fastEmit_ISD_SHL_MVT_i64_ri_Predicate_immZExt6(RetVT, Op0, imm1);
3743
0
  default: return 0;
3744
0
  }
3745
0
}
3746
3747
// FastEmit functions for ISD::SRA.
3748
3749
0
unsigned fastEmit_ISD_SRA_MVT_i64_ri_Predicate_immZExt6(MVT RetVT, unsigned Op0, uint64_t imm1) {
3750
0
  if (RetVT.SimpleTy != MVT::i64)
3751
0
    return 0;
3752
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3753
0
    return fastEmitInst_ri(Mips::DSRA, &Mips::GPR64RegClass, Op0, imm1);
3754
0
  }
3755
0
  return 0;
3756
0
}
3757
3758
0
unsigned fastEmit_ISD_SRA_ri_Predicate_immZExt6(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3759
0
  switch (VT.SimpleTy) {
3760
0
  case MVT::i64: return fastEmit_ISD_SRA_MVT_i64_ri_Predicate_immZExt6(RetVT, Op0, imm1);
3761
0
  default: return 0;
3762
0
  }
3763
0
}
3764
3765
// FastEmit functions for ISD::SRL.
3766
3767
0
unsigned fastEmit_ISD_SRL_MVT_i64_ri_Predicate_immZExt6(MVT RetVT, unsigned Op0, uint64_t imm1) {
3768
0
  if (RetVT.SimpleTy != MVT::i64)
3769
0
    return 0;
3770
0
  if ((Subtarget->hasMips3()) && (Subtarget->hasStandardEncoding()) && (!Subtarget->inMicroMipsMode())) {
3771
0
    return fastEmitInst_ri(Mips::DSRL, &Mips::GPR64RegClass, Op0, imm1);
3772
0
  }
3773
0
  return 0;
3774
0
}
3775
3776
0
unsigned fastEmit_ISD_SRL_ri_Predicate_immZExt6(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3777
0
  switch (VT.SimpleTy) {
3778
0
  case MVT::i64: return fastEmit_ISD_SRL_MVT_i64_ri_Predicate_immZExt6(RetVT, Op0, imm1);
3779
0
  default: return 0;
3780
0
  }
3781
0
}
3782
3783
// Top-level FastEmit function.
3784
3785
0
unsigned fastEmit_ri_Predicate_immZExt6(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3786
0
  switch (Opcode) {
3787
0
  case ISD::ROTR: return fastEmit_ISD_ROTR_ri_Predicate_immZExt6(VT, RetVT, Op0, imm1);
3788
0
  case ISD::SHL: return fastEmit_ISD_SHL_ri_Predicate_immZExt6(VT, RetVT, Op0, imm1);
3789
0
  case ISD::SRA: return fastEmit_ISD_SRA_ri_Predicate_immZExt6(VT, RetVT, Op0, imm1);
3790
0
  case ISD::SRL: return fastEmit_ISD_SRL_ri_Predicate_immZExt6(VT, RetVT, Op0, imm1);
3791
0
  default: return 0;
3792
0
  }
3793
0
}
3794
3795
// FastEmit functions for ISD::EXTRACT_VECTOR_ELT.
3796
3797
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v4f32_ri_Predicate_immZExt2Ptr(MVT RetVT, unsigned Op0, uint64_t imm1) {
3798
0
  if (RetVT.SimpleTy != MVT::f32)
3799
0
    return 0;
3800
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3801
0
    return fastEmitInst_ri(Mips::COPY_FW_PSEUDO, &Mips::FGR32RegClass, Op0, imm1);
3802
0
  }
3803
0
  return 0;
3804
0
}
3805
3806
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt2Ptr(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3807
0
  switch (VT.SimpleTy) {
3808
0
  case MVT::v4f32: return fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v4f32_ri_Predicate_immZExt2Ptr(RetVT, Op0, imm1);
3809
0
  default: return 0;
3810
0
  }
3811
0
}
3812
3813
// Top-level FastEmit function.
3814
3815
0
unsigned fastEmit_ri_Predicate_immZExt2Ptr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3816
0
  switch (Opcode) {
3817
0
  case ISD::EXTRACT_VECTOR_ELT: return fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt2Ptr(VT, RetVT, Op0, imm1);
3818
0
  default: return 0;
3819
0
  }
3820
0
}
3821
3822
// FastEmit functions for ISD::EXTRACT_VECTOR_ELT.
3823
3824
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v2f64_ri_Predicate_immZExt1Ptr(MVT RetVT, unsigned Op0, uint64_t imm1) {
3825
0
  if (RetVT.SimpleTy != MVT::f64)
3826
0
    return 0;
3827
0
  if ((Subtarget->hasMSA()) && (Subtarget->hasStandardEncoding())) {
3828
0
    return fastEmitInst_ri(Mips::COPY_FD_PSEUDO, &Mips::FGR64RegClass, Op0, imm1);
3829
0
  }
3830
0
  return 0;
3831
0
}
3832
3833
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt1Ptr(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3834
0
  switch (VT.SimpleTy) {
3835
0
  case MVT::v2f64: return fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v2f64_ri_Predicate_immZExt1Ptr(RetVT, Op0, imm1);
3836
0
  default: return 0;
3837
0
  }
3838
0
}
3839
3840
// Top-level FastEmit function.
3841
3842
0
unsigned fastEmit_ri_Predicate_immZExt1Ptr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3843
0
  switch (Opcode) {
3844
0
  case ISD::EXTRACT_VECTOR_ELT: return fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt1Ptr(VT, RetVT, Op0, imm1);
3845
0
  default: return 0;
3846
0
  }
3847
0
}
3848
3849
// FastEmit functions for ISD::EXTRACT_VECTOR_ELT.
3850
3851
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v4i32_ri_Predicate_immZExt4(MVT RetVT, unsigned Op0, uint64_t imm1) {
3852
0
  if (RetVT.SimpleTy != MVT::i32)
3853
0
    return 0;
3854
0
  if ((Subtarget->hasMSA())) {
3855
0
    return fastEmitInst_ri(Mips::COPY_S_W, &Mips::GPR32RegClass, Op0, imm1);
3856
0
  }
3857
0
  return 0;
3858
0
}
3859
3860
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt4(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3861
0
  switch (VT.SimpleTy) {
3862
0
  case MVT::v4i32: return fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v4i32_ri_Predicate_immZExt4(RetVT, Op0, imm1);
3863
0
  default: return 0;
3864
0
  }
3865
0
}
3866
3867
// Top-level FastEmit function.
3868
3869
0
unsigned fastEmit_ri_Predicate_immZExt4(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3870
0
  switch (Opcode) {
3871
0
  case ISD::EXTRACT_VECTOR_ELT: return fastEmit_ISD_EXTRACT_VECTOR_ELT_ri_Predicate_immZExt4(VT, RetVT, Op0, imm1);
3872
0
  default: return 0;
3873
0
  }
3874
0
}
3875
3876
// FastEmit functions for ISD::ADD.
3877
3878
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_immSExtAddiur2(MVT RetVT, unsigned Op0, uint64_t imm1) {
3879
0
  if (RetVT.SimpleTy != MVT::i32)
3880
0
    return 0;
3881
0
  if ((Subtarget->inMicroMipsMode())) {
3882
0
    return fastEmitInst_ri(Mips::ADDIUR2_MM, &Mips::GPRMM16RegClass, Op0, imm1);
3883
0
  }
3884
0
  return 0;
3885
0
}
3886
3887
0
unsigned fastEmit_ISD_ADD_ri_Predicate_immSExtAddiur2(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3888
0
  switch (VT.SimpleTy) {
3889
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_immSExtAddiur2(RetVT, Op0, imm1);
3890
0
  default: return 0;
3891
0
  }
3892
0
}
3893
3894
// Top-level FastEmit function.
3895
3896
0
unsigned fastEmit_ri_Predicate_immSExtAddiur2(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3897
0
  switch (Opcode) {
3898
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_immSExtAddiur2(VT, RetVT, Op0, imm1);
3899
0
  default: return 0;
3900
0
  }
3901
0
}
3902
3903
// FastEmit functions for ISD::ADD.
3904
3905
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_immSExtAddius5(MVT RetVT, unsigned Op0, uint64_t imm1) {
3906
0
  if (RetVT.SimpleTy != MVT::i32)
3907
0
    return 0;
3908
0
  if ((Subtarget->inMicroMipsMode())) {
3909
0
    return fastEmitInst_ri(Mips::ADDIUS5_MM, &Mips::GPR32RegClass, Op0, imm1);
3910
0
  }
3911
0
  return 0;
3912
0
}
3913
3914
0
unsigned fastEmit_ISD_ADD_ri_Predicate_immSExtAddius5(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3915
0
  switch (VT.SimpleTy) {
3916
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_immSExtAddius5(RetVT, Op0, imm1);
3917
0
  default: return 0;
3918
0
  }
3919
0
}
3920
3921
// Top-level FastEmit function.
3922
3923
0
unsigned fastEmit_ri_Predicate_immSExtAddius5(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3924
0
  switch (Opcode) {
3925
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_immSExtAddius5(VT, RetVT, Op0, imm1);
3926
0
  default: return 0;
3927
0
  }
3928
0
}
3929
3930
// FastEmit functions for ISD::AND.
3931
3932
0
unsigned fastEmit_ISD_AND_MVT_i32_ri_Predicate_immZExtAndi16(MVT RetVT, unsigned Op0, uint64_t imm1) {
3933
0
  if (RetVT.SimpleTy != MVT::i32)
3934
0
    return 0;
3935
0
  if ((Subtarget->hasMips32r6()) && (Subtarget->inMicroMipsMode())) {
3936
0
    return fastEmitInst_ri(Mips::ANDI16_MMR6, &Mips::GPRMM16RegClass, Op0, imm1);
3937
0
  }
3938
0
  if ((Subtarget->inMicroMipsMode())) {
3939
0
    return fastEmitInst_ri(Mips::ANDI16_MM, &Mips::GPRMM16RegClass, Op0, imm1);
3940
0
  }
3941
0
  return 0;
3942
0
}
3943
3944
0
unsigned fastEmit_ISD_AND_ri_Predicate_immZExtAndi16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3945
0
  switch (VT.SimpleTy) {
3946
0
  case MVT::i32: return fastEmit_ISD_AND_MVT_i32_ri_Predicate_immZExtAndi16(RetVT, Op0, imm1);
3947
0
  default: return 0;
3948
0
  }
3949
0
}
3950
3951
// Top-level FastEmit function.
3952
3953
0
unsigned fastEmit_ri_Predicate_immZExtAndi16(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3954
0
  switch (Opcode) {
3955
0
  case ISD::AND: return fastEmit_ISD_AND_ri_Predicate_immZExtAndi16(VT, RetVT, Op0, imm1);
3956
0
  default: return 0;
3957
0
  }
3958
0
}
3959
3960
// FastEmit functions for ISD::SHL.
3961
3962
0
unsigned fastEmit_ISD_SHL_MVT_i32_ri_Predicate_immZExt2Shift(MVT RetVT, unsigned Op0, uint64_t imm1) {
3963
0
  if (RetVT.SimpleTy != MVT::i32)
3964
0
    return 0;
3965
0
  if ((Subtarget->inMicroMipsMode())) {
3966
0
    return fastEmitInst_ri(Mips::SLL16_MM, &Mips::GPRMM16RegClass, Op0, imm1);
3967
0
  }
3968
0
  return 0;
3969
0
}
3970
3971
0
unsigned fastEmit_ISD_SHL_ri_Predicate_immZExt2Shift(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3972
0
  switch (VT.SimpleTy) {
3973
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_ri_Predicate_immZExt2Shift(RetVT, Op0, imm1);
3974
0
  default: return 0;
3975
0
  }
3976
0
}
3977
3978
// FastEmit functions for ISD::SRL.
3979
3980
0
unsigned fastEmit_ISD_SRL_MVT_i32_ri_Predicate_immZExt2Shift(MVT RetVT, unsigned Op0, uint64_t imm1) {
3981
0
  if (RetVT.SimpleTy != MVT::i32)
3982
0
    return 0;
3983
0
  if ((Subtarget->inMicroMipsMode())) {
3984
0
    return fastEmitInst_ri(Mips::SRL16_MM, &Mips::GPRMM16RegClass, Op0, imm1);
3985
0
  }
3986
0
  return 0;
3987
0
}
3988
3989
0
unsigned fastEmit_ISD_SRL_ri_Predicate_immZExt2Shift(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
3990
0
  switch (VT.SimpleTy) {
3991
0
  case MVT::i32: return fastEmit_ISD_SRL_MVT_i32_ri_Predicate_immZExt2Shift(RetVT, Op0, imm1);
3992
0
  default: return 0;
3993
0
  }
3994
0
}
3995
3996
// Top-level FastEmit function.
3997
3998
0
unsigned fastEmit_ri_Predicate_immZExt2Shift(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
3999
0
  switch (Opcode) {
4000
0
  case ISD::SHL: return fastEmit_ISD_SHL_ri_Predicate_immZExt2Shift(VT, RetVT, Op0, imm1);
4001
0
  case ISD::SRL: return fastEmit_ISD_SRL_ri_Predicate_immZExt2Shift(VT, RetVT, Op0, imm1);
4002
0
  default: return 0;
4003
0
  }
4004
0
}
4005
4006
// FastEmit functions for ISD::Constant.
4007
4008
0
unsigned fastEmit_ISD_Constant_MVT_i32_i(MVT RetVT, uint64_t imm0) {
4009
0
  if (RetVT.SimpleTy != MVT::i32)
4010
0
    return 0;
4011
0
  if ((Subtarget->inMips16Mode())) {
4012
0
    return fastEmitInst_i(Mips::LwConstant32, &Mips::CPU16RegsRegClass, imm0);
4013
0
  }
4014
0
  return 0;
4015
0
}
4016
4017
0
unsigned fastEmit_ISD_Constant_i(MVT VT, MVT RetVT, uint64_t imm0) {
4018
0
  switch (VT.SimpleTy) {
4019
0
  case MVT::i32: return fastEmit_ISD_Constant_MVT_i32_i(RetVT, imm0);
4020
0
  default: return 0;
4021
0
  }
4022
0
}
4023
4024
// Top-level FastEmit function.
4025
4026
0
unsigned fastEmit_i(MVT VT, MVT RetVT, unsigned Opcode, uint64_t imm0) override {
4027
0
  switch (Opcode) {
4028
0
  case ISD::Constant: return fastEmit_ISD_Constant_i(VT, RetVT, imm0);
4029
0
  default: return 0;
4030
0
  }
4031
0
}
4032