Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/ARM/ARMGenFastISel.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* "Fast" Instruction Selector for the ARM target                             *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
10
// FastEmit Immediate Predicate functions.
11
0
static bool Predicate_mod_imm(int64_t Imm) {
12
13
0
    return ARM_AM::getSOImmVal(Imm) != -1;
14
  
15
0
}
16
0
static bool Predicate_imm0_65535(int64_t Imm) {
17
0
18
0
  return Imm >= 0 && Imm < 65536;
19
0
20
0
}
21
0
static bool Predicate_imm0_7(int64_t Imm) {
22
23
0
  return Imm >= 0 && Imm < 8;
24
25
0
}
26
0
static bool Predicate_imm0_255_expr(int64_t Imm) {
27
0
 return Imm >= 0 && Imm < 256; 
28
0
}
29
0
static bool Predicate_imm0_255(int64_t Imm) {
30
0
 return Imm >= 0 && Imm < 256; 
31
0
}
32
0
static bool Predicate_t2_so_imm(int64_t Imm) {
33
34
0
    return ARM_AM::getT2SOImmVal(Imm) != -1;
35
  
36
0
}
37
0
static bool Predicate_imm0_4095(int64_t Imm) {
38
39
0
  return Imm >= 0 && Imm < 4096;
40
41
0
}
42
0
static bool Predicate_imm1_31(int64_t Imm) {
43
0
 return Imm > 0 && Imm < 32; 
44
0
}
45
0
static bool Predicate_shr_imm8(int64_t Imm) {
46
0
 return Imm > 0 && Imm <= 8; 
47
0
}
48
0
static bool Predicate_shr_imm16(int64_t Imm) {
49
0
 return Imm > 0 && Imm <= 16; 
50
0
}
51
0
static bool Predicate_shr_imm32(int64_t Imm) {
52
0
 return Imm > 0 && Imm <= 32; 
53
0
}
54
0
static bool Predicate_VectorIndex32(int64_t Imm) {
55
56
0
  return ((uint64_t)Imm) < 2;
57
58
0
}
59
0
static bool Predicate_imm0_31(int64_t Imm) {
60
61
0
  return Imm >= 0 && Imm < 32;
62
63
0
}
64
0
static bool Predicate_t2_so_imm_neg(int64_t Imm) {
65
0
66
0
  return Imm && ARM_AM::getT2SOImmVal(-(uint32_t)Imm) != -1;
67
0
68
0
}
69
0
static bool Predicate_imm0_15(int64_t Imm) {
70
71
0
  return Imm >= 0 && Imm < 16;
72
73
0
}
74
75
76
// FastEmit functions for ISD::GET_FPENV.
77
78
0
unsigned fastEmit_ISD_GET_FPENV_MVT_i32_(MVT RetVT) {
79
0
  if (RetVT.SimpleTy != MVT::i32)
80
0
    return 0;
81
0
  return fastEmitInst_(ARM::VMRS, &ARM::GPRnopcRegClass);
82
0
}
83
84
0
unsigned fastEmit_ISD_GET_FPENV_(MVT VT, MVT RetVT) {
85
0
  switch (VT.SimpleTy) {
86
0
  case MVT::i32: return fastEmit_ISD_GET_FPENV_MVT_i32_(RetVT);
87
0
  default: return 0;
88
0
  }
89
0
}
90
91
// FastEmit functions for ISD::GET_FPMODE.
92
93
0
unsigned fastEmit_ISD_GET_FPMODE_MVT_i32_(MVT RetVT) {
94
0
  if (RetVT.SimpleTy != MVT::i32)
95
0
    return 0;
96
0
  return fastEmitInst_(ARM::VMRS, &ARM::GPRnopcRegClass);
97
0
}
98
99
0
unsigned fastEmit_ISD_GET_FPMODE_(MVT VT, MVT RetVT) {
100
0
  switch (VT.SimpleTy) {
101
0
  case MVT::i32: return fastEmit_ISD_GET_FPMODE_MVT_i32_(RetVT);
102
0
  default: return 0;
103
0
  }
104
0
}
105
106
// Top-level FastEmit function.
107
108
0
unsigned fastEmit_(MVT VT, MVT RetVT, unsigned Opcode) override {
109
0
  switch (Opcode) {
110
0
  case ISD::GET_FPENV: return fastEmit_ISD_GET_FPENV_(VT, RetVT);
111
0
  case ISD::GET_FPMODE: return fastEmit_ISD_GET_FPMODE_(VT, RetVT);
112
0
  default: return 0;
113
0
  }
114
0
}
115
116
// FastEmit functions for ARMISD::CALL.
117
118
0
unsigned fastEmit_ARMISD_CALL_MVT_i32_r(MVT RetVT, unsigned Op0) {
119
0
  if (RetVT.SimpleTy != MVT::isVoid)
120
0
    return 0;
121
0
  if ((Subtarget->hasV5TOps()) && (!Subtarget->isThumb()) && ( MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() )) {
122
0
    return fastEmitInst_r(ARM::BLX_noip, &ARM::GPRnoipRegClass, Op0);
123
0
  }
124
0
  if ((Subtarget->hasV5TOps()) && (!Subtarget->isThumb()) && ( !MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() )) {
125
0
    return fastEmitInst_r(ARM::BLX, &ARM::GPRRegClass, Op0);
126
0
  }
127
0
  return 0;
128
0
}
129
130
0
unsigned fastEmit_ARMISD_CALL_r(MVT VT, MVT RetVT, unsigned Op0) {
131
0
  switch (VT.SimpleTy) {
132
0
  case MVT::i32: return fastEmit_ARMISD_CALL_MVT_i32_r(RetVT, Op0);
133
0
  default: return 0;
134
0
  }
135
0
}
136
137
// FastEmit functions for ARMISD::CALL_NOLINK.
138
139
0
unsigned fastEmit_ARMISD_CALL_NOLINK_MVT_i32_r(MVT RetVT, unsigned Op0) {
140
0
  if (RetVT.SimpleTy != MVT::isVoid)
141
0
    return 0;
142
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
143
0
    return fastEmitInst_r(ARM::tBX_CALL, &ARM::tGPRRegClass, Op0);
144
0
  }
145
0
  if ((!Subtarget->isThumb()) && (!Subtarget->hasV4TOps())) {
146
0
    return fastEmitInst_r(ARM::BMOVPCRX_CALL, &ARM::tGPRRegClass, Op0);
147
0
  }
148
0
  if ((Subtarget->hasV4TOps()) && (!Subtarget->isThumb())) {
149
0
    return fastEmitInst_r(ARM::BX_CALL, &ARM::tGPRRegClass, Op0);
150
0
  }
151
0
  return 0;
152
0
}
153
154
0
unsigned fastEmit_ARMISD_CALL_NOLINK_r(MVT VT, MVT RetVT, unsigned Op0) {
155
0
  switch (VT.SimpleTy) {
156
0
  case MVT::i32: return fastEmit_ARMISD_CALL_NOLINK_MVT_i32_r(RetVT, Op0);
157
0
  default: return 0;
158
0
  }
159
0
}
160
161
// FastEmit functions for ARMISD::CALL_PRED.
162
163
0
unsigned fastEmit_ARMISD_CALL_PRED_MVT_i32_r(MVT RetVT, unsigned Op0) {
164
0
  if (RetVT.SimpleTy != MVT::isVoid)
165
0
    return 0;
166
0
  if ((Subtarget->hasV5TOps()) && (!Subtarget->isThumb()) && ( MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() )) {
167
0
    return fastEmitInst_r(ARM::BLX_pred_noip, &ARM::GPRnoipRegClass, Op0);
168
0
  }
169
0
  if ((Subtarget->hasV5TOps()) && (!Subtarget->isThumb()) && ( !MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() )) {
170
0
    return fastEmitInst_r(ARM::BLX_pred, &ARM::GPRRegClass, Op0);
171
0
  }
172
0
  return 0;
173
0
}
174
175
0
unsigned fastEmit_ARMISD_CALL_PRED_r(MVT VT, MVT RetVT, unsigned Op0) {
176
0
  switch (VT.SimpleTy) {
177
0
  case MVT::i32: return fastEmit_ARMISD_CALL_PRED_MVT_i32_r(RetVT, Op0);
178
0
  default: return 0;
179
0
  }
180
0
}
181
182
// FastEmit functions for ARMISD::CMPFPEw0.
183
184
0
unsigned fastEmit_ARMISD_CMPFPEw0_MVT_f16_r(MVT RetVT, unsigned Op0) {
185
0
  if (RetVT.SimpleTy != MVT::isVoid)
186
0
    return 0;
187
0
  if ((Subtarget->hasFullFP16())) {
188
0
    return fastEmitInst_r(ARM::VCMPEZH, &ARM::HPRRegClass, Op0);
189
0
  }
190
0
  return 0;
191
0
}
192
193
0
unsigned fastEmit_ARMISD_CMPFPEw0_MVT_f32_r(MVT RetVT, unsigned Op0) {
194
0
  if (RetVT.SimpleTy != MVT::isVoid)
195
0
    return 0;
196
0
  if ((Subtarget->hasVFP2Base())) {
197
0
    return fastEmitInst_r(ARM::VCMPEZS, &ARM::SPRRegClass, Op0);
198
0
  }
199
0
  return 0;
200
0
}
201
202
0
unsigned fastEmit_ARMISD_CMPFPEw0_MVT_f64_r(MVT RetVT, unsigned Op0) {
203
0
  if (RetVT.SimpleTy != MVT::isVoid)
204
0
    return 0;
205
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
206
0
    return fastEmitInst_r(ARM::VCMPEZD, &ARM::DPRRegClass, Op0);
207
0
  }
208
0
  return 0;
209
0
}
210
211
0
unsigned fastEmit_ARMISD_CMPFPEw0_r(MVT VT, MVT RetVT, unsigned Op0) {
212
0
  switch (VT.SimpleTy) {
213
0
  case MVT::f16: return fastEmit_ARMISD_CMPFPEw0_MVT_f16_r(RetVT, Op0);
214
0
  case MVT::f32: return fastEmit_ARMISD_CMPFPEw0_MVT_f32_r(RetVT, Op0);
215
0
  case MVT::f64: return fastEmit_ARMISD_CMPFPEw0_MVT_f64_r(RetVT, Op0);
216
0
  default: return 0;
217
0
  }
218
0
}
219
220
// FastEmit functions for ARMISD::CMPFPw0.
221
222
0
unsigned fastEmit_ARMISD_CMPFPw0_MVT_f16_r(MVT RetVT, unsigned Op0) {
223
0
  if (RetVT.SimpleTy != MVT::isVoid)
224
0
    return 0;
225
0
  if ((Subtarget->hasFullFP16())) {
226
0
    return fastEmitInst_r(ARM::VCMPZH, &ARM::HPRRegClass, Op0);
227
0
  }
228
0
  return 0;
229
0
}
230
231
0
unsigned fastEmit_ARMISD_CMPFPw0_MVT_f32_r(MVT RetVT, unsigned Op0) {
232
0
  if (RetVT.SimpleTy != MVT::isVoid)
233
0
    return 0;
234
0
  if ((Subtarget->hasVFP2Base())) {
235
0
    return fastEmitInst_r(ARM::VCMPZS, &ARM::SPRRegClass, Op0);
236
0
  }
237
0
  return 0;
238
0
}
239
240
0
unsigned fastEmit_ARMISD_CMPFPw0_MVT_f64_r(MVT RetVT, unsigned Op0) {
241
0
  if (RetVT.SimpleTy != MVT::isVoid)
242
0
    return 0;
243
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
244
0
    return fastEmitInst_r(ARM::VCMPZD, &ARM::DPRRegClass, Op0);
245
0
  }
246
0
  return 0;
247
0
}
248
249
0
unsigned fastEmit_ARMISD_CMPFPw0_r(MVT VT, MVT RetVT, unsigned Op0) {
250
0
  switch (VT.SimpleTy) {
251
0
  case MVT::f16: return fastEmit_ARMISD_CMPFPw0_MVT_f16_r(RetVT, Op0);
252
0
  case MVT::f32: return fastEmit_ARMISD_CMPFPw0_MVT_f32_r(RetVT, Op0);
253
0
  case MVT::f64: return fastEmit_ARMISD_CMPFPw0_MVT_f64_r(RetVT, Op0);
254
0
  default: return 0;
255
0
  }
256
0
}
257
258
// FastEmit functions for ARMISD::RRX.
259
260
0
unsigned fastEmit_ARMISD_RRX_MVT_i32_r(MVT RetVT, unsigned Op0) {
261
0
  if (RetVT.SimpleTy != MVT::i32)
262
0
    return 0;
263
0
  if ((Subtarget->isThumb2())) {
264
0
    return fastEmitInst_r(ARM::t2RRX, &ARM::rGPRRegClass, Op0);
265
0
  }
266
0
  if ((!Subtarget->isThumb())) {
267
0
    return fastEmitInst_r(ARM::RRX, &ARM::GPRRegClass, Op0);
268
0
  }
269
0
  return 0;
270
0
}
271
272
0
unsigned fastEmit_ARMISD_RRX_r(MVT VT, MVT RetVT, unsigned Op0) {
273
0
  switch (VT.SimpleTy) {
274
0
  case MVT::i32: return fastEmit_ARMISD_RRX_MVT_i32_r(RetVT, Op0);
275
0
  default: return 0;
276
0
  }
277
0
}
278
279
// FastEmit functions for ARMISD::SRA_GLUE.
280
281
0
unsigned fastEmit_ARMISD_SRA_GLUE_MVT_i32_r(MVT RetVT, unsigned Op0) {
282
0
  if (RetVT.SimpleTy != MVT::i32)
283
0
    return 0;
284
0
  if ((Subtarget->isThumb2())) {
285
0
    return fastEmitInst_r(ARM::t2MOVsra_glue, &ARM::rGPRRegClass, Op0);
286
0
  }
287
0
  if ((!Subtarget->isThumb())) {
288
0
    return fastEmitInst_r(ARM::MOVsra_glue, &ARM::GPRRegClass, Op0);
289
0
  }
290
0
  return 0;
291
0
}
292
293
0
unsigned fastEmit_ARMISD_SRA_GLUE_r(MVT VT, MVT RetVT, unsigned Op0) {
294
0
  switch (VT.SimpleTy) {
295
0
  case MVT::i32: return fastEmit_ARMISD_SRA_GLUE_MVT_i32_r(RetVT, Op0);
296
0
  default: return 0;
297
0
  }
298
0
}
299
300
// FastEmit functions for ARMISD::SRL_GLUE.
301
302
0
unsigned fastEmit_ARMISD_SRL_GLUE_MVT_i32_r(MVT RetVT, unsigned Op0) {
303
0
  if (RetVT.SimpleTy != MVT::i32)
304
0
    return 0;
305
0
  if ((Subtarget->isThumb2())) {
306
0
    return fastEmitInst_r(ARM::t2MOVsrl_glue, &ARM::rGPRRegClass, Op0);
307
0
  }
308
0
  if ((!Subtarget->isThumb())) {
309
0
    return fastEmitInst_r(ARM::MOVsrl_glue, &ARM::GPRRegClass, Op0);
310
0
  }
311
0
  return 0;
312
0
}
313
314
0
unsigned fastEmit_ARMISD_SRL_GLUE_r(MVT VT, MVT RetVT, unsigned Op0) {
315
0
  switch (VT.SimpleTy) {
316
0
  case MVT::i32: return fastEmit_ARMISD_SRL_GLUE_MVT_i32_r(RetVT, Op0);
317
0
  default: return 0;
318
0
  }
319
0
}
320
321
// FastEmit functions for ARMISD::VADDVs.
322
323
0
unsigned fastEmit_ARMISD_VADDVs_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
324
0
  if (RetVT.SimpleTy != MVT::i32)
325
0
    return 0;
326
0
  if ((Subtarget->hasMVEIntegerOps())) {
327
0
    return fastEmitInst_r(ARM::MVE_VADDVs8no_acc, &ARM::tGPREvenRegClass, Op0);
328
0
  }
329
0
  return 0;
330
0
}
331
332
0
unsigned fastEmit_ARMISD_VADDVs_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
333
0
  if (RetVT.SimpleTy != MVT::i32)
334
0
    return 0;
335
0
  if ((Subtarget->hasMVEIntegerOps())) {
336
0
    return fastEmitInst_r(ARM::MVE_VADDVs16no_acc, &ARM::tGPREvenRegClass, Op0);
337
0
  }
338
0
  return 0;
339
0
}
340
341
0
unsigned fastEmit_ARMISD_VADDVs_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
342
0
  if (RetVT.SimpleTy != MVT::i32)
343
0
    return 0;
344
0
  if ((Subtarget->hasMVEIntegerOps())) {
345
0
    return fastEmitInst_r(ARM::MVE_VADDVs32no_acc, &ARM::tGPREvenRegClass, Op0);
346
0
  }
347
0
  return 0;
348
0
}
349
350
0
unsigned fastEmit_ARMISD_VADDVs_r(MVT VT, MVT RetVT, unsigned Op0) {
351
0
  switch (VT.SimpleTy) {
352
0
  case MVT::v16i8: return fastEmit_ARMISD_VADDVs_MVT_v16i8_r(RetVT, Op0);
353
0
  case MVT::v8i16: return fastEmit_ARMISD_VADDVs_MVT_v8i16_r(RetVT, Op0);
354
0
  case MVT::v4i32: return fastEmit_ARMISD_VADDVs_MVT_v4i32_r(RetVT, Op0);
355
0
  default: return 0;
356
0
  }
357
0
}
358
359
// FastEmit functions for ARMISD::VADDVu.
360
361
0
unsigned fastEmit_ARMISD_VADDVu_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
362
0
  if (RetVT.SimpleTy != MVT::i32)
363
0
    return 0;
364
0
  if ((Subtarget->hasMVEIntegerOps())) {
365
0
    return fastEmitInst_r(ARM::MVE_VADDVu8no_acc, &ARM::tGPREvenRegClass, Op0);
366
0
  }
367
0
  return 0;
368
0
}
369
370
0
unsigned fastEmit_ARMISD_VADDVu_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
371
0
  if (RetVT.SimpleTy != MVT::i32)
372
0
    return 0;
373
0
  if ((Subtarget->hasMVEIntegerOps())) {
374
0
    return fastEmitInst_r(ARM::MVE_VADDVu16no_acc, &ARM::tGPREvenRegClass, Op0);
375
0
  }
376
0
  return 0;
377
0
}
378
379
0
unsigned fastEmit_ARMISD_VADDVu_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
380
0
  if (RetVT.SimpleTy != MVT::i32)
381
0
    return 0;
382
0
  if ((Subtarget->hasMVEIntegerOps())) {
383
0
    return fastEmitInst_r(ARM::MVE_VADDVu32no_acc, &ARM::tGPREvenRegClass, Op0);
384
0
  }
385
0
  return 0;
386
0
}
387
388
0
unsigned fastEmit_ARMISD_VADDVu_r(MVT VT, MVT RetVT, unsigned Op0) {
389
0
  switch (VT.SimpleTy) {
390
0
  case MVT::v16i8: return fastEmit_ARMISD_VADDVu_MVT_v16i8_r(RetVT, Op0);
391
0
  case MVT::v8i16: return fastEmit_ARMISD_VADDVu_MVT_v8i16_r(RetVT, Op0);
392
0
  case MVT::v4i32: return fastEmit_ARMISD_VADDVu_MVT_v4i32_r(RetVT, Op0);
393
0
  default: return 0;
394
0
  }
395
0
}
396
397
// FastEmit functions for ARMISD::VDUP.
398
399
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8i8_r(unsigned Op0) {
400
0
  if ((Subtarget->hasNEON())) {
401
0
    return fastEmitInst_r(ARM::VDUP8d, &ARM::DPRRegClass, Op0);
402
0
  }
403
0
  return 0;
404
0
}
405
406
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v16i8_r(unsigned Op0) {
407
0
  if ((Subtarget->hasMVEIntegerOps())) {
408
0
    return fastEmitInst_r(ARM::MVE_VDUP8, &ARM::MQPRRegClass, Op0);
409
0
  }
410
0
  if ((Subtarget->hasNEON())) {
411
0
    return fastEmitInst_r(ARM::VDUP8q, &ARM::QPRRegClass, Op0);
412
0
  }
413
0
  return 0;
414
0
}
415
416
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4i16_r(unsigned Op0) {
417
0
  if ((Subtarget->hasNEON())) {
418
0
    return fastEmitInst_r(ARM::VDUP16d, &ARM::DPRRegClass, Op0);
419
0
  }
420
0
  return 0;
421
0
}
422
423
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8i16_r(unsigned Op0) {
424
0
  if ((Subtarget->hasMVEIntegerOps())) {
425
0
    return fastEmitInst_r(ARM::MVE_VDUP16, &ARM::MQPRRegClass, Op0);
426
0
  }
427
0
  if ((Subtarget->hasNEON())) {
428
0
    return fastEmitInst_r(ARM::VDUP16q, &ARM::QPRRegClass, Op0);
429
0
  }
430
0
  return 0;
431
0
}
432
433
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v2i32_r(unsigned Op0) {
434
0
  if ((!Subtarget->hasSlowVDUP32()) && (Subtarget->hasNEON())) {
435
0
    return fastEmitInst_r(ARM::VDUP32d, &ARM::DPRRegClass, Op0);
436
0
  }
437
0
  return 0;
438
0
}
439
440
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4i32_r(unsigned Op0) {
441
0
  if ((Subtarget->hasMVEIntegerOps())) {
442
0
    return fastEmitInst_r(ARM::MVE_VDUP32, &ARM::MQPRRegClass, Op0);
443
0
  }
444
0
  if ((Subtarget->hasNEON())) {
445
0
    return fastEmitInst_r(ARM::VDUP32q, &ARM::QPRRegClass, Op0);
446
0
  }
447
0
  return 0;
448
0
}
449
450
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8f16_r(unsigned Op0) {
451
0
  if ((Subtarget->hasMVEIntegerOps())) {
452
0
    return fastEmitInst_r(ARM::MVE_VDUP16, &ARM::MQPRRegClass, Op0);
453
0
  }
454
0
  return 0;
455
0
}
456
457
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4f32_r(unsigned Op0) {
458
0
  if ((Subtarget->hasMVEIntegerOps())) {
459
0
    return fastEmitInst_r(ARM::MVE_VDUP32, &ARM::MQPRRegClass, Op0);
460
0
  }
461
0
  return 0;
462
0
}
463
464
0
unsigned fastEmit_ARMISD_VDUP_MVT_i32_r(MVT RetVT, unsigned Op0) {
465
0
switch (RetVT.SimpleTy) {
466
0
  case MVT::v8i8: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8i8_r(Op0);
467
0
  case MVT::v16i8: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v16i8_r(Op0);
468
0
  case MVT::v4i16: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4i16_r(Op0);
469
0
  case MVT::v8i16: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8i16_r(Op0);
470
0
  case MVT::v2i32: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v2i32_r(Op0);
471
0
  case MVT::v4i32: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4i32_r(Op0);
472
0
  case MVT::v8f16: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v8f16_r(Op0);
473
0
  case MVT::v4f32: return fastEmit_ARMISD_VDUP_MVT_i32_MVT_v4f32_r(Op0);
474
0
  default: return 0;
475
0
}
476
0
}
477
478
0
unsigned fastEmit_ARMISD_VDUP_r(MVT VT, MVT RetVT, unsigned Op0) {
479
0
  switch (VT.SimpleTy) {
480
0
  case MVT::i32: return fastEmit_ARMISD_VDUP_MVT_i32_r(RetVT, Op0);
481
0
  default: return 0;
482
0
  }
483
0
}
484
485
// FastEmit functions for ARMISD::VMOVSR.
486
487
0
unsigned fastEmit_ARMISD_VMOVSR_MVT_i32_r(MVT RetVT, unsigned Op0) {
488
0
  if (RetVT.SimpleTy != MVT::f32)
489
0
    return 0;
490
0
  if ((Subtarget->hasFPRegs()) && (Subtarget->preferVMOVSR() ||!Subtarget->useNEONForSinglePrecisionFP())) {
491
0
    return fastEmitInst_r(ARM::VMOVSR, &ARM::SPRRegClass, Op0);
492
0
  }
493
0
  return 0;
494
0
}
495
496
0
unsigned fastEmit_ARMISD_VMOVSR_r(MVT VT, MVT RetVT, unsigned Op0) {
497
0
  switch (VT.SimpleTy) {
498
0
  case MVT::i32: return fastEmit_ARMISD_VMOVSR_MVT_i32_r(RetVT, Op0);
499
0
  default: return 0;
500
0
  }
501
0
}
502
503
// FastEmit functions for ARMISD::VMOVhr.
504
505
0
unsigned fastEmit_ARMISD_VMOVhr_MVT_i32_MVT_bf16_r(unsigned Op0) {
506
0
  if ((Subtarget->hasFPRegs16())) {
507
0
    return fastEmitInst_r(ARM::VMOVHR, &ARM::HPRRegClass, Op0);
508
0
  }
509
0
  return 0;
510
0
}
511
512
0
unsigned fastEmit_ARMISD_VMOVhr_MVT_i32_MVT_f16_r(unsigned Op0) {
513
0
  if ((Subtarget->hasFPRegs16())) {
514
0
    return fastEmitInst_r(ARM::VMOVHR, &ARM::HPRRegClass, Op0);
515
0
  }
516
0
  return 0;
517
0
}
518
519
0
unsigned fastEmit_ARMISD_VMOVhr_MVT_i32_r(MVT RetVT, unsigned Op0) {
520
0
switch (RetVT.SimpleTy) {
521
0
  case MVT::bf16: return fastEmit_ARMISD_VMOVhr_MVT_i32_MVT_bf16_r(Op0);
522
0
  case MVT::f16: return fastEmit_ARMISD_VMOVhr_MVT_i32_MVT_f16_r(Op0);
523
0
  default: return 0;
524
0
}
525
0
}
526
527
0
unsigned fastEmit_ARMISD_VMOVhr_r(MVT VT, MVT RetVT, unsigned Op0) {
528
0
  switch (VT.SimpleTy) {
529
0
  case MVT::i32: return fastEmit_ARMISD_VMOVhr_MVT_i32_r(RetVT, Op0);
530
0
  default: return 0;
531
0
  }
532
0
}
533
534
// FastEmit functions for ARMISD::VMOVrh.
535
536
0
unsigned fastEmit_ARMISD_VMOVrh_MVT_bf16_r(MVT RetVT, unsigned Op0) {
537
0
  if (RetVT.SimpleTy != MVT::i32)
538
0
    return 0;
539
0
  if ((Subtarget->hasFPRegs16())) {
540
0
    return fastEmitInst_r(ARM::VMOVRH, &ARM::rGPRRegClass, Op0);
541
0
  }
542
0
  return 0;
543
0
}
544
545
0
unsigned fastEmit_ARMISD_VMOVrh_MVT_f16_r(MVT RetVT, unsigned Op0) {
546
0
  if (RetVT.SimpleTy != MVT::i32)
547
0
    return 0;
548
0
  if ((Subtarget->hasFPRegs16())) {
549
0
    return fastEmitInst_r(ARM::VMOVRH, &ARM::rGPRRegClass, Op0);
550
0
  }
551
0
  return 0;
552
0
}
553
554
0
unsigned fastEmit_ARMISD_VMOVrh_r(MVT VT, MVT RetVT, unsigned Op0) {
555
0
  switch (VT.SimpleTy) {
556
0
  case MVT::bf16: return fastEmit_ARMISD_VMOVrh_MVT_bf16_r(RetVT, Op0);
557
0
  case MVT::f16: return fastEmit_ARMISD_VMOVrh_MVT_f16_r(RetVT, Op0);
558
0
  default: return 0;
559
0
  }
560
0
}
561
562
// FastEmit functions for ARMISD::VREV16.
563
564
0
unsigned fastEmit_ARMISD_VREV16_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
565
0
  if (RetVT.SimpleTy != MVT::v8i8)
566
0
    return 0;
567
0
  if ((Subtarget->hasNEON())) {
568
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
569
0
  }
570
0
  return 0;
571
0
}
572
573
0
unsigned fastEmit_ARMISD_VREV16_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
574
0
  if (RetVT.SimpleTy != MVT::v16i8)
575
0
    return 0;
576
0
  if ((Subtarget->hasMVEIntegerOps())) {
577
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
578
0
  }
579
0
  if ((Subtarget->hasNEON())) {
580
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
581
0
  }
582
0
  return 0;
583
0
}
584
585
0
unsigned fastEmit_ARMISD_VREV16_r(MVT VT, MVT RetVT, unsigned Op0) {
586
0
  switch (VT.SimpleTy) {
587
0
  case MVT::v8i8: return fastEmit_ARMISD_VREV16_MVT_v8i8_r(RetVT, Op0);
588
0
  case MVT::v16i8: return fastEmit_ARMISD_VREV16_MVT_v16i8_r(RetVT, Op0);
589
0
  default: return 0;
590
0
  }
591
0
}
592
593
// FastEmit functions for ARMISD::VREV32.
594
595
0
unsigned fastEmit_ARMISD_VREV32_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
596
0
  if (RetVT.SimpleTy != MVT::v8i8)
597
0
    return 0;
598
0
  if ((Subtarget->hasNEON())) {
599
0
    return fastEmitInst_r(ARM::VREV32d8, &ARM::DPRRegClass, Op0);
600
0
  }
601
0
  return 0;
602
0
}
603
604
0
unsigned fastEmit_ARMISD_VREV32_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
605
0
  if (RetVT.SimpleTy != MVT::v16i8)
606
0
    return 0;
607
0
  if ((Subtarget->hasMVEIntegerOps())) {
608
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
609
0
  }
610
0
  if ((Subtarget->hasNEON())) {
611
0
    return fastEmitInst_r(ARM::VREV32q8, &ARM::QPRRegClass, Op0);
612
0
  }
613
0
  return 0;
614
0
}
615
616
0
unsigned fastEmit_ARMISD_VREV32_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
617
0
  if (RetVT.SimpleTy != MVT::v4i16)
618
0
    return 0;
619
0
  if ((Subtarget->hasNEON())) {
620
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
621
0
  }
622
0
  return 0;
623
0
}
624
625
0
unsigned fastEmit_ARMISD_VREV32_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
626
0
  if (RetVT.SimpleTy != MVT::v8i16)
627
0
    return 0;
628
0
  if ((Subtarget->hasMVEIntegerOps())) {
629
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
630
0
  }
631
0
  if ((Subtarget->hasNEON())) {
632
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
633
0
  }
634
0
  return 0;
635
0
}
636
637
0
unsigned fastEmit_ARMISD_VREV32_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
638
0
  if (RetVT.SimpleTy != MVT::v4f16)
639
0
    return 0;
640
0
  if ((Subtarget->hasNEON())) {
641
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
642
0
  }
643
0
  return 0;
644
0
}
645
646
0
unsigned fastEmit_ARMISD_VREV32_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
647
0
  if (RetVT.SimpleTy != MVT::v8f16)
648
0
    return 0;
649
0
  if ((Subtarget->hasMVEIntegerOps())) {
650
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
651
0
  }
652
0
  if ((Subtarget->hasNEON())) {
653
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
654
0
  }
655
0
  return 0;
656
0
}
657
658
0
unsigned fastEmit_ARMISD_VREV32_MVT_v4bf16_r(MVT RetVT, unsigned Op0) {
659
0
  if (RetVT.SimpleTy != MVT::v4bf16)
660
0
    return 0;
661
0
  if ((Subtarget->hasNEON())) {
662
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
663
0
  }
664
0
  return 0;
665
0
}
666
667
0
unsigned fastEmit_ARMISD_VREV32_MVT_v8bf16_r(MVT RetVT, unsigned Op0) {
668
0
  if (RetVT.SimpleTy != MVT::v8bf16)
669
0
    return 0;
670
0
  if ((Subtarget->hasNEON())) {
671
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
672
0
  }
673
0
  return 0;
674
0
}
675
676
0
unsigned fastEmit_ARMISD_VREV32_r(MVT VT, MVT RetVT, unsigned Op0) {
677
0
  switch (VT.SimpleTy) {
678
0
  case MVT::v8i8: return fastEmit_ARMISD_VREV32_MVT_v8i8_r(RetVT, Op0);
679
0
  case MVT::v16i8: return fastEmit_ARMISD_VREV32_MVT_v16i8_r(RetVT, Op0);
680
0
  case MVT::v4i16: return fastEmit_ARMISD_VREV32_MVT_v4i16_r(RetVT, Op0);
681
0
  case MVT::v8i16: return fastEmit_ARMISD_VREV32_MVT_v8i16_r(RetVT, Op0);
682
0
  case MVT::v4f16: return fastEmit_ARMISD_VREV32_MVT_v4f16_r(RetVT, Op0);
683
0
  case MVT::v8f16: return fastEmit_ARMISD_VREV32_MVT_v8f16_r(RetVT, Op0);
684
0
  case MVT::v4bf16: return fastEmit_ARMISD_VREV32_MVT_v4bf16_r(RetVT, Op0);
685
0
  case MVT::v8bf16: return fastEmit_ARMISD_VREV32_MVT_v8bf16_r(RetVT, Op0);
686
0
  default: return 0;
687
0
  }
688
0
}
689
690
// FastEmit functions for ARMISD::VREV64.
691
692
0
unsigned fastEmit_ARMISD_VREV64_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
693
0
  if (RetVT.SimpleTy != MVT::v8i8)
694
0
    return 0;
695
0
  if ((Subtarget->hasNEON())) {
696
0
    return fastEmitInst_r(ARM::VREV64d8, &ARM::DPRRegClass, Op0);
697
0
  }
698
0
  return 0;
699
0
}
700
701
0
unsigned fastEmit_ARMISD_VREV64_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
702
0
  if (RetVT.SimpleTy != MVT::v16i8)
703
0
    return 0;
704
0
  if ((Subtarget->hasMVEIntegerOps())) {
705
0
    return fastEmitInst_r(ARM::MVE_VREV64_8, &ARM::MQPRRegClass, Op0);
706
0
  }
707
0
  if ((Subtarget->hasNEON())) {
708
0
    return fastEmitInst_r(ARM::VREV64q8, &ARM::QPRRegClass, Op0);
709
0
  }
710
0
  return 0;
711
0
}
712
713
0
unsigned fastEmit_ARMISD_VREV64_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
714
0
  if (RetVT.SimpleTy != MVT::v4i16)
715
0
    return 0;
716
0
  if ((Subtarget->hasNEON())) {
717
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
718
0
  }
719
0
  return 0;
720
0
}
721
722
0
unsigned fastEmit_ARMISD_VREV64_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
723
0
  if (RetVT.SimpleTy != MVT::v8i16)
724
0
    return 0;
725
0
  if ((Subtarget->hasMVEIntegerOps())) {
726
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
727
0
  }
728
0
  if ((Subtarget->hasNEON())) {
729
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
730
0
  }
731
0
  return 0;
732
0
}
733
734
0
unsigned fastEmit_ARMISD_VREV64_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
735
0
  if (RetVT.SimpleTy != MVT::v2i32)
736
0
    return 0;
737
0
  if ((Subtarget->hasNEON())) {
738
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
739
0
  }
740
0
  return 0;
741
0
}
742
743
0
unsigned fastEmit_ARMISD_VREV64_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
744
0
  if (RetVT.SimpleTy != MVT::v4i32)
745
0
    return 0;
746
0
  if ((Subtarget->hasMVEIntegerOps())) {
747
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
748
0
  }
749
0
  if ((Subtarget->hasNEON())) {
750
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
751
0
  }
752
0
  return 0;
753
0
}
754
755
0
unsigned fastEmit_ARMISD_VREV64_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
756
0
  if (RetVT.SimpleTy != MVT::v4f16)
757
0
    return 0;
758
0
  if ((Subtarget->hasNEON())) {
759
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
760
0
  }
761
0
  return 0;
762
0
}
763
764
0
unsigned fastEmit_ARMISD_VREV64_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
765
0
  if (RetVT.SimpleTy != MVT::v8f16)
766
0
    return 0;
767
0
  if ((Subtarget->hasMVEIntegerOps())) {
768
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
769
0
  }
770
0
  if ((Subtarget->hasNEON())) {
771
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
772
0
  }
773
0
  return 0;
774
0
}
775
776
0
unsigned fastEmit_ARMISD_VREV64_MVT_v4bf16_r(MVT RetVT, unsigned Op0) {
777
0
  if (RetVT.SimpleTy != MVT::v4bf16)
778
0
    return 0;
779
0
  if ((Subtarget->hasNEON())) {
780
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
781
0
  }
782
0
  return 0;
783
0
}
784
785
0
unsigned fastEmit_ARMISD_VREV64_MVT_v8bf16_r(MVT RetVT, unsigned Op0) {
786
0
  if (RetVT.SimpleTy != MVT::v8bf16)
787
0
    return 0;
788
0
  if ((Subtarget->hasNEON())) {
789
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
790
0
  }
791
0
  return 0;
792
0
}
793
794
0
unsigned fastEmit_ARMISD_VREV64_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
795
0
  if (RetVT.SimpleTy != MVT::v2f32)
796
0
    return 0;
797
0
  if ((Subtarget->hasNEON())) {
798
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
799
0
  }
800
0
  return 0;
801
0
}
802
803
0
unsigned fastEmit_ARMISD_VREV64_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
804
0
  if (RetVT.SimpleTy != MVT::v4f32)
805
0
    return 0;
806
0
  if ((Subtarget->hasMVEIntegerOps())) {
807
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
808
0
  }
809
0
  if ((Subtarget->hasNEON())) {
810
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
811
0
  }
812
0
  return 0;
813
0
}
814
815
0
unsigned fastEmit_ARMISD_VREV64_r(MVT VT, MVT RetVT, unsigned Op0) {
816
0
  switch (VT.SimpleTy) {
817
0
  case MVT::v8i8: return fastEmit_ARMISD_VREV64_MVT_v8i8_r(RetVT, Op0);
818
0
  case MVT::v16i8: return fastEmit_ARMISD_VREV64_MVT_v16i8_r(RetVT, Op0);
819
0
  case MVT::v4i16: return fastEmit_ARMISD_VREV64_MVT_v4i16_r(RetVT, Op0);
820
0
  case MVT::v8i16: return fastEmit_ARMISD_VREV64_MVT_v8i16_r(RetVT, Op0);
821
0
  case MVT::v2i32: return fastEmit_ARMISD_VREV64_MVT_v2i32_r(RetVT, Op0);
822
0
  case MVT::v4i32: return fastEmit_ARMISD_VREV64_MVT_v4i32_r(RetVT, Op0);
823
0
  case MVT::v4f16: return fastEmit_ARMISD_VREV64_MVT_v4f16_r(RetVT, Op0);
824
0
  case MVT::v8f16: return fastEmit_ARMISD_VREV64_MVT_v8f16_r(RetVT, Op0);
825
0
  case MVT::v4bf16: return fastEmit_ARMISD_VREV64_MVT_v4bf16_r(RetVT, Op0);
826
0
  case MVT::v8bf16: return fastEmit_ARMISD_VREV64_MVT_v8bf16_r(RetVT, Op0);
827
0
  case MVT::v2f32: return fastEmit_ARMISD_VREV64_MVT_v2f32_r(RetVT, Op0);
828
0
  case MVT::v4f32: return fastEmit_ARMISD_VREV64_MVT_v4f32_r(RetVT, Op0);
829
0
  default: return 0;
830
0
  }
831
0
}
832
833
// FastEmit functions for ARMISD::WIN__DBZCHK.
834
835
0
unsigned fastEmit_ARMISD_WIN__DBZCHK_MVT_i32_r(MVT RetVT, unsigned Op0) {
836
0
  if (RetVT.SimpleTy != MVT::isVoid)
837
0
    return 0;
838
0
  return fastEmitInst_r(ARM::WIN__DBZCHK, &ARM::tGPRRegClass, Op0);
839
0
}
840
841
0
unsigned fastEmit_ARMISD_WIN__DBZCHK_r(MVT VT, MVT RetVT, unsigned Op0) {
842
0
  switch (VT.SimpleTy) {
843
0
  case MVT::i32: return fastEmit_ARMISD_WIN__DBZCHK_MVT_i32_r(RetVT, Op0);
844
0
  default: return 0;
845
0
  }
846
0
}
847
848
// FastEmit functions for ARMISD::tSECALL.
849
850
0
unsigned fastEmit_ARMISD_tSECALL_MVT_i32_r(MVT RetVT, unsigned Op0) {
851
0
  if (RetVT.SimpleTy != MVT::isVoid)
852
0
    return 0;
853
0
  if ((Subtarget->has8MSecExt()) && (Subtarget->isThumb())) {
854
0
    return fastEmitInst_r(ARM::tBLXNS_CALL, &ARM::GPRnopcRegClass, Op0);
855
0
  }
856
0
  return 0;
857
0
}
858
859
0
unsigned fastEmit_ARMISD_tSECALL_r(MVT VT, MVT RetVT, unsigned Op0) {
860
0
  switch (VT.SimpleTy) {
861
0
  case MVT::i32: return fastEmit_ARMISD_tSECALL_MVT_i32_r(RetVT, Op0);
862
0
  default: return 0;
863
0
  }
864
0
}
865
866
// FastEmit functions for ISD::ABS.
867
868
0
unsigned fastEmit_ISD_ABS_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
869
0
  if (RetVT.SimpleTy != MVT::v8i8)
870
0
    return 0;
871
0
  if ((Subtarget->hasNEON())) {
872
0
    return fastEmitInst_r(ARM::VABSv8i8, &ARM::DPRRegClass, Op0);
873
0
  }
874
0
  return 0;
875
0
}
876
877
0
unsigned fastEmit_ISD_ABS_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
878
0
  if (RetVT.SimpleTy != MVT::v16i8)
879
0
    return 0;
880
0
  if ((Subtarget->hasMVEIntegerOps())) {
881
0
    return fastEmitInst_r(ARM::MVE_VABSs8, &ARM::MQPRRegClass, Op0);
882
0
  }
883
0
  if ((Subtarget->hasNEON())) {
884
0
    return fastEmitInst_r(ARM::VABSv16i8, &ARM::QPRRegClass, Op0);
885
0
  }
886
0
  return 0;
887
0
}
888
889
0
unsigned fastEmit_ISD_ABS_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
890
0
  if (RetVT.SimpleTy != MVT::v4i16)
891
0
    return 0;
892
0
  if ((Subtarget->hasNEON())) {
893
0
    return fastEmitInst_r(ARM::VABSv4i16, &ARM::DPRRegClass, Op0);
894
0
  }
895
0
  return 0;
896
0
}
897
898
0
unsigned fastEmit_ISD_ABS_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
899
0
  if (RetVT.SimpleTy != MVT::v8i16)
900
0
    return 0;
901
0
  if ((Subtarget->hasMVEIntegerOps())) {
902
0
    return fastEmitInst_r(ARM::MVE_VABSs16, &ARM::MQPRRegClass, Op0);
903
0
  }
904
0
  if ((Subtarget->hasNEON())) {
905
0
    return fastEmitInst_r(ARM::VABSv8i16, &ARM::QPRRegClass, Op0);
906
0
  }
907
0
  return 0;
908
0
}
909
910
0
unsigned fastEmit_ISD_ABS_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
911
0
  if (RetVT.SimpleTy != MVT::v2i32)
912
0
    return 0;
913
0
  if ((Subtarget->hasNEON())) {
914
0
    return fastEmitInst_r(ARM::VABSv2i32, &ARM::DPRRegClass, Op0);
915
0
  }
916
0
  return 0;
917
0
}
918
919
0
unsigned fastEmit_ISD_ABS_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
920
0
  if (RetVT.SimpleTy != MVT::v4i32)
921
0
    return 0;
922
0
  if ((Subtarget->hasMVEIntegerOps())) {
923
0
    return fastEmitInst_r(ARM::MVE_VABSs32, &ARM::MQPRRegClass, Op0);
924
0
  }
925
0
  if ((Subtarget->hasNEON())) {
926
0
    return fastEmitInst_r(ARM::VABSv4i32, &ARM::QPRRegClass, Op0);
927
0
  }
928
0
  return 0;
929
0
}
930
931
0
unsigned fastEmit_ISD_ABS_r(MVT VT, MVT RetVT, unsigned Op0) {
932
0
  switch (VT.SimpleTy) {
933
0
  case MVT::v8i8: return fastEmit_ISD_ABS_MVT_v8i8_r(RetVT, Op0);
934
0
  case MVT::v16i8: return fastEmit_ISD_ABS_MVT_v16i8_r(RetVT, Op0);
935
0
  case MVT::v4i16: return fastEmit_ISD_ABS_MVT_v4i16_r(RetVT, Op0);
936
0
  case MVT::v8i16: return fastEmit_ISD_ABS_MVT_v8i16_r(RetVT, Op0);
937
0
  case MVT::v2i32: return fastEmit_ISD_ABS_MVT_v2i32_r(RetVT, Op0);
938
0
  case MVT::v4i32: return fastEmit_ISD_ABS_MVT_v4i32_r(RetVT, Op0);
939
0
  default: return 0;
940
0
  }
941
0
}
942
943
// FastEmit functions for ISD::ANY_EXTEND.
944
945
0
unsigned fastEmit_ISD_ANY_EXTEND_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
946
0
  if (RetVT.SimpleTy != MVT::v8i16)
947
0
    return 0;
948
0
  if ((Subtarget->hasNEON())) {
949
0
    return fastEmitInst_r(ARM::VMOVLuv8i16, &ARM::QPRRegClass, Op0);
950
0
  }
951
0
  return 0;
952
0
}
953
954
0
unsigned fastEmit_ISD_ANY_EXTEND_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
955
0
  if (RetVT.SimpleTy != MVT::v4i32)
956
0
    return 0;
957
0
  if ((Subtarget->hasNEON())) {
958
0
    return fastEmitInst_r(ARM::VMOVLuv4i32, &ARM::QPRRegClass, Op0);
959
0
  }
960
0
  return 0;
961
0
}
962
963
0
unsigned fastEmit_ISD_ANY_EXTEND_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
964
0
  if (RetVT.SimpleTy != MVT::v2i64)
965
0
    return 0;
966
0
  if ((Subtarget->hasNEON())) {
967
0
    return fastEmitInst_r(ARM::VMOVLuv2i64, &ARM::QPRRegClass, Op0);
968
0
  }
969
0
  return 0;
970
0
}
971
972
0
unsigned fastEmit_ISD_ANY_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
973
0
  switch (VT.SimpleTy) {
974
0
  case MVT::v8i8: return fastEmit_ISD_ANY_EXTEND_MVT_v8i8_r(RetVT, Op0);
975
0
  case MVT::v4i16: return fastEmit_ISD_ANY_EXTEND_MVT_v4i16_r(RetVT, Op0);
976
0
  case MVT::v2i32: return fastEmit_ISD_ANY_EXTEND_MVT_v2i32_r(RetVT, Op0);
977
0
  default: return 0;
978
0
  }
979
0
}
980
981
// FastEmit functions for ISD::BITCAST.
982
983
0
unsigned fastEmit_ISD_BITCAST_MVT_i32_r(MVT RetVT, unsigned Op0) {
984
0
  if (RetVT.SimpleTy != MVT::f32)
985
0
    return 0;
986
0
  if ((Subtarget->hasFPRegs()) && (Subtarget->preferVMOVSR() ||!Subtarget->useNEONForSinglePrecisionFP())) {
987
0
    return fastEmitInst_r(ARM::VMOVSR, &ARM::SPRRegClass, Op0);
988
0
  }
989
0
  return 0;
990
0
}
991
992
0
unsigned fastEmit_ISD_BITCAST_MVT_f32_r(MVT RetVT, unsigned Op0) {
993
0
  if (RetVT.SimpleTy != MVT::i32)
994
0
    return 0;
995
0
  if ((Subtarget->hasFPRegs())) {
996
0
    return fastEmitInst_r(ARM::VMOVRS, &ARM::GPRRegClass, Op0);
997
0
  }
998
0
  return 0;
999
0
}
1000
1001
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v8i8_r(unsigned Op0) {
1002
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1003
0
    return fastEmitInst_r(ARM::VREV64d8, &ARM::DPRRegClass, Op0);
1004
0
  }
1005
0
  return 0;
1006
0
}
1007
1008
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v4i16_r(unsigned Op0) {
1009
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1010
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1011
0
  }
1012
0
  return 0;
1013
0
}
1014
1015
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v2i32_r(unsigned Op0) {
1016
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1017
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1018
0
  }
1019
0
  return 0;
1020
0
}
1021
1022
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v4f16_r(unsigned Op0) {
1023
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1024
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1025
0
  }
1026
0
  return 0;
1027
0
}
1028
1029
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v4bf16_r(unsigned Op0) {
1030
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1031
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1032
0
  }
1033
0
  return 0;
1034
0
}
1035
1036
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_MVT_v2f32_r(unsigned Op0) {
1037
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1038
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1039
0
  }
1040
0
  return 0;
1041
0
}
1042
1043
0
unsigned fastEmit_ISD_BITCAST_MVT_f64_r(MVT RetVT, unsigned Op0) {
1044
0
switch (RetVT.SimpleTy) {
1045
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v8i8_r(Op0);
1046
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v4i16_r(Op0);
1047
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v2i32_r(Op0);
1048
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v4f16_r(Op0);
1049
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v4bf16_r(Op0);
1050
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_f64_MVT_v2f32_r(Op0);
1051
0
  default: return 0;
1052
0
}
1053
0
}
1054
1055
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_f64_r(unsigned Op0) {
1056
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1057
0
    return fastEmitInst_r(ARM::VREV64d8, &ARM::DPRRegClass, Op0);
1058
0
  }
1059
0
  return 0;
1060
0
}
1061
1062
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4i16_r(unsigned Op0) {
1063
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1064
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1065
0
  }
1066
0
  return 0;
1067
0
}
1068
1069
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v2i32_r(unsigned Op0) {
1070
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1071
0
    return fastEmitInst_r(ARM::VREV32d8, &ARM::DPRRegClass, Op0);
1072
0
  }
1073
0
  return 0;
1074
0
}
1075
1076
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v1i64_r(unsigned Op0) {
1077
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1078
0
    return fastEmitInst_r(ARM::VREV64d8, &ARM::DPRRegClass, Op0);
1079
0
  }
1080
0
  return 0;
1081
0
}
1082
1083
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4f16_r(unsigned Op0) {
1084
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1085
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1086
0
  }
1087
0
  return 0;
1088
0
}
1089
1090
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4bf16_r(unsigned Op0) {
1091
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1092
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1093
0
  }
1094
0
  return 0;
1095
0
}
1096
1097
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v2f32_r(unsigned Op0) {
1098
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1099
0
    return fastEmitInst_r(ARM::VREV32d8, &ARM::DPRRegClass, Op0);
1100
0
  }
1101
0
  return 0;
1102
0
}
1103
1104
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
1105
0
switch (RetVT.SimpleTy) {
1106
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_f64_r(Op0);
1107
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4i16_r(Op0);
1108
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v2i32_r(Op0);
1109
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v1i64_r(Op0);
1110
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4f16_r(Op0);
1111
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v4bf16_r(Op0);
1112
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v8i8_MVT_v2f32_r(Op0);
1113
0
  default: return 0;
1114
0
}
1115
0
}
1116
1117
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8i16_r(unsigned Op0) {
1118
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1119
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
1120
0
  }
1121
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1122
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1123
0
  }
1124
0
  return 0;
1125
0
}
1126
1127
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v4i32_r(unsigned Op0) {
1128
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1129
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
1130
0
  }
1131
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1132
0
    return fastEmitInst_r(ARM::VREV32q8, &ARM::QPRRegClass, Op0);
1133
0
  }
1134
0
  return 0;
1135
0
}
1136
1137
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v2i64_r(unsigned Op0) {
1138
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1139
0
    return fastEmitInst_r(ARM::MVE_VREV64_8, &ARM::MQPRRegClass, Op0);
1140
0
  }
1141
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1142
0
    return fastEmitInst_r(ARM::VREV64q8, &ARM::QPRRegClass, Op0);
1143
0
  }
1144
0
  return 0;
1145
0
}
1146
1147
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8f16_r(unsigned Op0) {
1148
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1149
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
1150
0
  }
1151
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1152
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1153
0
  }
1154
0
  return 0;
1155
0
}
1156
1157
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8bf16_r(unsigned Op0) {
1158
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1159
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1160
0
  }
1161
0
  return 0;
1162
0
}
1163
1164
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v4f32_r(unsigned Op0) {
1165
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1166
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
1167
0
  }
1168
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1169
0
    return fastEmitInst_r(ARM::VREV32q8, &ARM::QPRRegClass, Op0);
1170
0
  }
1171
0
  return 0;
1172
0
}
1173
1174
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v2f64_r(unsigned Op0) {
1175
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1176
0
    return fastEmitInst_r(ARM::MVE_VREV64_8, &ARM::MQPRRegClass, Op0);
1177
0
  }
1178
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1179
0
    return fastEmitInst_r(ARM::VREV64q8, &ARM::QPRRegClass, Op0);
1180
0
  }
1181
0
  return 0;
1182
0
}
1183
1184
0
unsigned fastEmit_ISD_BITCAST_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
1185
0
switch (RetVT.SimpleTy) {
1186
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8i16_r(Op0);
1187
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v4i32_r(Op0);
1188
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v2i64_r(Op0);
1189
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8f16_r(Op0);
1190
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v8bf16_r(Op0);
1191
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v4f32_r(Op0);
1192
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v16i8_MVT_v2f64_r(Op0);
1193
0
  default: return 0;
1194
0
}
1195
0
}
1196
1197
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_MVT_f64_r(unsigned Op0) {
1198
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1199
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1200
0
  }
1201
0
  return 0;
1202
0
}
1203
1204
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v8i8_r(unsigned Op0) {
1205
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1206
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1207
0
  }
1208
0
  return 0;
1209
0
}
1210
1211
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v2i32_r(unsigned Op0) {
1212
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1213
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1214
0
  }
1215
0
  return 0;
1216
0
}
1217
1218
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v1i64_r(unsigned Op0) {
1219
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1220
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1221
0
  }
1222
0
  return 0;
1223
0
}
1224
1225
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v2f32_r(unsigned Op0) {
1226
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1227
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1228
0
  }
1229
0
  return 0;
1230
0
}
1231
1232
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
1233
0
switch (RetVT.SimpleTy) {
1234
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v4i16_MVT_f64_r(Op0);
1235
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v8i8_r(Op0);
1236
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v2i32_r(Op0);
1237
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v1i64_r(Op0);
1238
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v4i16_MVT_v2f32_r(Op0);
1239
0
  default: return 0;
1240
0
}
1241
0
}
1242
1243
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v16i8_r(unsigned Op0) {
1244
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1245
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
1246
0
  }
1247
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1248
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1249
0
  }
1250
0
  return 0;
1251
0
}
1252
1253
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v4i32_r(unsigned Op0) {
1254
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1255
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1256
0
  }
1257
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1258
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1259
0
  }
1260
0
  return 0;
1261
0
}
1262
1263
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v2i64_r(unsigned Op0) {
1264
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1265
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1266
0
  }
1267
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1268
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1269
0
  }
1270
0
  return 0;
1271
0
}
1272
1273
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v4f32_r(unsigned Op0) {
1274
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1275
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1276
0
  }
1277
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1278
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1279
0
  }
1280
0
  return 0;
1281
0
}
1282
1283
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v2f64_r(unsigned Op0) {
1284
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1285
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1286
0
  }
1287
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1288
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1289
0
  }
1290
0
  return 0;
1291
0
}
1292
1293
0
unsigned fastEmit_ISD_BITCAST_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
1294
0
switch (RetVT.SimpleTy) {
1295
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v16i8_r(Op0);
1296
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v4i32_r(Op0);
1297
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v2i64_r(Op0);
1298
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v4f32_r(Op0);
1299
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v8i16_MVT_v2f64_r(Op0);
1300
0
  default: return 0;
1301
0
}
1302
0
}
1303
1304
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_f64_r(unsigned Op0) {
1305
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1306
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1307
0
  }
1308
0
  return 0;
1309
0
}
1310
1311
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v8i8_r(unsigned Op0) {
1312
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1313
0
    return fastEmitInst_r(ARM::VREV32d8, &ARM::DPRRegClass, Op0);
1314
0
  }
1315
0
  return 0;
1316
0
}
1317
1318
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4i16_r(unsigned Op0) {
1319
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1320
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1321
0
  }
1322
0
  return 0;
1323
0
}
1324
1325
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v1i64_r(unsigned Op0) {
1326
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1327
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1328
0
  }
1329
0
  return 0;
1330
0
}
1331
1332
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4f16_r(unsigned Op0) {
1333
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1334
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1335
0
  }
1336
0
  return 0;
1337
0
}
1338
1339
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4bf16_r(unsigned Op0) {
1340
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1341
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1342
0
  }
1343
0
  return 0;
1344
0
}
1345
1346
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
1347
0
switch (RetVT.SimpleTy) {
1348
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_f64_r(Op0);
1349
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v8i8_r(Op0);
1350
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4i16_r(Op0);
1351
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v1i64_r(Op0);
1352
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4f16_r(Op0);
1353
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_v2i32_MVT_v4bf16_r(Op0);
1354
0
  default: return 0;
1355
0
}
1356
0
}
1357
1358
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v16i8_r(unsigned Op0) {
1359
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1360
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
1361
0
  }
1362
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1363
0
    return fastEmitInst_r(ARM::VREV32q8, &ARM::QPRRegClass, Op0);
1364
0
  }
1365
0
  return 0;
1366
0
}
1367
1368
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8i16_r(unsigned Op0) {
1369
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1370
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1371
0
  }
1372
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1373
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1374
0
  }
1375
0
  return 0;
1376
0
}
1377
1378
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v2i64_r(unsigned Op0) {
1379
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1380
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1381
0
  }
1382
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1383
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1384
0
  }
1385
0
  return 0;
1386
0
}
1387
1388
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8f16_r(unsigned Op0) {
1389
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1390
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1391
0
  }
1392
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1393
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1394
0
  }
1395
0
  return 0;
1396
0
}
1397
1398
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8bf16_r(unsigned Op0) {
1399
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1400
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1401
0
  }
1402
0
  return 0;
1403
0
}
1404
1405
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v2f64_r(unsigned Op0) {
1406
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1407
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1408
0
  }
1409
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1410
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1411
0
  }
1412
0
  return 0;
1413
0
}
1414
1415
0
unsigned fastEmit_ISD_BITCAST_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
1416
0
switch (RetVT.SimpleTy) {
1417
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v16i8_r(Op0);
1418
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8i16_r(Op0);
1419
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v2i64_r(Op0);
1420
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8f16_r(Op0);
1421
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v8bf16_r(Op0);
1422
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v4i32_MVT_v2f64_r(Op0);
1423
0
  default: return 0;
1424
0
}
1425
0
}
1426
1427
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v8i8_r(unsigned Op0) {
1428
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1429
0
    return fastEmitInst_r(ARM::VREV64d8, &ARM::DPRRegClass, Op0);
1430
0
  }
1431
0
  return 0;
1432
0
}
1433
1434
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4i16_r(unsigned Op0) {
1435
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1436
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1437
0
  }
1438
0
  return 0;
1439
0
}
1440
1441
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v2i32_r(unsigned Op0) {
1442
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1443
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1444
0
  }
1445
0
  return 0;
1446
0
}
1447
1448
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4f16_r(unsigned Op0) {
1449
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1450
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1451
0
  }
1452
0
  return 0;
1453
0
}
1454
1455
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4bf16_r(unsigned Op0) {
1456
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1457
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1458
0
  }
1459
0
  return 0;
1460
0
}
1461
1462
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v2f32_r(unsigned Op0) {
1463
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1464
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1465
0
  }
1466
0
  return 0;
1467
0
}
1468
1469
0
unsigned fastEmit_ISD_BITCAST_MVT_v1i64_r(MVT RetVT, unsigned Op0) {
1470
0
switch (RetVT.SimpleTy) {
1471
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v8i8_r(Op0);
1472
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4i16_r(Op0);
1473
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v2i32_r(Op0);
1474
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4f16_r(Op0);
1475
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v4bf16_r(Op0);
1476
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v1i64_MVT_v2f32_r(Op0);
1477
0
  default: return 0;
1478
0
}
1479
0
}
1480
1481
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v16i8_r(unsigned Op0) {
1482
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1483
0
    return fastEmitInst_r(ARM::MVE_VREV64_8, &ARM::MQPRRegClass, Op0);
1484
0
  }
1485
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1486
0
    return fastEmitInst_r(ARM::VREV64q8, &ARM::QPRRegClass, Op0);
1487
0
  }
1488
0
  return 0;
1489
0
}
1490
1491
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8i16_r(unsigned Op0) {
1492
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1493
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1494
0
  }
1495
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1496
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1497
0
  }
1498
0
  return 0;
1499
0
}
1500
1501
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v4i32_r(unsigned Op0) {
1502
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1503
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1504
0
  }
1505
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1506
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1507
0
  }
1508
0
  return 0;
1509
0
}
1510
1511
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8f16_r(unsigned Op0) {
1512
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1513
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1514
0
  }
1515
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1516
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1517
0
  }
1518
0
  return 0;
1519
0
}
1520
1521
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8bf16_r(unsigned Op0) {
1522
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1523
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1524
0
  }
1525
0
  return 0;
1526
0
}
1527
1528
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v4f32_r(unsigned Op0) {
1529
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1530
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1531
0
  }
1532
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1533
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1534
0
  }
1535
0
  return 0;
1536
0
}
1537
1538
0
unsigned fastEmit_ISD_BITCAST_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
1539
0
switch (RetVT.SimpleTy) {
1540
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v16i8_r(Op0);
1541
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8i16_r(Op0);
1542
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v4i32_r(Op0);
1543
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8f16_r(Op0);
1544
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v8bf16_r(Op0);
1545
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v2i64_MVT_v4f32_r(Op0);
1546
0
  default: return 0;
1547
0
}
1548
0
}
1549
1550
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_MVT_f64_r(unsigned Op0) {
1551
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1552
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1553
0
  }
1554
0
  return 0;
1555
0
}
1556
1557
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v8i8_r(unsigned Op0) {
1558
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1559
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1560
0
  }
1561
0
  return 0;
1562
0
}
1563
1564
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v2i32_r(unsigned Op0) {
1565
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1566
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1567
0
  }
1568
0
  return 0;
1569
0
}
1570
1571
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v1i64_r(unsigned Op0) {
1572
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1573
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1574
0
  }
1575
0
  return 0;
1576
0
}
1577
1578
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v2f32_r(unsigned Op0) {
1579
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1580
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1581
0
  }
1582
0
  return 0;
1583
0
}
1584
1585
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
1586
0
switch (RetVT.SimpleTy) {
1587
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v4f16_MVT_f64_r(Op0);
1588
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v8i8_r(Op0);
1589
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v2i32_r(Op0);
1590
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v1i64_r(Op0);
1591
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v4f16_MVT_v2f32_r(Op0);
1592
0
  default: return 0;
1593
0
}
1594
0
}
1595
1596
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v16i8_r(unsigned Op0) {
1597
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1598
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
1599
0
  }
1600
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1601
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1602
0
  }
1603
0
  return 0;
1604
0
}
1605
1606
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v4i32_r(unsigned Op0) {
1607
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1608
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1609
0
  }
1610
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1611
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1612
0
  }
1613
0
  return 0;
1614
0
}
1615
1616
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v2i64_r(unsigned Op0) {
1617
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1618
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1619
0
  }
1620
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1621
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1622
0
  }
1623
0
  return 0;
1624
0
}
1625
1626
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v4f32_r(unsigned Op0) {
1627
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1628
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1629
0
  }
1630
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1631
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1632
0
  }
1633
0
  return 0;
1634
0
}
1635
1636
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v2f64_r(unsigned Op0) {
1637
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1638
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1639
0
  }
1640
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1641
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1642
0
  }
1643
0
  return 0;
1644
0
}
1645
1646
0
unsigned fastEmit_ISD_BITCAST_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
1647
0
switch (RetVT.SimpleTy) {
1648
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v16i8_r(Op0);
1649
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v4i32_r(Op0);
1650
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v2i64_r(Op0);
1651
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v4f32_r(Op0);
1652
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v8f16_MVT_v2f64_r(Op0);
1653
0
  default: return 0;
1654
0
}
1655
0
}
1656
1657
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_f64_r(unsigned Op0) {
1658
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1659
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1660
0
  }
1661
0
  return 0;
1662
0
}
1663
1664
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v8i8_r(unsigned Op0) {
1665
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1666
0
    return fastEmitInst_r(ARM::VREV16d8, &ARM::DPRRegClass, Op0);
1667
0
  }
1668
0
  return 0;
1669
0
}
1670
1671
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v2i32_r(unsigned Op0) {
1672
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1673
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1674
0
  }
1675
0
  return 0;
1676
0
}
1677
1678
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v1i64_r(unsigned Op0) {
1679
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1680
0
    return fastEmitInst_r(ARM::VREV64d16, &ARM::DPRRegClass, Op0);
1681
0
  }
1682
0
  return 0;
1683
0
}
1684
1685
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v2f32_r(unsigned Op0) {
1686
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1687
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1688
0
  }
1689
0
  return 0;
1690
0
}
1691
1692
0
unsigned fastEmit_ISD_BITCAST_MVT_v4bf16_r(MVT RetVT, unsigned Op0) {
1693
0
switch (RetVT.SimpleTy) {
1694
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_f64_r(Op0);
1695
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v8i8_r(Op0);
1696
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v2i32_r(Op0);
1697
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v1i64_r(Op0);
1698
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v4bf16_MVT_v2f32_r(Op0);
1699
0
  default: return 0;
1700
0
}
1701
0
}
1702
1703
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v16i8_r(unsigned Op0) {
1704
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1705
0
    return fastEmitInst_r(ARM::VREV16q8, &ARM::QPRRegClass, Op0);
1706
0
  }
1707
0
  return 0;
1708
0
}
1709
1710
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v4i32_r(unsigned Op0) {
1711
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1712
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1713
0
  }
1714
0
  return 0;
1715
0
}
1716
1717
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v2i64_r(unsigned Op0) {
1718
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1719
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1720
0
  }
1721
0
  return 0;
1722
0
}
1723
1724
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v4f32_r(unsigned Op0) {
1725
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1726
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1727
0
  }
1728
0
  return 0;
1729
0
}
1730
1731
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v2f64_r(unsigned Op0) {
1732
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1733
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1734
0
  }
1735
0
  return 0;
1736
0
}
1737
1738
0
unsigned fastEmit_ISD_BITCAST_MVT_v8bf16_r(MVT RetVT, unsigned Op0) {
1739
0
switch (RetVT.SimpleTy) {
1740
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v16i8_r(Op0);
1741
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v4i32_r(Op0);
1742
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v2i64_r(Op0);
1743
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v4f32_r(Op0);
1744
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v8bf16_MVT_v2f64_r(Op0);
1745
0
  default: return 0;
1746
0
}
1747
0
}
1748
1749
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_f64_r(unsigned Op0) {
1750
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1751
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1752
0
  }
1753
0
  return 0;
1754
0
}
1755
1756
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v8i8_r(unsigned Op0) {
1757
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1758
0
    return fastEmitInst_r(ARM::VREV32d8, &ARM::DPRRegClass, Op0);
1759
0
  }
1760
0
  return 0;
1761
0
}
1762
1763
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4i16_r(unsigned Op0) {
1764
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1765
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1766
0
  }
1767
0
  return 0;
1768
0
}
1769
1770
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v1i64_r(unsigned Op0) {
1771
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1772
0
    return fastEmitInst_r(ARM::VREV64d32, &ARM::DPRRegClass, Op0);
1773
0
  }
1774
0
  return 0;
1775
0
}
1776
1777
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4f16_r(unsigned Op0) {
1778
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1779
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1780
0
  }
1781
0
  return 0;
1782
0
}
1783
1784
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4bf16_r(unsigned Op0) {
1785
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1786
0
    return fastEmitInst_r(ARM::VREV32d16, &ARM::DPRRegClass, Op0);
1787
0
  }
1788
0
  return 0;
1789
0
}
1790
1791
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
1792
0
switch (RetVT.SimpleTy) {
1793
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_f64_r(Op0);
1794
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v8i8_r(Op0);
1795
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4i16_r(Op0);
1796
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v1i64_r(Op0);
1797
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4f16_r(Op0);
1798
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_v2f32_MVT_v4bf16_r(Op0);
1799
0
  default: return 0;
1800
0
}
1801
0
}
1802
1803
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v16i8_r(unsigned Op0) {
1804
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1805
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
1806
0
  }
1807
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1808
0
    return fastEmitInst_r(ARM::VREV32q8, &ARM::QPRRegClass, Op0);
1809
0
  }
1810
0
  return 0;
1811
0
}
1812
1813
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8i16_r(unsigned Op0) {
1814
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1815
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1816
0
  }
1817
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1818
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1819
0
  }
1820
0
  return 0;
1821
0
}
1822
1823
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v2i64_r(unsigned Op0) {
1824
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1825
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1826
0
  }
1827
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1828
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1829
0
  }
1830
0
  return 0;
1831
0
}
1832
1833
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8f16_r(unsigned Op0) {
1834
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1835
0
    return fastEmitInst_r(ARM::MVE_VREV32_16, &ARM::MQPRRegClass, Op0);
1836
0
  }
1837
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1838
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1839
0
  }
1840
0
  return 0;
1841
0
}
1842
1843
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8bf16_r(unsigned Op0) {
1844
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1845
0
    return fastEmitInst_r(ARM::VREV32q16, &ARM::QPRRegClass, Op0);
1846
0
  }
1847
0
  return 0;
1848
0
}
1849
1850
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v2f64_r(unsigned Op0) {
1851
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1852
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1853
0
  }
1854
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1855
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1856
0
  }
1857
0
  return 0;
1858
0
}
1859
1860
0
unsigned fastEmit_ISD_BITCAST_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
1861
0
switch (RetVT.SimpleTy) {
1862
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v16i8_r(Op0);
1863
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8i16_r(Op0);
1864
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v2i64_r(Op0);
1865
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8f16_r(Op0);
1866
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v8bf16_r(Op0);
1867
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v4f32_MVT_v2f64_r(Op0);
1868
0
  default: return 0;
1869
0
}
1870
0
}
1871
1872
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v16i8_r(unsigned Op0) {
1873
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1874
0
    return fastEmitInst_r(ARM::MVE_VREV64_8, &ARM::MQPRRegClass, Op0);
1875
0
  }
1876
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1877
0
    return fastEmitInst_r(ARM::VREV64q8, &ARM::QPRRegClass, Op0);
1878
0
  }
1879
0
  return 0;
1880
0
}
1881
1882
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8i16_r(unsigned Op0) {
1883
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1884
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1885
0
  }
1886
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1887
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1888
0
  }
1889
0
  return 0;
1890
0
}
1891
1892
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v4i32_r(unsigned Op0) {
1893
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1894
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1895
0
  }
1896
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1897
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1898
0
  }
1899
0
  return 0;
1900
0
}
1901
1902
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8f16_r(unsigned Op0) {
1903
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1904
0
    return fastEmitInst_r(ARM::MVE_VREV64_16, &ARM::MQPRRegClass, Op0);
1905
0
  }
1906
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1907
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1908
0
  }
1909
0
  return 0;
1910
0
}
1911
1912
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8bf16_r(unsigned Op0) {
1913
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1914
0
    return fastEmitInst_r(ARM::VREV64q16, &ARM::QPRRegClass, Op0);
1915
0
  }
1916
0
  return 0;
1917
0
}
1918
1919
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v4f32_r(unsigned Op0) {
1920
0
  if ((Subtarget->hasMVEIntegerOps()) && (MF->getDataLayout().isBigEndian())) {
1921
0
    return fastEmitInst_r(ARM::MVE_VREV64_32, &ARM::MQPRRegClass, Op0);
1922
0
  }
1923
0
  if ((Subtarget->hasNEON()) && (MF->getDataLayout().isBigEndian())) {
1924
0
    return fastEmitInst_r(ARM::VREV64q32, &ARM::QPRRegClass, Op0);
1925
0
  }
1926
0
  return 0;
1927
0
}
1928
1929
0
unsigned fastEmit_ISD_BITCAST_MVT_v2f64_r(MVT RetVT, unsigned Op0) {
1930
0
switch (RetVT.SimpleTy) {
1931
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v16i8_r(Op0);
1932
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8i16_r(Op0);
1933
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v4i32_r(Op0);
1934
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8f16_r(Op0);
1935
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v8bf16_r(Op0);
1936
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v2f64_MVT_v4f32_r(Op0);
1937
0
  default: return 0;
1938
0
}
1939
0
}
1940
1941
0
unsigned fastEmit_ISD_BITCAST_r(MVT VT, MVT RetVT, unsigned Op0) {
1942
0
  switch (VT.SimpleTy) {
1943
0
  case MVT::i32: return fastEmit_ISD_BITCAST_MVT_i32_r(RetVT, Op0);
1944
0
  case MVT::f32: return fastEmit_ISD_BITCAST_MVT_f32_r(RetVT, Op0);
1945
0
  case MVT::f64: return fastEmit_ISD_BITCAST_MVT_f64_r(RetVT, Op0);
1946
0
  case MVT::v8i8: return fastEmit_ISD_BITCAST_MVT_v8i8_r(RetVT, Op0);
1947
0
  case MVT::v16i8: return fastEmit_ISD_BITCAST_MVT_v16i8_r(RetVT, Op0);
1948
0
  case MVT::v4i16: return fastEmit_ISD_BITCAST_MVT_v4i16_r(RetVT, Op0);
1949
0
  case MVT::v8i16: return fastEmit_ISD_BITCAST_MVT_v8i16_r(RetVT, Op0);
1950
0
  case MVT::v2i32: return fastEmit_ISD_BITCAST_MVT_v2i32_r(RetVT, Op0);
1951
0
  case MVT::v4i32: return fastEmit_ISD_BITCAST_MVT_v4i32_r(RetVT, Op0);
1952
0
  case MVT::v1i64: return fastEmit_ISD_BITCAST_MVT_v1i64_r(RetVT, Op0);
1953
0
  case MVT::v2i64: return fastEmit_ISD_BITCAST_MVT_v2i64_r(RetVT, Op0);
1954
0
  case MVT::v4f16: return fastEmit_ISD_BITCAST_MVT_v4f16_r(RetVT, Op0);
1955
0
  case MVT::v8f16: return fastEmit_ISD_BITCAST_MVT_v8f16_r(RetVT, Op0);
1956
0
  case MVT::v4bf16: return fastEmit_ISD_BITCAST_MVT_v4bf16_r(RetVT, Op0);
1957
0
  case MVT::v8bf16: return fastEmit_ISD_BITCAST_MVT_v8bf16_r(RetVT, Op0);
1958
0
  case MVT::v2f32: return fastEmit_ISD_BITCAST_MVT_v2f32_r(RetVT, Op0);
1959
0
  case MVT::v4f32: return fastEmit_ISD_BITCAST_MVT_v4f32_r(RetVT, Op0);
1960
0
  case MVT::v2f64: return fastEmit_ISD_BITCAST_MVT_v2f64_r(RetVT, Op0);
1961
0
  default: return 0;
1962
0
  }
1963
0
}
1964
1965
// FastEmit functions for ISD::BITREVERSE.
1966
1967
0
unsigned fastEmit_ISD_BITREVERSE_MVT_i32_r(MVT RetVT, unsigned Op0) {
1968
0
  if (RetVT.SimpleTy != MVT::i32)
1969
0
    return 0;
1970
0
  if ((Subtarget->isThumb2())) {
1971
0
    return fastEmitInst_r(ARM::t2RBIT, &ARM::rGPRRegClass, Op0);
1972
0
  }
1973
0
  if ((Subtarget->hasV6T2Ops()) && (!Subtarget->isThumb())) {
1974
0
    return fastEmitInst_r(ARM::RBIT, &ARM::GPRRegClass, Op0);
1975
0
  }
1976
0
  return 0;
1977
0
}
1978
1979
0
unsigned fastEmit_ISD_BITREVERSE_r(MVT VT, MVT RetVT, unsigned Op0) {
1980
0
  switch (VT.SimpleTy) {
1981
0
  case MVT::i32: return fastEmit_ISD_BITREVERSE_MVT_i32_r(RetVT, Op0);
1982
0
  default: return 0;
1983
0
  }
1984
0
}
1985
1986
// FastEmit functions for ISD::BRIND.
1987
1988
0
unsigned fastEmit_ISD_BRIND_MVT_i32_r(MVT RetVT, unsigned Op0) {
1989
0
  if (RetVT.SimpleTy != MVT::isVoid)
1990
0
    return 0;
1991
0
  if ((Subtarget->isThumb())) {
1992
0
    return fastEmitInst_r(ARM::tBRIND, &ARM::GPRRegClass, Op0);
1993
0
  }
1994
0
  if ((!Subtarget->isThumb()) && (!Subtarget->hasV4TOps())) {
1995
0
    return fastEmitInst_r(ARM::MOVPCRX, &ARM::GPRRegClass, Op0);
1996
0
  }
1997
0
  if ((Subtarget->hasV4TOps()) && (!Subtarget->isThumb())) {
1998
0
    return fastEmitInst_r(ARM::BX, &ARM::GPRRegClass, Op0);
1999
0
  }
2000
0
  return 0;
2001
0
}
2002
2003
0
unsigned fastEmit_ISD_BRIND_r(MVT VT, MVT RetVT, unsigned Op0) {
2004
0
  switch (VT.SimpleTy) {
2005
0
  case MVT::i32: return fastEmit_ISD_BRIND_MVT_i32_r(RetVT, Op0);
2006
0
  default: return 0;
2007
0
  }
2008
0
}
2009
2010
// FastEmit functions for ISD::BSWAP.
2011
2012
0
unsigned fastEmit_ISD_BSWAP_MVT_i32_r(MVT RetVT, unsigned Op0) {
2013
0
  if (RetVT.SimpleTy != MVT::i32)
2014
0
    return 0;
2015
0
  if ((Subtarget->isThumb2())) {
2016
0
    return fastEmitInst_r(ARM::t2REV, &ARM::rGPRRegClass, Op0);
2017
0
  }
2018
0
  if ((Subtarget->hasV6Ops()) && (Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
2019
0
    return fastEmitInst_r(ARM::tREV, &ARM::tGPRRegClass, Op0);
2020
0
  }
2021
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
2022
0
    return fastEmitInst_r(ARM::REV, &ARM::GPRRegClass, Op0);
2023
0
  }
2024
0
  return 0;
2025
0
}
2026
2027
0
unsigned fastEmit_ISD_BSWAP_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
2028
0
  if (RetVT.SimpleTy != MVT::v8i16)
2029
0
    return 0;
2030
0
  if ((Subtarget->hasMVEIntegerOps())) {
2031
0
    return fastEmitInst_r(ARM::MVE_VREV16_8, &ARM::MQPRRegClass, Op0);
2032
0
  }
2033
0
  return 0;
2034
0
}
2035
2036
0
unsigned fastEmit_ISD_BSWAP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
2037
0
  if (RetVT.SimpleTy != MVT::v4i32)
2038
0
    return 0;
2039
0
  if ((Subtarget->hasMVEIntegerOps())) {
2040
0
    return fastEmitInst_r(ARM::MVE_VREV32_8, &ARM::MQPRRegClass, Op0);
2041
0
  }
2042
0
  return 0;
2043
0
}
2044
2045
0
unsigned fastEmit_ISD_BSWAP_r(MVT VT, MVT RetVT, unsigned Op0) {
2046
0
  switch (VT.SimpleTy) {
2047
0
  case MVT::i32: return fastEmit_ISD_BSWAP_MVT_i32_r(RetVT, Op0);
2048
0
  case MVT::v8i16: return fastEmit_ISD_BSWAP_MVT_v8i16_r(RetVT, Op0);
2049
0
  case MVT::v4i32: return fastEmit_ISD_BSWAP_MVT_v4i32_r(RetVT, Op0);
2050
0
  default: return 0;
2051
0
  }
2052
0
}
2053
2054
// FastEmit functions for ISD::CTLZ.
2055
2056
0
unsigned fastEmit_ISD_CTLZ_MVT_i32_r(MVT RetVT, unsigned Op0) {
2057
0
  if (RetVT.SimpleTy != MVT::i32)
2058
0
    return 0;
2059
0
  if ((Subtarget->isThumb2())) {
2060
0
    return fastEmitInst_r(ARM::t2CLZ, &ARM::rGPRRegClass, Op0);
2061
0
  }
2062
0
  if ((Subtarget->hasV5TOps()) && (!Subtarget->isThumb())) {
2063
0
    return fastEmitInst_r(ARM::CLZ, &ARM::GPRRegClass, Op0);
2064
0
  }
2065
0
  return 0;
2066
0
}
2067
2068
0
unsigned fastEmit_ISD_CTLZ_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
2069
0
  if (RetVT.SimpleTy != MVT::v8i8)
2070
0
    return 0;
2071
0
  if ((Subtarget->hasNEON())) {
2072
0
    return fastEmitInst_r(ARM::VCLZv8i8, &ARM::DPRRegClass, Op0);
2073
0
  }
2074
0
  return 0;
2075
0
}
2076
2077
0
unsigned fastEmit_ISD_CTLZ_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
2078
0
  if (RetVT.SimpleTy != MVT::v16i8)
2079
0
    return 0;
2080
0
  if ((Subtarget->hasMVEIntegerOps())) {
2081
0
    return fastEmitInst_r(ARM::MVE_VCLZs8, &ARM::MQPRRegClass, Op0);
2082
0
  }
2083
0
  if ((Subtarget->hasNEON())) {
2084
0
    return fastEmitInst_r(ARM::VCLZv16i8, &ARM::QPRRegClass, Op0);
2085
0
  }
2086
0
  return 0;
2087
0
}
2088
2089
0
unsigned fastEmit_ISD_CTLZ_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
2090
0
  if (RetVT.SimpleTy != MVT::v4i16)
2091
0
    return 0;
2092
0
  if ((Subtarget->hasNEON())) {
2093
0
    return fastEmitInst_r(ARM::VCLZv4i16, &ARM::DPRRegClass, Op0);
2094
0
  }
2095
0
  return 0;
2096
0
}
2097
2098
0
unsigned fastEmit_ISD_CTLZ_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
2099
0
  if (RetVT.SimpleTy != MVT::v8i16)
2100
0
    return 0;
2101
0
  if ((Subtarget->hasMVEIntegerOps())) {
2102
0
    return fastEmitInst_r(ARM::MVE_VCLZs16, &ARM::MQPRRegClass, Op0);
2103
0
  }
2104
0
  if ((Subtarget->hasNEON())) {
2105
0
    return fastEmitInst_r(ARM::VCLZv8i16, &ARM::QPRRegClass, Op0);
2106
0
  }
2107
0
  return 0;
2108
0
}
2109
2110
0
unsigned fastEmit_ISD_CTLZ_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
2111
0
  if (RetVT.SimpleTy != MVT::v2i32)
2112
0
    return 0;
2113
0
  if ((Subtarget->hasNEON())) {
2114
0
    return fastEmitInst_r(ARM::VCLZv2i32, &ARM::DPRRegClass, Op0);
2115
0
  }
2116
0
  return 0;
2117
0
}
2118
2119
0
unsigned fastEmit_ISD_CTLZ_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
2120
0
  if (RetVT.SimpleTy != MVT::v4i32)
2121
0
    return 0;
2122
0
  if ((Subtarget->hasMVEIntegerOps())) {
2123
0
    return fastEmitInst_r(ARM::MVE_VCLZs32, &ARM::MQPRRegClass, Op0);
2124
0
  }
2125
0
  if ((Subtarget->hasNEON())) {
2126
0
    return fastEmitInst_r(ARM::VCLZv4i32, &ARM::QPRRegClass, Op0);
2127
0
  }
2128
0
  return 0;
2129
0
}
2130
2131
0
unsigned fastEmit_ISD_CTLZ_r(MVT VT, MVT RetVT, unsigned Op0) {
2132
0
  switch (VT.SimpleTy) {
2133
0
  case MVT::i32: return fastEmit_ISD_CTLZ_MVT_i32_r(RetVT, Op0);
2134
0
  case MVT::v8i8: return fastEmit_ISD_CTLZ_MVT_v8i8_r(RetVT, Op0);
2135
0
  case MVT::v16i8: return fastEmit_ISD_CTLZ_MVT_v16i8_r(RetVT, Op0);
2136
0
  case MVT::v4i16: return fastEmit_ISD_CTLZ_MVT_v4i16_r(RetVT, Op0);
2137
0
  case MVT::v8i16: return fastEmit_ISD_CTLZ_MVT_v8i16_r(RetVT, Op0);
2138
0
  case MVT::v2i32: return fastEmit_ISD_CTLZ_MVT_v2i32_r(RetVT, Op0);
2139
0
  case MVT::v4i32: return fastEmit_ISD_CTLZ_MVT_v4i32_r(RetVT, Op0);
2140
0
  default: return 0;
2141
0
  }
2142
0
}
2143
2144
// FastEmit functions for ISD::CTPOP.
2145
2146
0
unsigned fastEmit_ISD_CTPOP_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
2147
0
  if (RetVT.SimpleTy != MVT::v8i8)
2148
0
    return 0;
2149
0
  if ((Subtarget->hasNEON())) {
2150
0
    return fastEmitInst_r(ARM::VCNTd, &ARM::DPRRegClass, Op0);
2151
0
  }
2152
0
  return 0;
2153
0
}
2154
2155
0
unsigned fastEmit_ISD_CTPOP_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
2156
0
  if (RetVT.SimpleTy != MVT::v16i8)
2157
0
    return 0;
2158
0
  if ((Subtarget->hasNEON())) {
2159
0
    return fastEmitInst_r(ARM::VCNTq, &ARM::QPRRegClass, Op0);
2160
0
  }
2161
0
  return 0;
2162
0
}
2163
2164
0
unsigned fastEmit_ISD_CTPOP_r(MVT VT, MVT RetVT, unsigned Op0) {
2165
0
  switch (VT.SimpleTy) {
2166
0
  case MVT::v8i8: return fastEmit_ISD_CTPOP_MVT_v8i8_r(RetVT, Op0);
2167
0
  case MVT::v16i8: return fastEmit_ISD_CTPOP_MVT_v16i8_r(RetVT, Op0);
2168
0
  default: return 0;
2169
0
  }
2170
0
}
2171
2172
// FastEmit functions for ISD::FABS.
2173
2174
0
unsigned fastEmit_ISD_FABS_MVT_f16_r(MVT RetVT, unsigned Op0) {
2175
0
  if (RetVT.SimpleTy != MVT::f16)
2176
0
    return 0;
2177
0
  if ((Subtarget->hasFullFP16())) {
2178
0
    return fastEmitInst_r(ARM::VABSH, &ARM::HPRRegClass, Op0);
2179
0
  }
2180
0
  return 0;
2181
0
}
2182
2183
0
unsigned fastEmit_ISD_FABS_MVT_f32_r(MVT RetVT, unsigned Op0) {
2184
0
  if (RetVT.SimpleTy != MVT::f32)
2185
0
    return 0;
2186
0
  if ((!Subtarget->useNEONForSinglePrecisionFP()) && (Subtarget->hasVFP2Base())) {
2187
0
    return fastEmitInst_r(ARM::VABSS, &ARM::SPRRegClass, Op0);
2188
0
  }
2189
0
  return 0;
2190
0
}
2191
2192
0
unsigned fastEmit_ISD_FABS_MVT_f64_r(MVT RetVT, unsigned Op0) {
2193
0
  if (RetVT.SimpleTy != MVT::f64)
2194
0
    return 0;
2195
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
2196
0
    return fastEmitInst_r(ARM::VABSD, &ARM::DPRRegClass, Op0);
2197
0
  }
2198
0
  return 0;
2199
0
}
2200
2201
0
unsigned fastEmit_ISD_FABS_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
2202
0
  if (RetVT.SimpleTy != MVT::v4f16)
2203
0
    return 0;
2204
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2205
0
    return fastEmitInst_r(ARM::VABShd, &ARM::DPRRegClass, Op0);
2206
0
  }
2207
0
  return 0;
2208
0
}
2209
2210
0
unsigned fastEmit_ISD_FABS_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2211
0
  if (RetVT.SimpleTy != MVT::v8f16)
2212
0
    return 0;
2213
0
  if ((Subtarget->hasMVEIntegerOps())) {
2214
0
    return fastEmitInst_r(ARM::MVE_VABSf16, &ARM::MQPRRegClass, Op0);
2215
0
  }
2216
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2217
0
    return fastEmitInst_r(ARM::VABShq, &ARM::QPRRegClass, Op0);
2218
0
  }
2219
0
  return 0;
2220
0
}
2221
2222
0
unsigned fastEmit_ISD_FABS_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
2223
0
  if (RetVT.SimpleTy != MVT::v2f32)
2224
0
    return 0;
2225
0
  if ((Subtarget->hasNEON())) {
2226
0
    return fastEmitInst_r(ARM::VABSfd, &ARM::DPRRegClass, Op0);
2227
0
  }
2228
0
  return 0;
2229
0
}
2230
2231
0
unsigned fastEmit_ISD_FABS_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2232
0
  if (RetVT.SimpleTy != MVT::v4f32)
2233
0
    return 0;
2234
0
  if ((Subtarget->hasMVEIntegerOps())) {
2235
0
    return fastEmitInst_r(ARM::MVE_VABSf32, &ARM::MQPRRegClass, Op0);
2236
0
  }
2237
0
  if ((Subtarget->hasNEON())) {
2238
0
    return fastEmitInst_r(ARM::VABSfq, &ARM::QPRRegClass, Op0);
2239
0
  }
2240
0
  return 0;
2241
0
}
2242
2243
0
unsigned fastEmit_ISD_FABS_r(MVT VT, MVT RetVT, unsigned Op0) {
2244
0
  switch (VT.SimpleTy) {
2245
0
  case MVT::f16: return fastEmit_ISD_FABS_MVT_f16_r(RetVT, Op0);
2246
0
  case MVT::f32: return fastEmit_ISD_FABS_MVT_f32_r(RetVT, Op0);
2247
0
  case MVT::f64: return fastEmit_ISD_FABS_MVT_f64_r(RetVT, Op0);
2248
0
  case MVT::v4f16: return fastEmit_ISD_FABS_MVT_v4f16_r(RetVT, Op0);
2249
0
  case MVT::v8f16: return fastEmit_ISD_FABS_MVT_v8f16_r(RetVT, Op0);
2250
0
  case MVT::v2f32: return fastEmit_ISD_FABS_MVT_v2f32_r(RetVT, Op0);
2251
0
  case MVT::v4f32: return fastEmit_ISD_FABS_MVT_v4f32_r(RetVT, Op0);
2252
0
  default: return 0;
2253
0
  }
2254
0
}
2255
2256
// FastEmit functions for ISD::FCEIL.
2257
2258
0
unsigned fastEmit_ISD_FCEIL_MVT_f16_r(MVT RetVT, unsigned Op0) {
2259
0
  if (RetVT.SimpleTy != MVT::f16)
2260
0
    return 0;
2261
0
  if ((Subtarget->hasFullFP16())) {
2262
0
    return fastEmitInst_r(ARM::VRINTPH, &ARM::HPRRegClass, Op0);
2263
0
  }
2264
0
  return 0;
2265
0
}
2266
2267
0
unsigned fastEmit_ISD_FCEIL_MVT_f32_r(MVT RetVT, unsigned Op0) {
2268
0
  if (RetVT.SimpleTy != MVT::f32)
2269
0
    return 0;
2270
0
  if ((Subtarget->hasFPARMv8Base())) {
2271
0
    return fastEmitInst_r(ARM::VRINTPS, &ARM::SPRRegClass, Op0);
2272
0
  }
2273
0
  return 0;
2274
0
}
2275
2276
0
unsigned fastEmit_ISD_FCEIL_MVT_f64_r(MVT RetVT, unsigned Op0) {
2277
0
  if (RetVT.SimpleTy != MVT::f64)
2278
0
    return 0;
2279
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2280
0
    return fastEmitInst_r(ARM::VRINTPD, &ARM::DPRRegClass, Op0);
2281
0
  }
2282
0
  return 0;
2283
0
}
2284
2285
0
unsigned fastEmit_ISD_FCEIL_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2286
0
  if (RetVT.SimpleTy != MVT::v8f16)
2287
0
    return 0;
2288
0
  if ((Subtarget->hasMVEFloatOps())) {
2289
0
    return fastEmitInst_r(ARM::MVE_VRINTf16P, &ARM::MQPRRegClass, Op0);
2290
0
  }
2291
0
  return 0;
2292
0
}
2293
2294
0
unsigned fastEmit_ISD_FCEIL_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2295
0
  if (RetVT.SimpleTy != MVT::v4f32)
2296
0
    return 0;
2297
0
  if ((Subtarget->hasMVEFloatOps())) {
2298
0
    return fastEmitInst_r(ARM::MVE_VRINTf32P, &ARM::MQPRRegClass, Op0);
2299
0
  }
2300
0
  return 0;
2301
0
}
2302
2303
0
unsigned fastEmit_ISD_FCEIL_r(MVT VT, MVT RetVT, unsigned Op0) {
2304
0
  switch (VT.SimpleTy) {
2305
0
  case MVT::f16: return fastEmit_ISD_FCEIL_MVT_f16_r(RetVT, Op0);
2306
0
  case MVT::f32: return fastEmit_ISD_FCEIL_MVT_f32_r(RetVT, Op0);
2307
0
  case MVT::f64: return fastEmit_ISD_FCEIL_MVT_f64_r(RetVT, Op0);
2308
0
  case MVT::v8f16: return fastEmit_ISD_FCEIL_MVT_v8f16_r(RetVT, Op0);
2309
0
  case MVT::v4f32: return fastEmit_ISD_FCEIL_MVT_v4f32_r(RetVT, Op0);
2310
0
  default: return 0;
2311
0
  }
2312
0
}
2313
2314
// FastEmit functions for ISD::FFLOOR.
2315
2316
0
unsigned fastEmit_ISD_FFLOOR_MVT_f16_r(MVT RetVT, unsigned Op0) {
2317
0
  if (RetVT.SimpleTy != MVT::f16)
2318
0
    return 0;
2319
0
  if ((Subtarget->hasFullFP16())) {
2320
0
    return fastEmitInst_r(ARM::VRINTMH, &ARM::HPRRegClass, Op0);
2321
0
  }
2322
0
  return 0;
2323
0
}
2324
2325
0
unsigned fastEmit_ISD_FFLOOR_MVT_f32_r(MVT RetVT, unsigned Op0) {
2326
0
  if (RetVT.SimpleTy != MVT::f32)
2327
0
    return 0;
2328
0
  if ((Subtarget->hasFPARMv8Base())) {
2329
0
    return fastEmitInst_r(ARM::VRINTMS, &ARM::SPRRegClass, Op0);
2330
0
  }
2331
0
  return 0;
2332
0
}
2333
2334
0
unsigned fastEmit_ISD_FFLOOR_MVT_f64_r(MVT RetVT, unsigned Op0) {
2335
0
  if (RetVT.SimpleTy != MVT::f64)
2336
0
    return 0;
2337
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2338
0
    return fastEmitInst_r(ARM::VRINTMD, &ARM::DPRRegClass, Op0);
2339
0
  }
2340
0
  return 0;
2341
0
}
2342
2343
0
unsigned fastEmit_ISD_FFLOOR_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2344
0
  if (RetVT.SimpleTy != MVT::v8f16)
2345
0
    return 0;
2346
0
  if ((Subtarget->hasMVEFloatOps())) {
2347
0
    return fastEmitInst_r(ARM::MVE_VRINTf16M, &ARM::MQPRRegClass, Op0);
2348
0
  }
2349
0
  return 0;
2350
0
}
2351
2352
0
unsigned fastEmit_ISD_FFLOOR_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2353
0
  if (RetVT.SimpleTy != MVT::v4f32)
2354
0
    return 0;
2355
0
  if ((Subtarget->hasMVEFloatOps())) {
2356
0
    return fastEmitInst_r(ARM::MVE_VRINTf32M, &ARM::MQPRRegClass, Op0);
2357
0
  }
2358
0
  return 0;
2359
0
}
2360
2361
0
unsigned fastEmit_ISD_FFLOOR_r(MVT VT, MVT RetVT, unsigned Op0) {
2362
0
  switch (VT.SimpleTy) {
2363
0
  case MVT::f16: return fastEmit_ISD_FFLOOR_MVT_f16_r(RetVT, Op0);
2364
0
  case MVT::f32: return fastEmit_ISD_FFLOOR_MVT_f32_r(RetVT, Op0);
2365
0
  case MVT::f64: return fastEmit_ISD_FFLOOR_MVT_f64_r(RetVT, Op0);
2366
0
  case MVT::v8f16: return fastEmit_ISD_FFLOOR_MVT_v8f16_r(RetVT, Op0);
2367
0
  case MVT::v4f32: return fastEmit_ISD_FFLOOR_MVT_v4f32_r(RetVT, Op0);
2368
0
  default: return 0;
2369
0
  }
2370
0
}
2371
2372
// FastEmit functions for ISD::FNEARBYINT.
2373
2374
0
unsigned fastEmit_ISD_FNEARBYINT_MVT_f16_r(MVT RetVT, unsigned Op0) {
2375
0
  if (RetVT.SimpleTy != MVT::f16)
2376
0
    return 0;
2377
0
  if ((Subtarget->hasFullFP16())) {
2378
0
    return fastEmitInst_r(ARM::VRINTRH, &ARM::HPRRegClass, Op0);
2379
0
  }
2380
0
  return 0;
2381
0
}
2382
2383
0
unsigned fastEmit_ISD_FNEARBYINT_MVT_f32_r(MVT RetVT, unsigned Op0) {
2384
0
  if (RetVT.SimpleTy != MVT::f32)
2385
0
    return 0;
2386
0
  if ((Subtarget->hasFPARMv8Base())) {
2387
0
    return fastEmitInst_r(ARM::VRINTRS, &ARM::SPRRegClass, Op0);
2388
0
  }
2389
0
  return 0;
2390
0
}
2391
2392
0
unsigned fastEmit_ISD_FNEARBYINT_MVT_f64_r(MVT RetVT, unsigned Op0) {
2393
0
  if (RetVT.SimpleTy != MVT::f64)
2394
0
    return 0;
2395
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2396
0
    return fastEmitInst_r(ARM::VRINTRD, &ARM::DPRRegClass, Op0);
2397
0
  }
2398
0
  return 0;
2399
0
}
2400
2401
0
unsigned fastEmit_ISD_FNEARBYINT_r(MVT VT, MVT RetVT, unsigned Op0) {
2402
0
  switch (VT.SimpleTy) {
2403
0
  case MVT::f16: return fastEmit_ISD_FNEARBYINT_MVT_f16_r(RetVT, Op0);
2404
0
  case MVT::f32: return fastEmit_ISD_FNEARBYINT_MVT_f32_r(RetVT, Op0);
2405
0
  case MVT::f64: return fastEmit_ISD_FNEARBYINT_MVT_f64_r(RetVT, Op0);
2406
0
  default: return 0;
2407
0
  }
2408
0
}
2409
2410
// FastEmit functions for ISD::FNEG.
2411
2412
0
unsigned fastEmit_ISD_FNEG_MVT_f16_r(MVT RetVT, unsigned Op0) {
2413
0
  if (RetVT.SimpleTy != MVT::f16)
2414
0
    return 0;
2415
0
  if ((Subtarget->hasFullFP16())) {
2416
0
    return fastEmitInst_r(ARM::VNEGH, &ARM::HPRRegClass, Op0);
2417
0
  }
2418
0
  return 0;
2419
0
}
2420
2421
0
unsigned fastEmit_ISD_FNEG_MVT_f32_r(MVT RetVT, unsigned Op0) {
2422
0
  if (RetVT.SimpleTy != MVT::f32)
2423
0
    return 0;
2424
0
  if ((!Subtarget->useNEONForSinglePrecisionFP()) && (Subtarget->hasVFP2Base())) {
2425
0
    return fastEmitInst_r(ARM::VNEGS, &ARM::SPRRegClass, Op0);
2426
0
  }
2427
0
  return 0;
2428
0
}
2429
2430
0
unsigned fastEmit_ISD_FNEG_MVT_f64_r(MVT RetVT, unsigned Op0) {
2431
0
  if (RetVT.SimpleTy != MVT::f64)
2432
0
    return 0;
2433
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
2434
0
    return fastEmitInst_r(ARM::VNEGD, &ARM::DPRRegClass, Op0);
2435
0
  }
2436
0
  return 0;
2437
0
}
2438
2439
0
unsigned fastEmit_ISD_FNEG_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
2440
0
  if (RetVT.SimpleTy != MVT::v4f16)
2441
0
    return 0;
2442
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2443
0
    return fastEmitInst_r(ARM::VNEGhd, &ARM::DPRRegClass, Op0);
2444
0
  }
2445
0
  return 0;
2446
0
}
2447
2448
0
unsigned fastEmit_ISD_FNEG_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2449
0
  if (RetVT.SimpleTy != MVT::v8f16)
2450
0
    return 0;
2451
0
  if ((Subtarget->hasMVEIntegerOps())) {
2452
0
    return fastEmitInst_r(ARM::MVE_VNEGf16, &ARM::MQPRRegClass, Op0);
2453
0
  }
2454
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2455
0
    return fastEmitInst_r(ARM::VNEGhq, &ARM::QPRRegClass, Op0);
2456
0
  }
2457
0
  return 0;
2458
0
}
2459
2460
0
unsigned fastEmit_ISD_FNEG_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
2461
0
  if (RetVT.SimpleTy != MVT::v2f32)
2462
0
    return 0;
2463
0
  if ((Subtarget->hasNEON())) {
2464
0
    return fastEmitInst_r(ARM::VNEGfd, &ARM::DPRRegClass, Op0);
2465
0
  }
2466
0
  return 0;
2467
0
}
2468
2469
0
unsigned fastEmit_ISD_FNEG_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2470
0
  if (RetVT.SimpleTy != MVT::v4f32)
2471
0
    return 0;
2472
0
  if ((Subtarget->hasMVEIntegerOps())) {
2473
0
    return fastEmitInst_r(ARM::MVE_VNEGf32, &ARM::MQPRRegClass, Op0);
2474
0
  }
2475
0
  if ((Subtarget->hasNEON())) {
2476
0
    return fastEmitInst_r(ARM::VNEGf32q, &ARM::QPRRegClass, Op0);
2477
0
  }
2478
0
  return 0;
2479
0
}
2480
2481
0
unsigned fastEmit_ISD_FNEG_r(MVT VT, MVT RetVT, unsigned Op0) {
2482
0
  switch (VT.SimpleTy) {
2483
0
  case MVT::f16: return fastEmit_ISD_FNEG_MVT_f16_r(RetVT, Op0);
2484
0
  case MVT::f32: return fastEmit_ISD_FNEG_MVT_f32_r(RetVT, Op0);
2485
0
  case MVT::f64: return fastEmit_ISD_FNEG_MVT_f64_r(RetVT, Op0);
2486
0
  case MVT::v4f16: return fastEmit_ISD_FNEG_MVT_v4f16_r(RetVT, Op0);
2487
0
  case MVT::v8f16: return fastEmit_ISD_FNEG_MVT_v8f16_r(RetVT, Op0);
2488
0
  case MVT::v2f32: return fastEmit_ISD_FNEG_MVT_v2f32_r(RetVT, Op0);
2489
0
  case MVT::v4f32: return fastEmit_ISD_FNEG_MVT_v4f32_r(RetVT, Op0);
2490
0
  default: return 0;
2491
0
  }
2492
0
}
2493
2494
// FastEmit functions for ISD::FP_EXTEND.
2495
2496
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_f32_r(MVT RetVT, unsigned Op0) {
2497
0
  if (RetVT.SimpleTy != MVT::f64)
2498
0
    return 0;
2499
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
2500
0
    return fastEmitInst_r(ARM::VCVTDS, &ARM::DPRRegClass, Op0);
2501
0
  }
2502
0
  return 0;
2503
0
}
2504
2505
0
unsigned fastEmit_ISD_FP_EXTEND_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
2506
0
  if (RetVT.SimpleTy != MVT::v4f32)
2507
0
    return 0;
2508
0
  return fastEmitInst_r(ARM::VCVTh2f, &ARM::QPRRegClass, Op0);
2509
0
}
2510
2511
0
unsigned fastEmit_ISD_FP_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
2512
0
  switch (VT.SimpleTy) {
2513
0
  case MVT::f32: return fastEmit_ISD_FP_EXTEND_MVT_f32_r(RetVT, Op0);
2514
0
  case MVT::v4f16: return fastEmit_ISD_FP_EXTEND_MVT_v4f16_r(RetVT, Op0);
2515
0
  default: return 0;
2516
0
  }
2517
0
}
2518
2519
// FastEmit functions for ISD::FP_ROUND.
2520
2521
0
unsigned fastEmit_ISD_FP_ROUND_MVT_f64_r(MVT RetVT, unsigned Op0) {
2522
0
  if (RetVT.SimpleTy != MVT::f32)
2523
0
    return 0;
2524
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
2525
0
    return fastEmitInst_r(ARM::VCVTSD, &ARM::SPRRegClass, Op0);
2526
0
  }
2527
0
  return 0;
2528
0
}
2529
2530
0
unsigned fastEmit_ISD_FP_ROUND_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2531
0
  if (RetVT.SimpleTy != MVT::v4f16)
2532
0
    return 0;
2533
0
  return fastEmitInst_r(ARM::VCVTf2h, &ARM::DPRRegClass, Op0);
2534
0
}
2535
2536
0
unsigned fastEmit_ISD_FP_ROUND_r(MVT VT, MVT RetVT, unsigned Op0) {
2537
0
  switch (VT.SimpleTy) {
2538
0
  case MVT::f64: return fastEmit_ISD_FP_ROUND_MVT_f64_r(RetVT, Op0);
2539
0
  case MVT::v4f32: return fastEmit_ISD_FP_ROUND_MVT_v4f32_r(RetVT, Op0);
2540
0
  default: return 0;
2541
0
  }
2542
0
}
2543
2544
// FastEmit functions for ISD::FP_TO_SINT.
2545
2546
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
2547
0
  if (RetVT.SimpleTy != MVT::v4i16)
2548
0
    return 0;
2549
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2550
0
    return fastEmitInst_r(ARM::VCVTh2sd, &ARM::DPRRegClass, Op0);
2551
0
  }
2552
0
  return 0;
2553
0
}
2554
2555
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2556
0
  if (RetVT.SimpleTy != MVT::v8i16)
2557
0
    return 0;
2558
0
  if ((Subtarget->hasMVEFloatOps())) {
2559
0
    return fastEmitInst_r(ARM::MVE_VCVTs16f16z, &ARM::MQPRRegClass, Op0);
2560
0
  }
2561
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2562
0
    return fastEmitInst_r(ARM::VCVTh2sq, &ARM::QPRRegClass, Op0);
2563
0
  }
2564
0
  return 0;
2565
0
}
2566
2567
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
2568
0
  if (RetVT.SimpleTy != MVT::v2i32)
2569
0
    return 0;
2570
0
  if ((Subtarget->hasNEON())) {
2571
0
    return fastEmitInst_r(ARM::VCVTf2sd, &ARM::DPRRegClass, Op0);
2572
0
  }
2573
0
  return 0;
2574
0
}
2575
2576
0
unsigned fastEmit_ISD_FP_TO_SINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2577
0
  if (RetVT.SimpleTy != MVT::v4i32)
2578
0
    return 0;
2579
0
  if ((Subtarget->hasMVEFloatOps())) {
2580
0
    return fastEmitInst_r(ARM::MVE_VCVTs32f32z, &ARM::MQPRRegClass, Op0);
2581
0
  }
2582
0
  if ((Subtarget->hasNEON())) {
2583
0
    return fastEmitInst_r(ARM::VCVTf2sq, &ARM::QPRRegClass, Op0);
2584
0
  }
2585
0
  return 0;
2586
0
}
2587
2588
0
unsigned fastEmit_ISD_FP_TO_SINT_r(MVT VT, MVT RetVT, unsigned Op0) {
2589
0
  switch (VT.SimpleTy) {
2590
0
  case MVT::v4f16: return fastEmit_ISD_FP_TO_SINT_MVT_v4f16_r(RetVT, Op0);
2591
0
  case MVT::v8f16: return fastEmit_ISD_FP_TO_SINT_MVT_v8f16_r(RetVT, Op0);
2592
0
  case MVT::v2f32: return fastEmit_ISD_FP_TO_SINT_MVT_v2f32_r(RetVT, Op0);
2593
0
  case MVT::v4f32: return fastEmit_ISD_FP_TO_SINT_MVT_v4f32_r(RetVT, Op0);
2594
0
  default: return 0;
2595
0
  }
2596
0
}
2597
2598
// FastEmit functions for ISD::FP_TO_UINT.
2599
2600
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v4f16_r(MVT RetVT, unsigned Op0) {
2601
0
  if (RetVT.SimpleTy != MVT::v4i16)
2602
0
    return 0;
2603
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2604
0
    return fastEmitInst_r(ARM::VCVTh2ud, &ARM::DPRRegClass, Op0);
2605
0
  }
2606
0
  return 0;
2607
0
}
2608
2609
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2610
0
  if (RetVT.SimpleTy != MVT::v8i16)
2611
0
    return 0;
2612
0
  if ((Subtarget->hasMVEFloatOps())) {
2613
0
    return fastEmitInst_r(ARM::MVE_VCVTu16f16z, &ARM::MQPRRegClass, Op0);
2614
0
  }
2615
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2616
0
    return fastEmitInst_r(ARM::VCVTh2uq, &ARM::QPRRegClass, Op0);
2617
0
  }
2618
0
  return 0;
2619
0
}
2620
2621
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v2f32_r(MVT RetVT, unsigned Op0) {
2622
0
  if (RetVT.SimpleTy != MVT::v2i32)
2623
0
    return 0;
2624
0
  if ((Subtarget->hasNEON())) {
2625
0
    return fastEmitInst_r(ARM::VCVTf2ud, &ARM::DPRRegClass, Op0);
2626
0
  }
2627
0
  return 0;
2628
0
}
2629
2630
0
unsigned fastEmit_ISD_FP_TO_UINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2631
0
  if (RetVT.SimpleTy != MVT::v4i32)
2632
0
    return 0;
2633
0
  if ((Subtarget->hasMVEFloatOps())) {
2634
0
    return fastEmitInst_r(ARM::MVE_VCVTu32f32z, &ARM::MQPRRegClass, Op0);
2635
0
  }
2636
0
  if ((Subtarget->hasNEON())) {
2637
0
    return fastEmitInst_r(ARM::VCVTf2uq, &ARM::QPRRegClass, Op0);
2638
0
  }
2639
0
  return 0;
2640
0
}
2641
2642
0
unsigned fastEmit_ISD_FP_TO_UINT_r(MVT VT, MVT RetVT, unsigned Op0) {
2643
0
  switch (VT.SimpleTy) {
2644
0
  case MVT::v4f16: return fastEmit_ISD_FP_TO_UINT_MVT_v4f16_r(RetVT, Op0);
2645
0
  case MVT::v8f16: return fastEmit_ISD_FP_TO_UINT_MVT_v8f16_r(RetVT, Op0);
2646
0
  case MVT::v2f32: return fastEmit_ISD_FP_TO_UINT_MVT_v2f32_r(RetVT, Op0);
2647
0
  case MVT::v4f32: return fastEmit_ISD_FP_TO_UINT_MVT_v4f32_r(RetVT, Op0);
2648
0
  default: return 0;
2649
0
  }
2650
0
}
2651
2652
// FastEmit functions for ISD::FRINT.
2653
2654
0
unsigned fastEmit_ISD_FRINT_MVT_f16_r(MVT RetVT, unsigned Op0) {
2655
0
  if (RetVT.SimpleTy != MVT::f16)
2656
0
    return 0;
2657
0
  if ((Subtarget->hasFullFP16())) {
2658
0
    return fastEmitInst_r(ARM::VRINTXH, &ARM::HPRRegClass, Op0);
2659
0
  }
2660
0
  return 0;
2661
0
}
2662
2663
0
unsigned fastEmit_ISD_FRINT_MVT_f32_r(MVT RetVT, unsigned Op0) {
2664
0
  if (RetVT.SimpleTy != MVT::f32)
2665
0
    return 0;
2666
0
  if ((Subtarget->hasFPARMv8Base())) {
2667
0
    return fastEmitInst_r(ARM::VRINTXS, &ARM::SPRRegClass, Op0);
2668
0
  }
2669
0
  return 0;
2670
0
}
2671
2672
0
unsigned fastEmit_ISD_FRINT_MVT_f64_r(MVT RetVT, unsigned Op0) {
2673
0
  if (RetVT.SimpleTy != MVT::f64)
2674
0
    return 0;
2675
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2676
0
    return fastEmitInst_r(ARM::VRINTXD, &ARM::DPRRegClass, Op0);
2677
0
  }
2678
0
  return 0;
2679
0
}
2680
2681
0
unsigned fastEmit_ISD_FRINT_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2682
0
  if (RetVT.SimpleTy != MVT::v8f16)
2683
0
    return 0;
2684
0
  if ((Subtarget->hasMVEFloatOps())) {
2685
0
    return fastEmitInst_r(ARM::MVE_VRINTf16X, &ARM::MQPRRegClass, Op0);
2686
0
  }
2687
0
  return 0;
2688
0
}
2689
2690
0
unsigned fastEmit_ISD_FRINT_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2691
0
  if (RetVT.SimpleTy != MVT::v4f32)
2692
0
    return 0;
2693
0
  if ((Subtarget->hasMVEFloatOps())) {
2694
0
    return fastEmitInst_r(ARM::MVE_VRINTf32X, &ARM::MQPRRegClass, Op0);
2695
0
  }
2696
0
  return 0;
2697
0
}
2698
2699
0
unsigned fastEmit_ISD_FRINT_r(MVT VT, MVT RetVT, unsigned Op0) {
2700
0
  switch (VT.SimpleTy) {
2701
0
  case MVT::f16: return fastEmit_ISD_FRINT_MVT_f16_r(RetVT, Op0);
2702
0
  case MVT::f32: return fastEmit_ISD_FRINT_MVT_f32_r(RetVT, Op0);
2703
0
  case MVT::f64: return fastEmit_ISD_FRINT_MVT_f64_r(RetVT, Op0);
2704
0
  case MVT::v8f16: return fastEmit_ISD_FRINT_MVT_v8f16_r(RetVT, Op0);
2705
0
  case MVT::v4f32: return fastEmit_ISD_FRINT_MVT_v4f32_r(RetVT, Op0);
2706
0
  default: return 0;
2707
0
  }
2708
0
}
2709
2710
// FastEmit functions for ISD::FROUND.
2711
2712
0
unsigned fastEmit_ISD_FROUND_MVT_f16_r(MVT RetVT, unsigned Op0) {
2713
0
  if (RetVT.SimpleTy != MVT::f16)
2714
0
    return 0;
2715
0
  if ((Subtarget->hasFullFP16())) {
2716
0
    return fastEmitInst_r(ARM::VRINTAH, &ARM::HPRRegClass, Op0);
2717
0
  }
2718
0
  return 0;
2719
0
}
2720
2721
0
unsigned fastEmit_ISD_FROUND_MVT_f32_r(MVT RetVT, unsigned Op0) {
2722
0
  if (RetVT.SimpleTy != MVT::f32)
2723
0
    return 0;
2724
0
  if ((Subtarget->hasFPARMv8Base())) {
2725
0
    return fastEmitInst_r(ARM::VRINTAS, &ARM::SPRRegClass, Op0);
2726
0
  }
2727
0
  return 0;
2728
0
}
2729
2730
0
unsigned fastEmit_ISD_FROUND_MVT_f64_r(MVT RetVT, unsigned Op0) {
2731
0
  if (RetVT.SimpleTy != MVT::f64)
2732
0
    return 0;
2733
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2734
0
    return fastEmitInst_r(ARM::VRINTAD, &ARM::DPRRegClass, Op0);
2735
0
  }
2736
0
  return 0;
2737
0
}
2738
2739
0
unsigned fastEmit_ISD_FROUND_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2740
0
  if (RetVT.SimpleTy != MVT::v8f16)
2741
0
    return 0;
2742
0
  if ((Subtarget->hasMVEFloatOps())) {
2743
0
    return fastEmitInst_r(ARM::MVE_VRINTf16A, &ARM::MQPRRegClass, Op0);
2744
0
  }
2745
0
  return 0;
2746
0
}
2747
2748
0
unsigned fastEmit_ISD_FROUND_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2749
0
  if (RetVT.SimpleTy != MVT::v4f32)
2750
0
    return 0;
2751
0
  if ((Subtarget->hasMVEFloatOps())) {
2752
0
    return fastEmitInst_r(ARM::MVE_VRINTf32A, &ARM::MQPRRegClass, Op0);
2753
0
  }
2754
0
  return 0;
2755
0
}
2756
2757
0
unsigned fastEmit_ISD_FROUND_r(MVT VT, MVT RetVT, unsigned Op0) {
2758
0
  switch (VT.SimpleTy) {
2759
0
  case MVT::f16: return fastEmit_ISD_FROUND_MVT_f16_r(RetVT, Op0);
2760
0
  case MVT::f32: return fastEmit_ISD_FROUND_MVT_f32_r(RetVT, Op0);
2761
0
  case MVT::f64: return fastEmit_ISD_FROUND_MVT_f64_r(RetVT, Op0);
2762
0
  case MVT::v8f16: return fastEmit_ISD_FROUND_MVT_v8f16_r(RetVT, Op0);
2763
0
  case MVT::v4f32: return fastEmit_ISD_FROUND_MVT_v4f32_r(RetVT, Op0);
2764
0
  default: return 0;
2765
0
  }
2766
0
}
2767
2768
// FastEmit functions for ISD::FSQRT.
2769
2770
0
unsigned fastEmit_ISD_FSQRT_MVT_f16_r(MVT RetVT, unsigned Op0) {
2771
0
  if (RetVT.SimpleTy != MVT::f16)
2772
0
    return 0;
2773
0
  if ((Subtarget->hasFullFP16())) {
2774
0
    return fastEmitInst_r(ARM::VSQRTH, &ARM::HPRRegClass, Op0);
2775
0
  }
2776
0
  return 0;
2777
0
}
2778
2779
0
unsigned fastEmit_ISD_FSQRT_MVT_f32_r(MVT RetVT, unsigned Op0) {
2780
0
  if (RetVT.SimpleTy != MVT::f32)
2781
0
    return 0;
2782
0
  if ((Subtarget->hasVFP2Base())) {
2783
0
    return fastEmitInst_r(ARM::VSQRTS, &ARM::SPRRegClass, Op0);
2784
0
  }
2785
0
  return 0;
2786
0
}
2787
2788
0
unsigned fastEmit_ISD_FSQRT_MVT_f64_r(MVT RetVT, unsigned Op0) {
2789
0
  if (RetVT.SimpleTy != MVT::f64)
2790
0
    return 0;
2791
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
2792
0
    return fastEmitInst_r(ARM::VSQRTD, &ARM::DPRRegClass, Op0);
2793
0
  }
2794
0
  return 0;
2795
0
}
2796
2797
0
unsigned fastEmit_ISD_FSQRT_r(MVT VT, MVT RetVT, unsigned Op0) {
2798
0
  switch (VT.SimpleTy) {
2799
0
  case MVT::f16: return fastEmit_ISD_FSQRT_MVT_f16_r(RetVT, Op0);
2800
0
  case MVT::f32: return fastEmit_ISD_FSQRT_MVT_f32_r(RetVT, Op0);
2801
0
  case MVT::f64: return fastEmit_ISD_FSQRT_MVT_f64_r(RetVT, Op0);
2802
0
  default: return 0;
2803
0
  }
2804
0
}
2805
2806
// FastEmit functions for ISD::FTRUNC.
2807
2808
0
unsigned fastEmit_ISD_FTRUNC_MVT_f16_r(MVT RetVT, unsigned Op0) {
2809
0
  if (RetVT.SimpleTy != MVT::f16)
2810
0
    return 0;
2811
0
  if ((Subtarget->hasFullFP16())) {
2812
0
    return fastEmitInst_r(ARM::VRINTZH, &ARM::HPRRegClass, Op0);
2813
0
  }
2814
0
  return 0;
2815
0
}
2816
2817
0
unsigned fastEmit_ISD_FTRUNC_MVT_f32_r(MVT RetVT, unsigned Op0) {
2818
0
  if (RetVT.SimpleTy != MVT::f32)
2819
0
    return 0;
2820
0
  if ((Subtarget->hasFPARMv8Base())) {
2821
0
    return fastEmitInst_r(ARM::VRINTZS, &ARM::SPRRegClass, Op0);
2822
0
  }
2823
0
  return 0;
2824
0
}
2825
2826
0
unsigned fastEmit_ISD_FTRUNC_MVT_f64_r(MVT RetVT, unsigned Op0) {
2827
0
  if (RetVT.SimpleTy != MVT::f64)
2828
0
    return 0;
2829
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
2830
0
    return fastEmitInst_r(ARM::VRINTZD, &ARM::DPRRegClass, Op0);
2831
0
  }
2832
0
  return 0;
2833
0
}
2834
2835
0
unsigned fastEmit_ISD_FTRUNC_MVT_v8f16_r(MVT RetVT, unsigned Op0) {
2836
0
  if (RetVT.SimpleTy != MVT::v8f16)
2837
0
    return 0;
2838
0
  if ((Subtarget->hasMVEFloatOps())) {
2839
0
    return fastEmitInst_r(ARM::MVE_VRINTf16Z, &ARM::MQPRRegClass, Op0);
2840
0
  }
2841
0
  return 0;
2842
0
}
2843
2844
0
unsigned fastEmit_ISD_FTRUNC_MVT_v4f32_r(MVT RetVT, unsigned Op0) {
2845
0
  if (RetVT.SimpleTy != MVT::v4f32)
2846
0
    return 0;
2847
0
  if ((Subtarget->hasMVEFloatOps())) {
2848
0
    return fastEmitInst_r(ARM::MVE_VRINTf32Z, &ARM::MQPRRegClass, Op0);
2849
0
  }
2850
0
  return 0;
2851
0
}
2852
2853
0
unsigned fastEmit_ISD_FTRUNC_r(MVT VT, MVT RetVT, unsigned Op0) {
2854
0
  switch (VT.SimpleTy) {
2855
0
  case MVT::f16: return fastEmit_ISD_FTRUNC_MVT_f16_r(RetVT, Op0);
2856
0
  case MVT::f32: return fastEmit_ISD_FTRUNC_MVT_f32_r(RetVT, Op0);
2857
0
  case MVT::f64: return fastEmit_ISD_FTRUNC_MVT_f64_r(RetVT, Op0);
2858
0
  case MVT::v8f16: return fastEmit_ISD_FTRUNC_MVT_v8f16_r(RetVT, Op0);
2859
0
  case MVT::v4f32: return fastEmit_ISD_FTRUNC_MVT_v4f32_r(RetVT, Op0);
2860
0
  default: return 0;
2861
0
  }
2862
0
}
2863
2864
// FastEmit functions for ISD::SET_FPENV.
2865
2866
0
unsigned fastEmit_ISD_SET_FPENV_MVT_i32_r(MVT RetVT, unsigned Op0) {
2867
0
  if (RetVT.SimpleTy != MVT::isVoid)
2868
0
    return 0;
2869
0
  return fastEmitInst_r(ARM::VMSR, &ARM::GPRnopcRegClass, Op0);
2870
0
}
2871
2872
0
unsigned fastEmit_ISD_SET_FPENV_r(MVT VT, MVT RetVT, unsigned Op0) {
2873
0
  switch (VT.SimpleTy) {
2874
0
  case MVT::i32: return fastEmit_ISD_SET_FPENV_MVT_i32_r(RetVT, Op0);
2875
0
  default: return 0;
2876
0
  }
2877
0
}
2878
2879
// FastEmit functions for ISD::SIGN_EXTEND.
2880
2881
0
unsigned fastEmit_ISD_SIGN_EXTEND_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
2882
0
  if (RetVT.SimpleTy != MVT::v8i16)
2883
0
    return 0;
2884
0
  if ((Subtarget->hasNEON())) {
2885
0
    return fastEmitInst_r(ARM::VMOVLsv8i16, &ARM::QPRRegClass, Op0);
2886
0
  }
2887
0
  return 0;
2888
0
}
2889
2890
0
unsigned fastEmit_ISD_SIGN_EXTEND_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
2891
0
  if (RetVT.SimpleTy != MVT::v4i32)
2892
0
    return 0;
2893
0
  if ((Subtarget->hasNEON())) {
2894
0
    return fastEmitInst_r(ARM::VMOVLsv4i32, &ARM::QPRRegClass, Op0);
2895
0
  }
2896
0
  return 0;
2897
0
}
2898
2899
0
unsigned fastEmit_ISD_SIGN_EXTEND_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
2900
0
  if (RetVT.SimpleTy != MVT::v2i64)
2901
0
    return 0;
2902
0
  if ((Subtarget->hasNEON())) {
2903
0
    return fastEmitInst_r(ARM::VMOVLsv2i64, &ARM::QPRRegClass, Op0);
2904
0
  }
2905
0
  return 0;
2906
0
}
2907
2908
0
unsigned fastEmit_ISD_SIGN_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
2909
0
  switch (VT.SimpleTy) {
2910
0
  case MVT::v8i8: return fastEmit_ISD_SIGN_EXTEND_MVT_v8i8_r(RetVT, Op0);
2911
0
  case MVT::v4i16: return fastEmit_ISD_SIGN_EXTEND_MVT_v4i16_r(RetVT, Op0);
2912
0
  case MVT::v2i32: return fastEmit_ISD_SIGN_EXTEND_MVT_v2i32_r(RetVT, Op0);
2913
0
  default: return 0;
2914
0
  }
2915
0
}
2916
2917
// FastEmit functions for ISD::SINT_TO_FP.
2918
2919
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
2920
0
  if (RetVT.SimpleTy != MVT::v4f16)
2921
0
    return 0;
2922
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2923
0
    return fastEmitInst_r(ARM::VCVTs2hd, &ARM::DPRRegClass, Op0);
2924
0
  }
2925
0
  return 0;
2926
0
}
2927
2928
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
2929
0
  if (RetVT.SimpleTy != MVT::v8f16)
2930
0
    return 0;
2931
0
  if ((Subtarget->hasMVEFloatOps())) {
2932
0
    return fastEmitInst_r(ARM::MVE_VCVTf16s16n, &ARM::MQPRRegClass, Op0);
2933
0
  }
2934
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
2935
0
    return fastEmitInst_r(ARM::VCVTs2hq, &ARM::QPRRegClass, Op0);
2936
0
  }
2937
0
  return 0;
2938
0
}
2939
2940
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
2941
0
  if (RetVT.SimpleTy != MVT::v2f32)
2942
0
    return 0;
2943
0
  if ((Subtarget->hasNEON())) {
2944
0
    return fastEmitInst_r(ARM::VCVTs2fd, &ARM::DPRRegClass, Op0);
2945
0
  }
2946
0
  return 0;
2947
0
}
2948
2949
0
unsigned fastEmit_ISD_SINT_TO_FP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
2950
0
  if (RetVT.SimpleTy != MVT::v4f32)
2951
0
    return 0;
2952
0
  if ((Subtarget->hasMVEFloatOps())) {
2953
0
    return fastEmitInst_r(ARM::MVE_VCVTf32s32n, &ARM::MQPRRegClass, Op0);
2954
0
  }
2955
0
  if ((Subtarget->hasNEON())) {
2956
0
    return fastEmitInst_r(ARM::VCVTs2fq, &ARM::QPRRegClass, Op0);
2957
0
  }
2958
0
  return 0;
2959
0
}
2960
2961
0
unsigned fastEmit_ISD_SINT_TO_FP_r(MVT VT, MVT RetVT, unsigned Op0) {
2962
0
  switch (VT.SimpleTy) {
2963
0
  case MVT::v4i16: return fastEmit_ISD_SINT_TO_FP_MVT_v4i16_r(RetVT, Op0);
2964
0
  case MVT::v8i16: return fastEmit_ISD_SINT_TO_FP_MVT_v8i16_r(RetVT, Op0);
2965
0
  case MVT::v2i32: return fastEmit_ISD_SINT_TO_FP_MVT_v2i32_r(RetVT, Op0);
2966
0
  case MVT::v4i32: return fastEmit_ISD_SINT_TO_FP_MVT_v4i32_r(RetVT, Op0);
2967
0
  default: return 0;
2968
0
  }
2969
0
}
2970
2971
// FastEmit functions for ISD::TRUNCATE.
2972
2973
0
unsigned fastEmit_ISD_TRUNCATE_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
2974
0
  if (RetVT.SimpleTy != MVT::v8i8)
2975
0
    return 0;
2976
0
  if ((Subtarget->hasNEON())) {
2977
0
    return fastEmitInst_r(ARM::VMOVNv8i8, &ARM::DPRRegClass, Op0);
2978
0
  }
2979
0
  return 0;
2980
0
}
2981
2982
0
unsigned fastEmit_ISD_TRUNCATE_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
2983
0
  if (RetVT.SimpleTy != MVT::v4i16)
2984
0
    return 0;
2985
0
  if ((Subtarget->hasNEON())) {
2986
0
    return fastEmitInst_r(ARM::VMOVNv4i16, &ARM::DPRRegClass, Op0);
2987
0
  }
2988
0
  return 0;
2989
0
}
2990
2991
0
unsigned fastEmit_ISD_TRUNCATE_MVT_v2i64_r(MVT RetVT, unsigned Op0) {
2992
0
  if (RetVT.SimpleTy != MVT::v2i32)
2993
0
    return 0;
2994
0
  if ((Subtarget->hasNEON())) {
2995
0
    return fastEmitInst_r(ARM::VMOVNv2i32, &ARM::DPRRegClass, Op0);
2996
0
  }
2997
0
  return 0;
2998
0
}
2999
3000
0
unsigned fastEmit_ISD_TRUNCATE_r(MVT VT, MVT RetVT, unsigned Op0) {
3001
0
  switch (VT.SimpleTy) {
3002
0
  case MVT::v8i16: return fastEmit_ISD_TRUNCATE_MVT_v8i16_r(RetVT, Op0);
3003
0
  case MVT::v4i32: return fastEmit_ISD_TRUNCATE_MVT_v4i32_r(RetVT, Op0);
3004
0
  case MVT::v2i64: return fastEmit_ISD_TRUNCATE_MVT_v2i64_r(RetVT, Op0);
3005
0
  default: return 0;
3006
0
  }
3007
0
}
3008
3009
// FastEmit functions for ISD::UINT_TO_FP.
3010
3011
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
3012
0
  if (RetVT.SimpleTy != MVT::v4f16)
3013
0
    return 0;
3014
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
3015
0
    return fastEmitInst_r(ARM::VCVTu2hd, &ARM::DPRRegClass, Op0);
3016
0
  }
3017
0
  return 0;
3018
0
}
3019
3020
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
3021
0
  if (RetVT.SimpleTy != MVT::v8f16)
3022
0
    return 0;
3023
0
  if ((Subtarget->hasMVEFloatOps())) {
3024
0
    return fastEmitInst_r(ARM::MVE_VCVTf16u16n, &ARM::MQPRRegClass, Op0);
3025
0
  }
3026
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
3027
0
    return fastEmitInst_r(ARM::VCVTu2hq, &ARM::QPRRegClass, Op0);
3028
0
  }
3029
0
  return 0;
3030
0
}
3031
3032
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
3033
0
  if (RetVT.SimpleTy != MVT::v2f32)
3034
0
    return 0;
3035
0
  if ((Subtarget->hasNEON())) {
3036
0
    return fastEmitInst_r(ARM::VCVTu2fd, &ARM::DPRRegClass, Op0);
3037
0
  }
3038
0
  return 0;
3039
0
}
3040
3041
0
unsigned fastEmit_ISD_UINT_TO_FP_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
3042
0
  if (RetVT.SimpleTy != MVT::v4f32)
3043
0
    return 0;
3044
0
  if ((Subtarget->hasMVEFloatOps())) {
3045
0
    return fastEmitInst_r(ARM::MVE_VCVTf32u32n, &ARM::MQPRRegClass, Op0);
3046
0
  }
3047
0
  if ((Subtarget->hasNEON())) {
3048
0
    return fastEmitInst_r(ARM::VCVTu2fq, &ARM::QPRRegClass, Op0);
3049
0
  }
3050
0
  return 0;
3051
0
}
3052
3053
0
unsigned fastEmit_ISD_UINT_TO_FP_r(MVT VT, MVT RetVT, unsigned Op0) {
3054
0
  switch (VT.SimpleTy) {
3055
0
  case MVT::v4i16: return fastEmit_ISD_UINT_TO_FP_MVT_v4i16_r(RetVT, Op0);
3056
0
  case MVT::v8i16: return fastEmit_ISD_UINT_TO_FP_MVT_v8i16_r(RetVT, Op0);
3057
0
  case MVT::v2i32: return fastEmit_ISD_UINT_TO_FP_MVT_v2i32_r(RetVT, Op0);
3058
0
  case MVT::v4i32: return fastEmit_ISD_UINT_TO_FP_MVT_v4i32_r(RetVT, Op0);
3059
0
  default: return 0;
3060
0
  }
3061
0
}
3062
3063
// FastEmit functions for ISD::VECREDUCE_ADD.
3064
3065
0
unsigned fastEmit_ISD_VECREDUCE_ADD_MVT_v16i8_r(MVT RetVT, unsigned Op0) {
3066
0
  if (RetVT.SimpleTy != MVT::i32)
3067
0
    return 0;
3068
0
  if ((Subtarget->hasMVEIntegerOps())) {
3069
0
    return fastEmitInst_r(ARM::MVE_VADDVu8no_acc, &ARM::tGPREvenRegClass, Op0);
3070
0
  }
3071
0
  return 0;
3072
0
}
3073
3074
0
unsigned fastEmit_ISD_VECREDUCE_ADD_MVT_v8i16_r(MVT RetVT, unsigned Op0) {
3075
0
  if (RetVT.SimpleTy != MVT::i32)
3076
0
    return 0;
3077
0
  if ((Subtarget->hasMVEIntegerOps())) {
3078
0
    return fastEmitInst_r(ARM::MVE_VADDVu16no_acc, &ARM::tGPREvenRegClass, Op0);
3079
0
  }
3080
0
  return 0;
3081
0
}
3082
3083
0
unsigned fastEmit_ISD_VECREDUCE_ADD_MVT_v4i32_r(MVT RetVT, unsigned Op0) {
3084
0
  if (RetVT.SimpleTy != MVT::i32)
3085
0
    return 0;
3086
0
  if ((Subtarget->hasMVEIntegerOps())) {
3087
0
    return fastEmitInst_r(ARM::MVE_VADDVu32no_acc, &ARM::tGPREvenRegClass, Op0);
3088
0
  }
3089
0
  return 0;
3090
0
}
3091
3092
0
unsigned fastEmit_ISD_VECREDUCE_ADD_r(MVT VT, MVT RetVT, unsigned Op0) {
3093
0
  switch (VT.SimpleTy) {
3094
0
  case MVT::v16i8: return fastEmit_ISD_VECREDUCE_ADD_MVT_v16i8_r(RetVT, Op0);
3095
0
  case MVT::v8i16: return fastEmit_ISD_VECREDUCE_ADD_MVT_v8i16_r(RetVT, Op0);
3096
0
  case MVT::v4i32: return fastEmit_ISD_VECREDUCE_ADD_MVT_v4i32_r(RetVT, Op0);
3097
0
  default: return 0;
3098
0
  }
3099
0
}
3100
3101
// FastEmit functions for ISD::ZERO_EXTEND.
3102
3103
0
unsigned fastEmit_ISD_ZERO_EXTEND_MVT_v8i8_r(MVT RetVT, unsigned Op0) {
3104
0
  if (RetVT.SimpleTy != MVT::v8i16)
3105
0
    return 0;
3106
0
  if ((Subtarget->hasNEON())) {
3107
0
    return fastEmitInst_r(ARM::VMOVLuv8i16, &ARM::QPRRegClass, Op0);
3108
0
  }
3109
0
  return 0;
3110
0
}
3111
3112
0
unsigned fastEmit_ISD_ZERO_EXTEND_MVT_v4i16_r(MVT RetVT, unsigned Op0) {
3113
0
  if (RetVT.SimpleTy != MVT::v4i32)
3114
0
    return 0;
3115
0
  if ((Subtarget->hasNEON())) {
3116
0
    return fastEmitInst_r(ARM::VMOVLuv4i32, &ARM::QPRRegClass, Op0);
3117
0
  }
3118
0
  return 0;
3119
0
}
3120
3121
0
unsigned fastEmit_ISD_ZERO_EXTEND_MVT_v2i32_r(MVT RetVT, unsigned Op0) {
3122
0
  if (RetVT.SimpleTy != MVT::v2i64)
3123
0
    return 0;
3124
0
  if ((Subtarget->hasNEON())) {
3125
0
    return fastEmitInst_r(ARM::VMOVLuv2i64, &ARM::QPRRegClass, Op0);
3126
0
  }
3127
0
  return 0;
3128
0
}
3129
3130
0
unsigned fastEmit_ISD_ZERO_EXTEND_r(MVT VT, MVT RetVT, unsigned Op0) {
3131
0
  switch (VT.SimpleTy) {
3132
0
  case MVT::v8i8: return fastEmit_ISD_ZERO_EXTEND_MVT_v8i8_r(RetVT, Op0);
3133
0
  case MVT::v4i16: return fastEmit_ISD_ZERO_EXTEND_MVT_v4i16_r(RetVT, Op0);
3134
0
  case MVT::v2i32: return fastEmit_ISD_ZERO_EXTEND_MVT_v2i32_r(RetVT, Op0);
3135
0
  default: return 0;
3136
0
  }
3137
0
}
3138
3139
// Top-level FastEmit function.
3140
3141
0
unsigned fastEmit_r(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0) override {
3142
0
  switch (Opcode) {
3143
0
  case ARMISD::CALL: return fastEmit_ARMISD_CALL_r(VT, RetVT, Op0);
3144
0
  case ARMISD::CALL_NOLINK: return fastEmit_ARMISD_CALL_NOLINK_r(VT, RetVT, Op0);
3145
0
  case ARMISD::CALL_PRED: return fastEmit_ARMISD_CALL_PRED_r(VT, RetVT, Op0);
3146
0
  case ARMISD::CMPFPEw0: return fastEmit_ARMISD_CMPFPEw0_r(VT, RetVT, Op0);
3147
0
  case ARMISD::CMPFPw0: return fastEmit_ARMISD_CMPFPw0_r(VT, RetVT, Op0);
3148
0
  case ARMISD::RRX: return fastEmit_ARMISD_RRX_r(VT, RetVT, Op0);
3149
0
  case ARMISD::SRA_GLUE: return fastEmit_ARMISD_SRA_GLUE_r(VT, RetVT, Op0);
3150
0
  case ARMISD::SRL_GLUE: return fastEmit_ARMISD_SRL_GLUE_r(VT, RetVT, Op0);
3151
0
  case ARMISD::VADDVs: return fastEmit_ARMISD_VADDVs_r(VT, RetVT, Op0);
3152
0
  case ARMISD::VADDVu: return fastEmit_ARMISD_VADDVu_r(VT, RetVT, Op0);
3153
0
  case ARMISD::VDUP: return fastEmit_ARMISD_VDUP_r(VT, RetVT, Op0);
3154
0
  case ARMISD::VMOVSR: return fastEmit_ARMISD_VMOVSR_r(VT, RetVT, Op0);
3155
0
  case ARMISD::VMOVhr: return fastEmit_ARMISD_VMOVhr_r(VT, RetVT, Op0);
3156
0
  case ARMISD::VMOVrh: return fastEmit_ARMISD_VMOVrh_r(VT, RetVT, Op0);
3157
0
  case ARMISD::VREV16: return fastEmit_ARMISD_VREV16_r(VT, RetVT, Op0);
3158
0
  case ARMISD::VREV32: return fastEmit_ARMISD_VREV32_r(VT, RetVT, Op0);
3159
0
  case ARMISD::VREV64: return fastEmit_ARMISD_VREV64_r(VT, RetVT, Op0);
3160
0
  case ARMISD::WIN__DBZCHK: return fastEmit_ARMISD_WIN__DBZCHK_r(VT, RetVT, Op0);
3161
0
  case ARMISD::tSECALL: return fastEmit_ARMISD_tSECALL_r(VT, RetVT, Op0);
3162
0
  case ISD::ABS: return fastEmit_ISD_ABS_r(VT, RetVT, Op0);
3163
0
  case ISD::ANY_EXTEND: return fastEmit_ISD_ANY_EXTEND_r(VT, RetVT, Op0);
3164
0
  case ISD::BITCAST: return fastEmit_ISD_BITCAST_r(VT, RetVT, Op0);
3165
0
  case ISD::BITREVERSE: return fastEmit_ISD_BITREVERSE_r(VT, RetVT, Op0);
3166
0
  case ISD::BRIND: return fastEmit_ISD_BRIND_r(VT, RetVT, Op0);
3167
0
  case ISD::BSWAP: return fastEmit_ISD_BSWAP_r(VT, RetVT, Op0);
3168
0
  case ISD::CTLZ: return fastEmit_ISD_CTLZ_r(VT, RetVT, Op0);
3169
0
  case ISD::CTPOP: return fastEmit_ISD_CTPOP_r(VT, RetVT, Op0);
3170
0
  case ISD::FABS: return fastEmit_ISD_FABS_r(VT, RetVT, Op0);
3171
0
  case ISD::FCEIL: return fastEmit_ISD_FCEIL_r(VT, RetVT, Op0);
3172
0
  case ISD::FFLOOR: return fastEmit_ISD_FFLOOR_r(VT, RetVT, Op0);
3173
0
  case ISD::FNEARBYINT: return fastEmit_ISD_FNEARBYINT_r(VT, RetVT, Op0);
3174
0
  case ISD::FNEG: return fastEmit_ISD_FNEG_r(VT, RetVT, Op0);
3175
0
  case ISD::FP_EXTEND: return fastEmit_ISD_FP_EXTEND_r(VT, RetVT, Op0);
3176
0
  case ISD::FP_ROUND: return fastEmit_ISD_FP_ROUND_r(VT, RetVT, Op0);
3177
0
  case ISD::FP_TO_SINT: return fastEmit_ISD_FP_TO_SINT_r(VT, RetVT, Op0);
3178
0
  case ISD::FP_TO_UINT: return fastEmit_ISD_FP_TO_UINT_r(VT, RetVT, Op0);
3179
0
  case ISD::FRINT: return fastEmit_ISD_FRINT_r(VT, RetVT, Op0);
3180
0
  case ISD::FROUND: return fastEmit_ISD_FROUND_r(VT, RetVT, Op0);
3181
0
  case ISD::FSQRT: return fastEmit_ISD_FSQRT_r(VT, RetVT, Op0);
3182
0
  case ISD::FTRUNC: return fastEmit_ISD_FTRUNC_r(VT, RetVT, Op0);
3183
0
  case ISD::SET_FPENV: return fastEmit_ISD_SET_FPENV_r(VT, RetVT, Op0);
3184
0
  case ISD::SIGN_EXTEND: return fastEmit_ISD_SIGN_EXTEND_r(VT, RetVT, Op0);
3185
0
  case ISD::SINT_TO_FP: return fastEmit_ISD_SINT_TO_FP_r(VT, RetVT, Op0);
3186
0
  case ISD::TRUNCATE: return fastEmit_ISD_TRUNCATE_r(VT, RetVT, Op0);
3187
0
  case ISD::UINT_TO_FP: return fastEmit_ISD_UINT_TO_FP_r(VT, RetVT, Op0);
3188
0
  case ISD::VECREDUCE_ADD: return fastEmit_ISD_VECREDUCE_ADD_r(VT, RetVT, Op0);
3189
0
  case ISD::ZERO_EXTEND: return fastEmit_ISD_ZERO_EXTEND_r(VT, RetVT, Op0);
3190
0
  default: return 0;
3191
0
  }
3192
0
}
3193
3194
// FastEmit functions for ARMISD::CMP.
3195
3196
0
unsigned fastEmit_ARMISD_CMP_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3197
0
  if (RetVT.SimpleTy != MVT::isVoid)
3198
0
    return 0;
3199
0
  if ((Subtarget->isThumb2())) {
3200
0
    return fastEmitInst_rr(ARM::t2CMPrr, &ARM::GPRnopcRegClass, Op0, Op1);
3201
0
  }
3202
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
3203
0
    return fastEmitInst_rr(ARM::tCMPr, &ARM::tGPRRegClass, Op0, Op1);
3204
0
  }
3205
0
  if ((!Subtarget->isThumb())) {
3206
0
    return fastEmitInst_rr(ARM::CMPrr, &ARM::GPRRegClass, Op0, Op1);
3207
0
  }
3208
0
  return 0;
3209
0
}
3210
3211
0
unsigned fastEmit_ARMISD_CMP_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3212
0
  switch (VT.SimpleTy) {
3213
0
  case MVT::i32: return fastEmit_ARMISD_CMP_MVT_i32_rr(RetVT, Op0, Op1);
3214
0
  default: return 0;
3215
0
  }
3216
0
}
3217
3218
// FastEmit functions for ARMISD::CMPFP.
3219
3220
0
unsigned fastEmit_ARMISD_CMPFP_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3221
0
  if (RetVT.SimpleTy != MVT::isVoid)
3222
0
    return 0;
3223
0
  if ((Subtarget->hasFullFP16())) {
3224
0
    return fastEmitInst_rr(ARM::VCMPH, &ARM::HPRRegClass, Op0, Op1);
3225
0
  }
3226
0
  return 0;
3227
0
}
3228
3229
0
unsigned fastEmit_ARMISD_CMPFP_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3230
0
  if (RetVT.SimpleTy != MVT::isVoid)
3231
0
    return 0;
3232
0
  if ((Subtarget->hasVFP2Base())) {
3233
0
    return fastEmitInst_rr(ARM::VCMPS, &ARM::SPRRegClass, Op0, Op1);
3234
0
  }
3235
0
  return 0;
3236
0
}
3237
3238
0
unsigned fastEmit_ARMISD_CMPFP_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3239
0
  if (RetVT.SimpleTy != MVT::isVoid)
3240
0
    return 0;
3241
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
3242
0
    return fastEmitInst_rr(ARM::VCMPD, &ARM::DPRRegClass, Op0, Op1);
3243
0
  }
3244
0
  return 0;
3245
0
}
3246
3247
0
unsigned fastEmit_ARMISD_CMPFP_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3248
0
  switch (VT.SimpleTy) {
3249
0
  case MVT::f16: return fastEmit_ARMISD_CMPFP_MVT_f16_rr(RetVT, Op0, Op1);
3250
0
  case MVT::f32: return fastEmit_ARMISD_CMPFP_MVT_f32_rr(RetVT, Op0, Op1);
3251
0
  case MVT::f64: return fastEmit_ARMISD_CMPFP_MVT_f64_rr(RetVT, Op0, Op1);
3252
0
  default: return 0;
3253
0
  }
3254
0
}
3255
3256
// FastEmit functions for ARMISD::CMPFPE.
3257
3258
0
unsigned fastEmit_ARMISD_CMPFPE_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3259
0
  if (RetVT.SimpleTy != MVT::isVoid)
3260
0
    return 0;
3261
0
  if ((Subtarget->hasFullFP16())) {
3262
0
    return fastEmitInst_rr(ARM::VCMPEH, &ARM::HPRRegClass, Op0, Op1);
3263
0
  }
3264
0
  return 0;
3265
0
}
3266
3267
0
unsigned fastEmit_ARMISD_CMPFPE_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3268
0
  if (RetVT.SimpleTy != MVT::isVoid)
3269
0
    return 0;
3270
0
  if ((Subtarget->hasVFP2Base())) {
3271
0
    return fastEmitInst_rr(ARM::VCMPES, &ARM::SPRRegClass, Op0, Op1);
3272
0
  }
3273
0
  return 0;
3274
0
}
3275
3276
0
unsigned fastEmit_ARMISD_CMPFPE_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3277
0
  if (RetVT.SimpleTy != MVT::isVoid)
3278
0
    return 0;
3279
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
3280
0
    return fastEmitInst_rr(ARM::VCMPED, &ARM::DPRRegClass, Op0, Op1);
3281
0
  }
3282
0
  return 0;
3283
0
}
3284
3285
0
unsigned fastEmit_ARMISD_CMPFPE_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3286
0
  switch (VT.SimpleTy) {
3287
0
  case MVT::f16: return fastEmit_ARMISD_CMPFPE_MVT_f16_rr(RetVT, Op0, Op1);
3288
0
  case MVT::f32: return fastEmit_ARMISD_CMPFPE_MVT_f32_rr(RetVT, Op0, Op1);
3289
0
  case MVT::f64: return fastEmit_ARMISD_CMPFPE_MVT_f64_rr(RetVT, Op0, Op1);
3290
0
  default: return 0;
3291
0
  }
3292
0
}
3293
3294
// FastEmit functions for ARMISD::CMPZ.
3295
3296
0
unsigned fastEmit_ARMISD_CMPZ_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3297
0
  if (RetVT.SimpleTy != MVT::isVoid)
3298
0
    return 0;
3299
0
  if ((Subtarget->isThumb2())) {
3300
0
    return fastEmitInst_rr(ARM::t2CMPrr, &ARM::GPRnopcRegClass, Op0, Op1);
3301
0
  }
3302
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
3303
0
    return fastEmitInst_rr(ARM::tCMPr, &ARM::tGPRRegClass, Op0, Op1);
3304
0
  }
3305
0
  if ((!Subtarget->isThumb())) {
3306
0
    return fastEmitInst_rr(ARM::CMPrr, &ARM::GPRRegClass, Op0, Op1);
3307
0
  }
3308
0
  return 0;
3309
0
}
3310
3311
0
unsigned fastEmit_ARMISD_CMPZ_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3312
0
  switch (VT.SimpleTy) {
3313
0
  case MVT::i32: return fastEmit_ARMISD_CMPZ_MVT_i32_rr(RetVT, Op0, Op1);
3314
0
  default: return 0;
3315
0
  }
3316
0
}
3317
3318
// FastEmit functions for ARMISD::EH_SJLJ_LONGJMP.
3319
3320
0
unsigned fastEmit_ARMISD_EH_SJLJ_LONGJMP_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3321
0
  if (RetVT.SimpleTy != MVT::isVoid)
3322
0
    return 0;
3323
0
  if ((Subtarget->isThumb()) && (Subtarget->isTargetWindows())) {
3324
0
    return fastEmitInst_rr(ARM::tInt_WIN_eh_sjlj_longjmp, &ARM::GPRRegClass, Op0, Op1);
3325
0
  }
3326
0
  if ((!Subtarget->isTargetWindows()) && (Subtarget->isThumb())) {
3327
0
    return fastEmitInst_rr(ARM::tInt_eh_sjlj_longjmp, &ARM::tGPRRegClass, Op0, Op1);
3328
0
  }
3329
0
  if ((!Subtarget->isThumb())) {
3330
0
    return fastEmitInst_rr(ARM::Int_eh_sjlj_longjmp, &ARM::GPRRegClass, Op0, Op1);
3331
0
  }
3332
0
  return 0;
3333
0
}
3334
3335
0
unsigned fastEmit_ARMISD_EH_SJLJ_LONGJMP_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3336
0
  switch (VT.SimpleTy) {
3337
0
  case MVT::i32: return fastEmit_ARMISD_EH_SJLJ_LONGJMP_MVT_i32_rr(RetVT, Op0, Op1);
3338
0
  default: return 0;
3339
0
  }
3340
0
}
3341
3342
// FastEmit functions for ARMISD::EH_SJLJ_SETJMP.
3343
3344
0
unsigned fastEmit_ARMISD_EH_SJLJ_SETJMP_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3345
0
  if (RetVT.SimpleTy != MVT::i32)
3346
0
    return 0;
3347
0
  if ((Subtarget->isThumb2()) && (!Subtarget->hasVFP2Base())) {
3348
0
    return fastEmitInst_rr(ARM::t2Int_eh_sjlj_setjmp_nofp, &ARM::tGPRRegClass, Op0, Op1);
3349
0
  }
3350
0
  if ((Subtarget->hasVFP2Base()) && (Subtarget->isThumb2())) {
3351
0
    return fastEmitInst_rr(ARM::t2Int_eh_sjlj_setjmp, &ARM::tGPRRegClass, Op0, Op1);
3352
0
  }
3353
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
3354
0
    return fastEmitInst_rr(ARM::tInt_eh_sjlj_setjmp, &ARM::tGPRRegClass, Op0, Op1);
3355
0
  }
3356
0
  if ((!Subtarget->isThumb()) && (!Subtarget->hasVFP2Base())) {
3357
0
    return fastEmitInst_rr(ARM::Int_eh_sjlj_setjmp_nofp, &ARM::GPRRegClass, Op0, Op1);
3358
0
  }
3359
0
  if ((Subtarget->hasVFP2Base()) && (!Subtarget->isThumb())) {
3360
0
    return fastEmitInst_rr(ARM::Int_eh_sjlj_setjmp, &ARM::GPRRegClass, Op0, Op1);
3361
0
  }
3362
0
  return 0;
3363
0
}
3364
3365
0
unsigned fastEmit_ARMISD_EH_SJLJ_SETJMP_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3366
0
  switch (VT.SimpleTy) {
3367
0
  case MVT::i32: return fastEmit_ARMISD_EH_SJLJ_SETJMP_MVT_i32_rr(RetVT, Op0, Op1);
3368
0
  default: return 0;
3369
0
  }
3370
0
}
3371
3372
// FastEmit functions for ARMISD::QADD16b.
3373
3374
0
unsigned fastEmit_ARMISD_QADD16b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3375
0
  if (RetVT.SimpleTy != MVT::i32)
3376
0
    return 0;
3377
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3378
0
    return fastEmitInst_rr(ARM::t2QADD16, &ARM::rGPRRegClass, Op0, Op1);
3379
0
  }
3380
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3381
0
    return fastEmitInst_rr(ARM::QADD16, &ARM::GPRnopcRegClass, Op0, Op1);
3382
0
  }
3383
0
  return 0;
3384
0
}
3385
3386
0
unsigned fastEmit_ARMISD_QADD16b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3387
0
  switch (VT.SimpleTy) {
3388
0
  case MVT::i32: return fastEmit_ARMISD_QADD16b_MVT_i32_rr(RetVT, Op0, Op1);
3389
0
  default: return 0;
3390
0
  }
3391
0
}
3392
3393
// FastEmit functions for ARMISD::QADD8b.
3394
3395
0
unsigned fastEmit_ARMISD_QADD8b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3396
0
  if (RetVT.SimpleTy != MVT::i32)
3397
0
    return 0;
3398
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3399
0
    return fastEmitInst_rr(ARM::t2QADD8, &ARM::rGPRRegClass, Op0, Op1);
3400
0
  }
3401
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3402
0
    return fastEmitInst_rr(ARM::QADD8, &ARM::GPRnopcRegClass, Op0, Op1);
3403
0
  }
3404
0
  return 0;
3405
0
}
3406
3407
0
unsigned fastEmit_ARMISD_QADD8b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3408
0
  switch (VT.SimpleTy) {
3409
0
  case MVT::i32: return fastEmit_ARMISD_QADD8b_MVT_i32_rr(RetVT, Op0, Op1);
3410
0
  default: return 0;
3411
0
  }
3412
0
}
3413
3414
// FastEmit functions for ARMISD::QSUB16b.
3415
3416
0
unsigned fastEmit_ARMISD_QSUB16b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3417
0
  if (RetVT.SimpleTy != MVT::i32)
3418
0
    return 0;
3419
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3420
0
    return fastEmitInst_rr(ARM::t2QSUB16, &ARM::rGPRRegClass, Op0, Op1);
3421
0
  }
3422
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3423
0
    return fastEmitInst_rr(ARM::QSUB16, &ARM::GPRnopcRegClass, Op0, Op1);
3424
0
  }
3425
0
  return 0;
3426
0
}
3427
3428
0
unsigned fastEmit_ARMISD_QSUB16b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3429
0
  switch (VT.SimpleTy) {
3430
0
  case MVT::i32: return fastEmit_ARMISD_QSUB16b_MVT_i32_rr(RetVT, Op0, Op1);
3431
0
  default: return 0;
3432
0
  }
3433
0
}
3434
3435
// FastEmit functions for ARMISD::QSUB8b.
3436
3437
0
unsigned fastEmit_ARMISD_QSUB8b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3438
0
  if (RetVT.SimpleTy != MVT::i32)
3439
0
    return 0;
3440
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3441
0
    return fastEmitInst_rr(ARM::t2QSUB8, &ARM::rGPRRegClass, Op0, Op1);
3442
0
  }
3443
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3444
0
    return fastEmitInst_rr(ARM::QSUB8, &ARM::GPRnopcRegClass, Op0, Op1);
3445
0
  }
3446
0
  return 0;
3447
0
}
3448
3449
0
unsigned fastEmit_ARMISD_QSUB8b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3450
0
  switch (VT.SimpleTy) {
3451
0
  case MVT::i32: return fastEmit_ARMISD_QSUB8b_MVT_i32_rr(RetVT, Op0, Op1);
3452
0
  default: return 0;
3453
0
  }
3454
0
}
3455
3456
// FastEmit functions for ARMISD::SMULWB.
3457
3458
0
unsigned fastEmit_ARMISD_SMULWB_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3459
0
  if (RetVT.SimpleTy != MVT::i32)
3460
0
    return 0;
3461
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3462
0
    return fastEmitInst_rr(ARM::t2SMULWB, &ARM::rGPRRegClass, Op0, Op1);
3463
0
  }
3464
0
  if ((Subtarget->hasV5TEOps()) && (!Subtarget->isThumb())) {
3465
0
    return fastEmitInst_rr(ARM::SMULWB, &ARM::GPRRegClass, Op0, Op1);
3466
0
  }
3467
0
  return 0;
3468
0
}
3469
3470
0
unsigned fastEmit_ARMISD_SMULWB_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3471
0
  switch (VT.SimpleTy) {
3472
0
  case MVT::i32: return fastEmit_ARMISD_SMULWB_MVT_i32_rr(RetVT, Op0, Op1);
3473
0
  default: return 0;
3474
0
  }
3475
0
}
3476
3477
// FastEmit functions for ARMISD::SMULWT.
3478
3479
0
unsigned fastEmit_ARMISD_SMULWT_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3480
0
  if (RetVT.SimpleTy != MVT::i32)
3481
0
    return 0;
3482
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3483
0
    return fastEmitInst_rr(ARM::t2SMULWT, &ARM::rGPRRegClass, Op0, Op1);
3484
0
  }
3485
0
  if ((Subtarget->hasV5TEOps()) && (!Subtarget->isThumb())) {
3486
0
    return fastEmitInst_rr(ARM::SMULWT, &ARM::GPRRegClass, Op0, Op1);
3487
0
  }
3488
0
  return 0;
3489
0
}
3490
3491
0
unsigned fastEmit_ARMISD_SMULWT_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3492
0
  switch (VT.SimpleTy) {
3493
0
  case MVT::i32: return fastEmit_ARMISD_SMULWT_MVT_i32_rr(RetVT, Op0, Op1);
3494
0
  default: return 0;
3495
0
  }
3496
0
}
3497
3498
// FastEmit functions for ARMISD::SUBS.
3499
3500
0
unsigned fastEmit_ARMISD_SUBS_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3501
0
  if (RetVT.SimpleTy != MVT::i32)
3502
0
    return 0;
3503
0
  if ((Subtarget->isThumb2())) {
3504
0
    return fastEmitInst_rr(ARM::t2SUBSrr, &ARM::rGPRRegClass, Op0, Op1);
3505
0
  }
3506
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
3507
0
    return fastEmitInst_rr(ARM::tSUBSrr, &ARM::tGPRRegClass, Op0, Op1);
3508
0
  }
3509
0
  if ((!Subtarget->isThumb())) {
3510
0
    return fastEmitInst_rr(ARM::SUBSrr, &ARM::GPRRegClass, Op0, Op1);
3511
0
  }
3512
0
  return 0;
3513
0
}
3514
3515
0
unsigned fastEmit_ARMISD_SUBS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3516
0
  switch (VT.SimpleTy) {
3517
0
  case MVT::i32: return fastEmit_ARMISD_SUBS_MVT_i32_rr(RetVT, Op0, Op1);
3518
0
  default: return 0;
3519
0
  }
3520
0
}
3521
3522
// FastEmit functions for ARMISD::UQADD16b.
3523
3524
0
unsigned fastEmit_ARMISD_UQADD16b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3525
0
  if (RetVT.SimpleTy != MVT::i32)
3526
0
    return 0;
3527
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3528
0
    return fastEmitInst_rr(ARM::t2UQADD16, &ARM::rGPRRegClass, Op0, Op1);
3529
0
  }
3530
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3531
0
    return fastEmitInst_rr(ARM::UQADD16, &ARM::GPRnopcRegClass, Op0, Op1);
3532
0
  }
3533
0
  return 0;
3534
0
}
3535
3536
0
unsigned fastEmit_ARMISD_UQADD16b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3537
0
  switch (VT.SimpleTy) {
3538
0
  case MVT::i32: return fastEmit_ARMISD_UQADD16b_MVT_i32_rr(RetVT, Op0, Op1);
3539
0
  default: return 0;
3540
0
  }
3541
0
}
3542
3543
// FastEmit functions for ARMISD::UQADD8b.
3544
3545
0
unsigned fastEmit_ARMISD_UQADD8b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3546
0
  if (RetVT.SimpleTy != MVT::i32)
3547
0
    return 0;
3548
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3549
0
    return fastEmitInst_rr(ARM::t2UQADD8, &ARM::rGPRRegClass, Op0, Op1);
3550
0
  }
3551
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3552
0
    return fastEmitInst_rr(ARM::UQADD8, &ARM::GPRnopcRegClass, Op0, Op1);
3553
0
  }
3554
0
  return 0;
3555
0
}
3556
3557
0
unsigned fastEmit_ARMISD_UQADD8b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3558
0
  switch (VT.SimpleTy) {
3559
0
  case MVT::i32: return fastEmit_ARMISD_UQADD8b_MVT_i32_rr(RetVT, Op0, Op1);
3560
0
  default: return 0;
3561
0
  }
3562
0
}
3563
3564
// FastEmit functions for ARMISD::UQSUB16b.
3565
3566
0
unsigned fastEmit_ARMISD_UQSUB16b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3567
0
  if (RetVT.SimpleTy != MVT::i32)
3568
0
    return 0;
3569
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3570
0
    return fastEmitInst_rr(ARM::t2UQSUB16, &ARM::rGPRRegClass, Op0, Op1);
3571
0
  }
3572
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3573
0
    return fastEmitInst_rr(ARM::UQSUB16, &ARM::GPRnopcRegClass, Op0, Op1);
3574
0
  }
3575
0
  return 0;
3576
0
}
3577
3578
0
unsigned fastEmit_ARMISD_UQSUB16b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3579
0
  switch (VT.SimpleTy) {
3580
0
  case MVT::i32: return fastEmit_ARMISD_UQSUB16b_MVT_i32_rr(RetVT, Op0, Op1);
3581
0
  default: return 0;
3582
0
  }
3583
0
}
3584
3585
// FastEmit functions for ARMISD::UQSUB8b.
3586
3587
0
unsigned fastEmit_ARMISD_UQSUB8b_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3588
0
  if (RetVT.SimpleTy != MVT::i32)
3589
0
    return 0;
3590
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
3591
0
    return fastEmitInst_rr(ARM::t2UQSUB8, &ARM::rGPRRegClass, Op0, Op1);
3592
0
  }
3593
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
3594
0
    return fastEmitInst_rr(ARM::UQSUB8, &ARM::GPRnopcRegClass, Op0, Op1);
3595
0
  }
3596
0
  return 0;
3597
0
}
3598
3599
0
unsigned fastEmit_ARMISD_UQSUB8b_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3600
0
  switch (VT.SimpleTy) {
3601
0
  case MVT::i32: return fastEmit_ARMISD_UQSUB8b_MVT_i32_rr(RetVT, Op0, Op1);
3602
0
  default: return 0;
3603
0
  }
3604
0
}
3605
3606
// FastEmit functions for ARMISD::VMLAVs.
3607
3608
0
unsigned fastEmit_ARMISD_VMLAVs_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3609
0
  if (RetVT.SimpleTy != MVT::i32)
3610
0
    return 0;
3611
0
  if ((Subtarget->hasMVEIntegerOps())) {
3612
0
    return fastEmitInst_rr(ARM::MVE_VMLADAVs8, &ARM::tGPREvenRegClass, Op0, Op1);
3613
0
  }
3614
0
  return 0;
3615
0
}
3616
3617
0
unsigned fastEmit_ARMISD_VMLAVs_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3618
0
  if (RetVT.SimpleTy != MVT::i32)
3619
0
    return 0;
3620
0
  if ((Subtarget->hasMVEIntegerOps())) {
3621
0
    return fastEmitInst_rr(ARM::MVE_VMLADAVs16, &ARM::tGPREvenRegClass, Op0, Op1);
3622
0
  }
3623
0
  return 0;
3624
0
}
3625
3626
0
unsigned fastEmit_ARMISD_VMLAVs_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3627
0
  switch (VT.SimpleTy) {
3628
0
  case MVT::v16i8: return fastEmit_ARMISD_VMLAVs_MVT_v16i8_rr(RetVT, Op0, Op1);
3629
0
  case MVT::v8i16: return fastEmit_ARMISD_VMLAVs_MVT_v8i16_rr(RetVT, Op0, Op1);
3630
0
  default: return 0;
3631
0
  }
3632
0
}
3633
3634
// FastEmit functions for ARMISD::VMLAVu.
3635
3636
0
unsigned fastEmit_ARMISD_VMLAVu_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3637
0
  if (RetVT.SimpleTy != MVT::i32)
3638
0
    return 0;
3639
0
  if ((Subtarget->hasMVEIntegerOps())) {
3640
0
    return fastEmitInst_rr(ARM::MVE_VMLADAVu8, &ARM::tGPREvenRegClass, Op0, Op1);
3641
0
  }
3642
0
  return 0;
3643
0
}
3644
3645
0
unsigned fastEmit_ARMISD_VMLAVu_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3646
0
  if (RetVT.SimpleTy != MVT::i32)
3647
0
    return 0;
3648
0
  if ((Subtarget->hasMVEIntegerOps())) {
3649
0
    return fastEmitInst_rr(ARM::MVE_VMLADAVu16, &ARM::tGPREvenRegClass, Op0, Op1);
3650
0
  }
3651
0
  return 0;
3652
0
}
3653
3654
0
unsigned fastEmit_ARMISD_VMLAVu_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3655
0
  switch (VT.SimpleTy) {
3656
0
  case MVT::v16i8: return fastEmit_ARMISD_VMLAVu_MVT_v16i8_rr(RetVT, Op0, Op1);
3657
0
  case MVT::v8i16: return fastEmit_ARMISD_VMLAVu_MVT_v8i16_rr(RetVT, Op0, Op1);
3658
0
  default: return 0;
3659
0
  }
3660
0
}
3661
3662
// FastEmit functions for ARMISD::VMOVDRR.
3663
3664
0
unsigned fastEmit_ARMISD_VMOVDRR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3665
0
  if (RetVT.SimpleTy != MVT::f64)
3666
0
    return 0;
3667
0
  if ((Subtarget->hasFPRegs())) {
3668
0
    return fastEmitInst_rr(ARM::VMOVDRR, &ARM::DPRRegClass, Op0, Op1);
3669
0
  }
3670
0
  return 0;
3671
0
}
3672
3673
0
unsigned fastEmit_ARMISD_VMOVDRR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3674
0
  switch (VT.SimpleTy) {
3675
0
  case MVT::i32: return fastEmit_ARMISD_VMOVDRR_MVT_i32_rr(RetVT, Op0, Op1);
3676
0
  default: return 0;
3677
0
  }
3678
0
}
3679
3680
// FastEmit functions for ARMISD::VMULLs.
3681
3682
0
unsigned fastEmit_ARMISD_VMULLs_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3683
0
  if (RetVT.SimpleTy != MVT::v8i16)
3684
0
    return 0;
3685
0
  if ((Subtarget->hasNEON())) {
3686
0
    return fastEmitInst_rr(ARM::VMULLsv8i16, &ARM::QPRRegClass, Op0, Op1);
3687
0
  }
3688
0
  return 0;
3689
0
}
3690
3691
0
unsigned fastEmit_ARMISD_VMULLs_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3692
0
  if (RetVT.SimpleTy != MVT::v4i32)
3693
0
    return 0;
3694
0
  if ((Subtarget->hasNEON())) {
3695
0
    return fastEmitInst_rr(ARM::VMULLsv4i32, &ARM::QPRRegClass, Op0, Op1);
3696
0
  }
3697
0
  return 0;
3698
0
}
3699
3700
0
unsigned fastEmit_ARMISD_VMULLs_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3701
0
  if (RetVT.SimpleTy != MVT::v2i64)
3702
0
    return 0;
3703
0
  if ((Subtarget->hasNEON())) {
3704
0
    return fastEmitInst_rr(ARM::VMULLsv2i64, &ARM::QPRRegClass, Op0, Op1);
3705
0
  }
3706
0
  return 0;
3707
0
}
3708
3709
0
unsigned fastEmit_ARMISD_VMULLs_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3710
0
  if (RetVT.SimpleTy != MVT::v2i64)
3711
0
    return 0;
3712
0
  if ((Subtarget->hasMVEIntegerOps())) {
3713
0
    return fastEmitInst_rr(ARM::MVE_VMULLBs32, &ARM::MQPRRegClass, Op0, Op1);
3714
0
  }
3715
0
  return 0;
3716
0
}
3717
3718
0
unsigned fastEmit_ARMISD_VMULLs_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3719
0
  switch (VT.SimpleTy) {
3720
0
  case MVT::v8i8: return fastEmit_ARMISD_VMULLs_MVT_v8i8_rr(RetVT, Op0, Op1);
3721
0
  case MVT::v4i16: return fastEmit_ARMISD_VMULLs_MVT_v4i16_rr(RetVT, Op0, Op1);
3722
0
  case MVT::v2i32: return fastEmit_ARMISD_VMULLs_MVT_v2i32_rr(RetVT, Op0, Op1);
3723
0
  case MVT::v4i32: return fastEmit_ARMISD_VMULLs_MVT_v4i32_rr(RetVT, Op0, Op1);
3724
0
  default: return 0;
3725
0
  }
3726
0
}
3727
3728
// FastEmit functions for ARMISD::VMULLu.
3729
3730
0
unsigned fastEmit_ARMISD_VMULLu_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3731
0
  if (RetVT.SimpleTy != MVT::v8i16)
3732
0
    return 0;
3733
0
  if ((Subtarget->hasNEON())) {
3734
0
    return fastEmitInst_rr(ARM::VMULLuv8i16, &ARM::QPRRegClass, Op0, Op1);
3735
0
  }
3736
0
  return 0;
3737
0
}
3738
3739
0
unsigned fastEmit_ARMISD_VMULLu_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3740
0
  if (RetVT.SimpleTy != MVT::v4i32)
3741
0
    return 0;
3742
0
  if ((Subtarget->hasNEON())) {
3743
0
    return fastEmitInst_rr(ARM::VMULLuv4i32, &ARM::QPRRegClass, Op0, Op1);
3744
0
  }
3745
0
  return 0;
3746
0
}
3747
3748
0
unsigned fastEmit_ARMISD_VMULLu_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3749
0
  if (RetVT.SimpleTy != MVT::v2i64)
3750
0
    return 0;
3751
0
  if ((Subtarget->hasNEON())) {
3752
0
    return fastEmitInst_rr(ARM::VMULLuv2i64, &ARM::QPRRegClass, Op0, Op1);
3753
0
  }
3754
0
  return 0;
3755
0
}
3756
3757
0
unsigned fastEmit_ARMISD_VMULLu_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3758
0
  if (RetVT.SimpleTy != MVT::v2i64)
3759
0
    return 0;
3760
0
  if ((Subtarget->hasMVEIntegerOps())) {
3761
0
    return fastEmitInst_rr(ARM::MVE_VMULLBu32, &ARM::MQPRRegClass, Op0, Op1);
3762
0
  }
3763
0
  return 0;
3764
0
}
3765
3766
0
unsigned fastEmit_ARMISD_VMULLu_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3767
0
  switch (VT.SimpleTy) {
3768
0
  case MVT::v8i8: return fastEmit_ARMISD_VMULLu_MVT_v8i8_rr(RetVT, Op0, Op1);
3769
0
  case MVT::v4i16: return fastEmit_ARMISD_VMULLu_MVT_v4i16_rr(RetVT, Op0, Op1);
3770
0
  case MVT::v2i32: return fastEmit_ARMISD_VMULLu_MVT_v2i32_rr(RetVT, Op0, Op1);
3771
0
  case MVT::v4i32: return fastEmit_ARMISD_VMULLu_MVT_v4i32_rr(RetVT, Op0, Op1);
3772
0
  default: return 0;
3773
0
  }
3774
0
}
3775
3776
// FastEmit functions for ARMISD::VQDMULH.
3777
3778
0
unsigned fastEmit_ARMISD_VQDMULH_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3779
0
  if (RetVT.SimpleTy != MVT::v16i8)
3780
0
    return 0;
3781
0
  if ((Subtarget->hasMVEIntegerOps())) {
3782
0
    return fastEmitInst_rr(ARM::MVE_VQDMULHi8, &ARM::MQPRRegClass, Op0, Op1);
3783
0
  }
3784
0
  return 0;
3785
0
}
3786
3787
0
unsigned fastEmit_ARMISD_VQDMULH_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3788
0
  if (RetVT.SimpleTy != MVT::v8i16)
3789
0
    return 0;
3790
0
  if ((Subtarget->hasMVEIntegerOps())) {
3791
0
    return fastEmitInst_rr(ARM::MVE_VQDMULHi16, &ARM::MQPRRegClass, Op0, Op1);
3792
0
  }
3793
0
  return 0;
3794
0
}
3795
3796
0
unsigned fastEmit_ARMISD_VQDMULH_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3797
0
  if (RetVT.SimpleTy != MVT::v4i32)
3798
0
    return 0;
3799
0
  if ((Subtarget->hasMVEIntegerOps())) {
3800
0
    return fastEmitInst_rr(ARM::MVE_VQDMULHi32, &ARM::MQPRRegClass, Op0, Op1);
3801
0
  }
3802
0
  return 0;
3803
0
}
3804
3805
0
unsigned fastEmit_ARMISD_VQDMULH_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3806
0
  switch (VT.SimpleTy) {
3807
0
  case MVT::v16i8: return fastEmit_ARMISD_VQDMULH_MVT_v16i8_rr(RetVT, Op0, Op1);
3808
0
  case MVT::v8i16: return fastEmit_ARMISD_VQDMULH_MVT_v8i16_rr(RetVT, Op0, Op1);
3809
0
  case MVT::v4i32: return fastEmit_ARMISD_VQDMULH_MVT_v4i32_rr(RetVT, Op0, Op1);
3810
0
  default: return 0;
3811
0
  }
3812
0
}
3813
3814
// FastEmit functions for ARMISD::VSHLs.
3815
3816
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3817
0
  if (RetVT.SimpleTy != MVT::v8i8)
3818
0
    return 0;
3819
0
  if ((Subtarget->hasNEON())) {
3820
0
    return fastEmitInst_rr(ARM::VSHLsv8i8, &ARM::DPRRegClass, Op0, Op1);
3821
0
  }
3822
0
  return 0;
3823
0
}
3824
3825
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3826
0
  if (RetVT.SimpleTy != MVT::v16i8)
3827
0
    return 0;
3828
0
  if ((Subtarget->hasMVEIntegerOps())) {
3829
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecs8, &ARM::MQPRRegClass, Op0, Op1);
3830
0
  }
3831
0
  if ((Subtarget->hasNEON())) {
3832
0
    return fastEmitInst_rr(ARM::VSHLsv16i8, &ARM::QPRRegClass, Op0, Op1);
3833
0
  }
3834
0
  return 0;
3835
0
}
3836
3837
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3838
0
  if (RetVT.SimpleTy != MVT::v4i16)
3839
0
    return 0;
3840
0
  if ((Subtarget->hasNEON())) {
3841
0
    return fastEmitInst_rr(ARM::VSHLsv4i16, &ARM::DPRRegClass, Op0, Op1);
3842
0
  }
3843
0
  return 0;
3844
0
}
3845
3846
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3847
0
  if (RetVT.SimpleTy != MVT::v8i16)
3848
0
    return 0;
3849
0
  if ((Subtarget->hasMVEIntegerOps())) {
3850
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecs16, &ARM::MQPRRegClass, Op0, Op1);
3851
0
  }
3852
0
  if ((Subtarget->hasNEON())) {
3853
0
    return fastEmitInst_rr(ARM::VSHLsv8i16, &ARM::QPRRegClass, Op0, Op1);
3854
0
  }
3855
0
  return 0;
3856
0
}
3857
3858
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3859
0
  if (RetVT.SimpleTy != MVT::v2i32)
3860
0
    return 0;
3861
0
  if ((Subtarget->hasNEON())) {
3862
0
    return fastEmitInst_rr(ARM::VSHLsv2i32, &ARM::DPRRegClass, Op0, Op1);
3863
0
  }
3864
0
  return 0;
3865
0
}
3866
3867
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3868
0
  if (RetVT.SimpleTy != MVT::v4i32)
3869
0
    return 0;
3870
0
  if ((Subtarget->hasMVEIntegerOps())) {
3871
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecs32, &ARM::MQPRRegClass, Op0, Op1);
3872
0
  }
3873
0
  if ((Subtarget->hasNEON())) {
3874
0
    return fastEmitInst_rr(ARM::VSHLsv4i32, &ARM::QPRRegClass, Op0, Op1);
3875
0
  }
3876
0
  return 0;
3877
0
}
3878
3879
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3880
0
  if (RetVT.SimpleTy != MVT::v1i64)
3881
0
    return 0;
3882
0
  if ((Subtarget->hasNEON())) {
3883
0
    return fastEmitInst_rr(ARM::VSHLsv1i64, &ARM::DPRRegClass, Op0, Op1);
3884
0
  }
3885
0
  return 0;
3886
0
}
3887
3888
0
unsigned fastEmit_ARMISD_VSHLs_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3889
0
  if (RetVT.SimpleTy != MVT::v2i64)
3890
0
    return 0;
3891
0
  if ((Subtarget->hasNEON())) {
3892
0
    return fastEmitInst_rr(ARM::VSHLsv2i64, &ARM::QPRRegClass, Op0, Op1);
3893
0
  }
3894
0
  return 0;
3895
0
}
3896
3897
0
unsigned fastEmit_ARMISD_VSHLs_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3898
0
  switch (VT.SimpleTy) {
3899
0
  case MVT::v8i8: return fastEmit_ARMISD_VSHLs_MVT_v8i8_rr(RetVT, Op0, Op1);
3900
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHLs_MVT_v16i8_rr(RetVT, Op0, Op1);
3901
0
  case MVT::v4i16: return fastEmit_ARMISD_VSHLs_MVT_v4i16_rr(RetVT, Op0, Op1);
3902
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHLs_MVT_v8i16_rr(RetVT, Op0, Op1);
3903
0
  case MVT::v2i32: return fastEmit_ARMISD_VSHLs_MVT_v2i32_rr(RetVT, Op0, Op1);
3904
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHLs_MVT_v4i32_rr(RetVT, Op0, Op1);
3905
0
  case MVT::v1i64: return fastEmit_ARMISD_VSHLs_MVT_v1i64_rr(RetVT, Op0, Op1);
3906
0
  case MVT::v2i64: return fastEmit_ARMISD_VSHLs_MVT_v2i64_rr(RetVT, Op0, Op1);
3907
0
  default: return 0;
3908
0
  }
3909
0
}
3910
3911
// FastEmit functions for ARMISD::VSHLu.
3912
3913
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3914
0
  if (RetVT.SimpleTy != MVT::v8i8)
3915
0
    return 0;
3916
0
  if ((Subtarget->hasNEON())) {
3917
0
    return fastEmitInst_rr(ARM::VSHLuv8i8, &ARM::DPRRegClass, Op0, Op1);
3918
0
  }
3919
0
  return 0;
3920
0
}
3921
3922
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3923
0
  if (RetVT.SimpleTy != MVT::v16i8)
3924
0
    return 0;
3925
0
  if ((Subtarget->hasMVEIntegerOps())) {
3926
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecu8, &ARM::MQPRRegClass, Op0, Op1);
3927
0
  }
3928
0
  if ((Subtarget->hasNEON())) {
3929
0
    return fastEmitInst_rr(ARM::VSHLuv16i8, &ARM::QPRRegClass, Op0, Op1);
3930
0
  }
3931
0
  return 0;
3932
0
}
3933
3934
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3935
0
  if (RetVT.SimpleTy != MVT::v4i16)
3936
0
    return 0;
3937
0
  if ((Subtarget->hasNEON())) {
3938
0
    return fastEmitInst_rr(ARM::VSHLuv4i16, &ARM::DPRRegClass, Op0, Op1);
3939
0
  }
3940
0
  return 0;
3941
0
}
3942
3943
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3944
0
  if (RetVT.SimpleTy != MVT::v8i16)
3945
0
    return 0;
3946
0
  if ((Subtarget->hasMVEIntegerOps())) {
3947
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecu16, &ARM::MQPRRegClass, Op0, Op1);
3948
0
  }
3949
0
  if ((Subtarget->hasNEON())) {
3950
0
    return fastEmitInst_rr(ARM::VSHLuv8i16, &ARM::QPRRegClass, Op0, Op1);
3951
0
  }
3952
0
  return 0;
3953
0
}
3954
3955
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3956
0
  if (RetVT.SimpleTy != MVT::v2i32)
3957
0
    return 0;
3958
0
  if ((Subtarget->hasNEON())) {
3959
0
    return fastEmitInst_rr(ARM::VSHLuv2i32, &ARM::DPRRegClass, Op0, Op1);
3960
0
  }
3961
0
  return 0;
3962
0
}
3963
3964
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3965
0
  if (RetVT.SimpleTy != MVT::v4i32)
3966
0
    return 0;
3967
0
  if ((Subtarget->hasMVEIntegerOps())) {
3968
0
    return fastEmitInst_rr(ARM::MVE_VSHL_by_vecu32, &ARM::MQPRRegClass, Op0, Op1);
3969
0
  }
3970
0
  if ((Subtarget->hasNEON())) {
3971
0
    return fastEmitInst_rr(ARM::VSHLuv4i32, &ARM::QPRRegClass, Op0, Op1);
3972
0
  }
3973
0
  return 0;
3974
0
}
3975
3976
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3977
0
  if (RetVT.SimpleTy != MVT::v1i64)
3978
0
    return 0;
3979
0
  if ((Subtarget->hasNEON())) {
3980
0
    return fastEmitInst_rr(ARM::VSHLuv1i64, &ARM::DPRRegClass, Op0, Op1);
3981
0
  }
3982
0
  return 0;
3983
0
}
3984
3985
0
unsigned fastEmit_ARMISD_VSHLu_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
3986
0
  if (RetVT.SimpleTy != MVT::v2i64)
3987
0
    return 0;
3988
0
  if ((Subtarget->hasNEON())) {
3989
0
    return fastEmitInst_rr(ARM::VSHLuv2i64, &ARM::QPRRegClass, Op0, Op1);
3990
0
  }
3991
0
  return 0;
3992
0
}
3993
3994
0
unsigned fastEmit_ARMISD_VSHLu_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
3995
0
  switch (VT.SimpleTy) {
3996
0
  case MVT::v8i8: return fastEmit_ARMISD_VSHLu_MVT_v8i8_rr(RetVT, Op0, Op1);
3997
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHLu_MVT_v16i8_rr(RetVT, Op0, Op1);
3998
0
  case MVT::v4i16: return fastEmit_ARMISD_VSHLu_MVT_v4i16_rr(RetVT, Op0, Op1);
3999
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHLu_MVT_v8i16_rr(RetVT, Op0, Op1);
4000
0
  case MVT::v2i32: return fastEmit_ARMISD_VSHLu_MVT_v2i32_rr(RetVT, Op0, Op1);
4001
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHLu_MVT_v4i32_rr(RetVT, Op0, Op1);
4002
0
  case MVT::v1i64: return fastEmit_ARMISD_VSHLu_MVT_v1i64_rr(RetVT, Op0, Op1);
4003
0
  case MVT::v2i64: return fastEmit_ARMISD_VSHLu_MVT_v2i64_rr(RetVT, Op0, Op1);
4004
0
  default: return 0;
4005
0
  }
4006
0
}
4007
4008
// FastEmit functions for ARMISD::VTBL1.
4009
4010
0
unsigned fastEmit_ARMISD_VTBL1_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4011
0
  if (RetVT.SimpleTy != MVT::v8i8)
4012
0
    return 0;
4013
0
  if ((Subtarget->hasNEON())) {
4014
0
    return fastEmitInst_rr(ARM::VTBL1, &ARM::DPRRegClass, Op0, Op1);
4015
0
  }
4016
0
  return 0;
4017
0
}
4018
4019
0
unsigned fastEmit_ARMISD_VTBL1_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4020
0
  switch (VT.SimpleTy) {
4021
0
  case MVT::v8i8: return fastEmit_ARMISD_VTBL1_MVT_v8i8_rr(RetVT, Op0, Op1);
4022
0
  default: return 0;
4023
0
  }
4024
0
}
4025
4026
// FastEmit functions for ARMISD::VTST.
4027
4028
0
unsigned fastEmit_ARMISD_VTST_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4029
0
  if (RetVT.SimpleTy != MVT::v8i8)
4030
0
    return 0;
4031
0
  if ((Subtarget->hasNEON())) {
4032
0
    return fastEmitInst_rr(ARM::VTSTv8i8, &ARM::DPRRegClass, Op0, Op1);
4033
0
  }
4034
0
  return 0;
4035
0
}
4036
4037
0
unsigned fastEmit_ARMISD_VTST_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4038
0
  if (RetVT.SimpleTy != MVT::v16i8)
4039
0
    return 0;
4040
0
  if ((Subtarget->hasNEON())) {
4041
0
    return fastEmitInst_rr(ARM::VTSTv16i8, &ARM::QPRRegClass, Op0, Op1);
4042
0
  }
4043
0
  return 0;
4044
0
}
4045
4046
0
unsigned fastEmit_ARMISD_VTST_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4047
0
  if (RetVT.SimpleTy != MVT::v4i16)
4048
0
    return 0;
4049
0
  if ((Subtarget->hasNEON())) {
4050
0
    return fastEmitInst_rr(ARM::VTSTv4i16, &ARM::DPRRegClass, Op0, Op1);
4051
0
  }
4052
0
  return 0;
4053
0
}
4054
4055
0
unsigned fastEmit_ARMISD_VTST_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4056
0
  if (RetVT.SimpleTy != MVT::v8i16)
4057
0
    return 0;
4058
0
  if ((Subtarget->hasNEON())) {
4059
0
    return fastEmitInst_rr(ARM::VTSTv8i16, &ARM::QPRRegClass, Op0, Op1);
4060
0
  }
4061
0
  return 0;
4062
0
}
4063
4064
0
unsigned fastEmit_ARMISD_VTST_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4065
0
  if (RetVT.SimpleTy != MVT::v2i32)
4066
0
    return 0;
4067
0
  if ((Subtarget->hasNEON())) {
4068
0
    return fastEmitInst_rr(ARM::VTSTv2i32, &ARM::DPRRegClass, Op0, Op1);
4069
0
  }
4070
0
  return 0;
4071
0
}
4072
4073
0
unsigned fastEmit_ARMISD_VTST_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4074
0
  if (RetVT.SimpleTy != MVT::v4i32)
4075
0
    return 0;
4076
0
  if ((Subtarget->hasNEON())) {
4077
0
    return fastEmitInst_rr(ARM::VTSTv4i32, &ARM::QPRRegClass, Op0, Op1);
4078
0
  }
4079
0
  return 0;
4080
0
}
4081
4082
0
unsigned fastEmit_ARMISD_VTST_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4083
0
  switch (VT.SimpleTy) {
4084
0
  case MVT::v8i8: return fastEmit_ARMISD_VTST_MVT_v8i8_rr(RetVT, Op0, Op1);
4085
0
  case MVT::v16i8: return fastEmit_ARMISD_VTST_MVT_v16i8_rr(RetVT, Op0, Op1);
4086
0
  case MVT::v4i16: return fastEmit_ARMISD_VTST_MVT_v4i16_rr(RetVT, Op0, Op1);
4087
0
  case MVT::v8i16: return fastEmit_ARMISD_VTST_MVT_v8i16_rr(RetVT, Op0, Op1);
4088
0
  case MVT::v2i32: return fastEmit_ARMISD_VTST_MVT_v2i32_rr(RetVT, Op0, Op1);
4089
0
  case MVT::v4i32: return fastEmit_ARMISD_VTST_MVT_v4i32_rr(RetVT, Op0, Op1);
4090
0
  default: return 0;
4091
0
  }
4092
0
}
4093
4094
// FastEmit functions for ISD::ABDS.
4095
4096
0
unsigned fastEmit_ISD_ABDS_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4097
0
  if (RetVT.SimpleTy != MVT::v16i8)
4098
0
    return 0;
4099
0
  if ((Subtarget->hasMVEIntegerOps())) {
4100
0
    return fastEmitInst_rr(ARM::MVE_VABDs8, &ARM::MQPRRegClass, Op0, Op1);
4101
0
  }
4102
0
  return 0;
4103
0
}
4104
4105
0
unsigned fastEmit_ISD_ABDS_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4106
0
  if (RetVT.SimpleTy != MVT::v8i16)
4107
0
    return 0;
4108
0
  if ((Subtarget->hasMVEIntegerOps())) {
4109
0
    return fastEmitInst_rr(ARM::MVE_VABDs16, &ARM::MQPRRegClass, Op0, Op1);
4110
0
  }
4111
0
  return 0;
4112
0
}
4113
4114
0
unsigned fastEmit_ISD_ABDS_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4115
0
  if (RetVT.SimpleTy != MVT::v4i32)
4116
0
    return 0;
4117
0
  if ((Subtarget->hasMVEIntegerOps())) {
4118
0
    return fastEmitInst_rr(ARM::MVE_VABDs32, &ARM::MQPRRegClass, Op0, Op1);
4119
0
  }
4120
0
  return 0;
4121
0
}
4122
4123
0
unsigned fastEmit_ISD_ABDS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4124
0
  switch (VT.SimpleTy) {
4125
0
  case MVT::v16i8: return fastEmit_ISD_ABDS_MVT_v16i8_rr(RetVT, Op0, Op1);
4126
0
  case MVT::v8i16: return fastEmit_ISD_ABDS_MVT_v8i16_rr(RetVT, Op0, Op1);
4127
0
  case MVT::v4i32: return fastEmit_ISD_ABDS_MVT_v4i32_rr(RetVT, Op0, Op1);
4128
0
  default: return 0;
4129
0
  }
4130
0
}
4131
4132
// FastEmit functions for ISD::ABDU.
4133
4134
0
unsigned fastEmit_ISD_ABDU_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4135
0
  if (RetVT.SimpleTy != MVT::v16i8)
4136
0
    return 0;
4137
0
  if ((Subtarget->hasMVEIntegerOps())) {
4138
0
    return fastEmitInst_rr(ARM::MVE_VABDu8, &ARM::MQPRRegClass, Op0, Op1);
4139
0
  }
4140
0
  return 0;
4141
0
}
4142
4143
0
unsigned fastEmit_ISD_ABDU_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4144
0
  if (RetVT.SimpleTy != MVT::v8i16)
4145
0
    return 0;
4146
0
  if ((Subtarget->hasMVEIntegerOps())) {
4147
0
    return fastEmitInst_rr(ARM::MVE_VABDu16, &ARM::MQPRRegClass, Op0, Op1);
4148
0
  }
4149
0
  return 0;
4150
0
}
4151
4152
0
unsigned fastEmit_ISD_ABDU_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4153
0
  if (RetVT.SimpleTy != MVT::v4i32)
4154
0
    return 0;
4155
0
  if ((Subtarget->hasMVEIntegerOps())) {
4156
0
    return fastEmitInst_rr(ARM::MVE_VABDu32, &ARM::MQPRRegClass, Op0, Op1);
4157
0
  }
4158
0
  return 0;
4159
0
}
4160
4161
0
unsigned fastEmit_ISD_ABDU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4162
0
  switch (VT.SimpleTy) {
4163
0
  case MVT::v16i8: return fastEmit_ISD_ABDU_MVT_v16i8_rr(RetVT, Op0, Op1);
4164
0
  case MVT::v8i16: return fastEmit_ISD_ABDU_MVT_v8i16_rr(RetVT, Op0, Op1);
4165
0
  case MVT::v4i32: return fastEmit_ISD_ABDU_MVT_v4i32_rr(RetVT, Op0, Op1);
4166
0
  default: return 0;
4167
0
  }
4168
0
}
4169
4170
// FastEmit functions for ISD::ADD.
4171
4172
0
unsigned fastEmit_ISD_ADD_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4173
0
  if (RetVT.SimpleTy != MVT::i32)
4174
0
    return 0;
4175
0
  if ((Subtarget->isThumb2())) {
4176
0
    return fastEmitInst_rr(ARM::t2ADDrr, &ARM::GPRnopcRegClass, Op0, Op1);
4177
0
  }
4178
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
4179
0
    return fastEmitInst_rr(ARM::tADDrr, &ARM::tGPRRegClass, Op0, Op1);
4180
0
  }
4181
0
  if ((!Subtarget->isThumb())) {
4182
0
    return fastEmitInst_rr(ARM::ADDrr, &ARM::GPRRegClass, Op0, Op1);
4183
0
  }
4184
0
  return 0;
4185
0
}
4186
4187
0
unsigned fastEmit_ISD_ADD_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4188
0
  if (RetVT.SimpleTy != MVT::v8i8)
4189
0
    return 0;
4190
0
  if ((Subtarget->hasNEON())) {
4191
0
    return fastEmitInst_rr(ARM::VADDv8i8, &ARM::DPRRegClass, Op0, Op1);
4192
0
  }
4193
0
  return 0;
4194
0
}
4195
4196
0
unsigned fastEmit_ISD_ADD_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4197
0
  if (RetVT.SimpleTy != MVT::v16i8)
4198
0
    return 0;
4199
0
  if ((Subtarget->hasMVEIntegerOps())) {
4200
0
    return fastEmitInst_rr(ARM::MVE_VADDi8, &ARM::MQPRRegClass, Op0, Op1);
4201
0
  }
4202
0
  if ((Subtarget->hasNEON())) {
4203
0
    return fastEmitInst_rr(ARM::VADDv16i8, &ARM::QPRRegClass, Op0, Op1);
4204
0
  }
4205
0
  return 0;
4206
0
}
4207
4208
0
unsigned fastEmit_ISD_ADD_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4209
0
  if (RetVT.SimpleTy != MVT::v4i16)
4210
0
    return 0;
4211
0
  if ((Subtarget->hasNEON())) {
4212
0
    return fastEmitInst_rr(ARM::VADDv4i16, &ARM::DPRRegClass, Op0, Op1);
4213
0
  }
4214
0
  return 0;
4215
0
}
4216
4217
0
unsigned fastEmit_ISD_ADD_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4218
0
  if (RetVT.SimpleTy != MVT::v8i16)
4219
0
    return 0;
4220
0
  if ((Subtarget->hasMVEIntegerOps())) {
4221
0
    return fastEmitInst_rr(ARM::MVE_VADDi16, &ARM::MQPRRegClass, Op0, Op1);
4222
0
  }
4223
0
  if ((Subtarget->hasNEON())) {
4224
0
    return fastEmitInst_rr(ARM::VADDv8i16, &ARM::QPRRegClass, Op0, Op1);
4225
0
  }
4226
0
  return 0;
4227
0
}
4228
4229
0
unsigned fastEmit_ISD_ADD_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4230
0
  if (RetVT.SimpleTy != MVT::v2i32)
4231
0
    return 0;
4232
0
  if ((Subtarget->hasNEON())) {
4233
0
    return fastEmitInst_rr(ARM::VADDv2i32, &ARM::DPRRegClass, Op0, Op1);
4234
0
  }
4235
0
  return 0;
4236
0
}
4237
4238
0
unsigned fastEmit_ISD_ADD_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4239
0
  if (RetVT.SimpleTy != MVT::v4i32)
4240
0
    return 0;
4241
0
  if ((Subtarget->hasMVEIntegerOps())) {
4242
0
    return fastEmitInst_rr(ARM::MVE_VADDi32, &ARM::MQPRRegClass, Op0, Op1);
4243
0
  }
4244
0
  if ((Subtarget->hasNEON())) {
4245
0
    return fastEmitInst_rr(ARM::VADDv4i32, &ARM::QPRRegClass, Op0, Op1);
4246
0
  }
4247
0
  return 0;
4248
0
}
4249
4250
0
unsigned fastEmit_ISD_ADD_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4251
0
  if (RetVT.SimpleTy != MVT::v1i64)
4252
0
    return 0;
4253
0
  if ((Subtarget->hasNEON())) {
4254
0
    return fastEmitInst_rr(ARM::VADDv1i64, &ARM::DPRRegClass, Op0, Op1);
4255
0
  }
4256
0
  return 0;
4257
0
}
4258
4259
0
unsigned fastEmit_ISD_ADD_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4260
0
  if (RetVT.SimpleTy != MVT::v2i64)
4261
0
    return 0;
4262
0
  if ((Subtarget->hasNEON())) {
4263
0
    return fastEmitInst_rr(ARM::VADDv2i64, &ARM::QPRRegClass, Op0, Op1);
4264
0
  }
4265
0
  return 0;
4266
0
}
4267
4268
0
unsigned fastEmit_ISD_ADD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4269
0
  switch (VT.SimpleTy) {
4270
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_rr(RetVT, Op0, Op1);
4271
0
  case MVT::v8i8: return fastEmit_ISD_ADD_MVT_v8i8_rr(RetVT, Op0, Op1);
4272
0
  case MVT::v16i8: return fastEmit_ISD_ADD_MVT_v16i8_rr(RetVT, Op0, Op1);
4273
0
  case MVT::v4i16: return fastEmit_ISD_ADD_MVT_v4i16_rr(RetVT, Op0, Op1);
4274
0
  case MVT::v8i16: return fastEmit_ISD_ADD_MVT_v8i16_rr(RetVT, Op0, Op1);
4275
0
  case MVT::v2i32: return fastEmit_ISD_ADD_MVT_v2i32_rr(RetVT, Op0, Op1);
4276
0
  case MVT::v4i32: return fastEmit_ISD_ADD_MVT_v4i32_rr(RetVT, Op0, Op1);
4277
0
  case MVT::v1i64: return fastEmit_ISD_ADD_MVT_v1i64_rr(RetVT, Op0, Op1);
4278
0
  case MVT::v2i64: return fastEmit_ISD_ADD_MVT_v2i64_rr(RetVT, Op0, Op1);
4279
0
  default: return 0;
4280
0
  }
4281
0
}
4282
4283
// FastEmit functions for ISD::AND.
4284
4285
0
unsigned fastEmit_ISD_AND_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4286
0
  if (RetVT.SimpleTy != MVT::i32)
4287
0
    return 0;
4288
0
  if ((Subtarget->isThumb2())) {
4289
0
    return fastEmitInst_rr(ARM::t2ANDrr, &ARM::rGPRRegClass, Op0, Op1);
4290
0
  }
4291
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
4292
0
    return fastEmitInst_rr(ARM::tAND, &ARM::tGPRRegClass, Op0, Op1);
4293
0
  }
4294
0
  if ((!Subtarget->isThumb())) {
4295
0
    return fastEmitInst_rr(ARM::ANDrr, &ARM::GPRRegClass, Op0, Op1);
4296
0
  }
4297
0
  return 0;
4298
0
}
4299
4300
0
unsigned fastEmit_ISD_AND_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4301
0
  if (RetVT.SimpleTy != MVT::v8i8)
4302
0
    return 0;
4303
0
  if ((Subtarget->hasNEON())) {
4304
0
    return fastEmitInst_rr(ARM::VANDd, &ARM::DPRRegClass, Op0, Op1);
4305
0
  }
4306
0
  return 0;
4307
0
}
4308
4309
0
unsigned fastEmit_ISD_AND_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4310
0
  if (RetVT.SimpleTy != MVT::v16i8)
4311
0
    return 0;
4312
0
  if ((Subtarget->hasMVEIntegerOps())) {
4313
0
    return fastEmitInst_rr(ARM::MVE_VAND, &ARM::MQPRRegClass, Op0, Op1);
4314
0
  }
4315
0
  if ((Subtarget->hasNEON())) {
4316
0
    return fastEmitInst_rr(ARM::VANDq, &ARM::QPRRegClass, Op0, Op1);
4317
0
  }
4318
0
  return 0;
4319
0
}
4320
4321
0
unsigned fastEmit_ISD_AND_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4322
0
  if (RetVT.SimpleTy != MVT::v4i16)
4323
0
    return 0;
4324
0
  if ((Subtarget->hasNEON())) {
4325
0
    return fastEmitInst_rr(ARM::VANDd, &ARM::DPRRegClass, Op0, Op1);
4326
0
  }
4327
0
  return 0;
4328
0
}
4329
4330
0
unsigned fastEmit_ISD_AND_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4331
0
  if (RetVT.SimpleTy != MVT::v8i16)
4332
0
    return 0;
4333
0
  if ((Subtarget->hasMVEIntegerOps())) {
4334
0
    return fastEmitInst_rr(ARM::MVE_VAND, &ARM::MQPRRegClass, Op0, Op1);
4335
0
  }
4336
0
  if ((Subtarget->hasNEON())) {
4337
0
    return fastEmitInst_rr(ARM::VANDq, &ARM::QPRRegClass, Op0, Op1);
4338
0
  }
4339
0
  return 0;
4340
0
}
4341
4342
0
unsigned fastEmit_ISD_AND_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4343
0
  if (RetVT.SimpleTy != MVT::v2i32)
4344
0
    return 0;
4345
0
  if ((Subtarget->hasNEON())) {
4346
0
    return fastEmitInst_rr(ARM::VANDd, &ARM::DPRRegClass, Op0, Op1);
4347
0
  }
4348
0
  return 0;
4349
0
}
4350
4351
0
unsigned fastEmit_ISD_AND_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4352
0
  if (RetVT.SimpleTy != MVT::v4i32)
4353
0
    return 0;
4354
0
  if ((Subtarget->hasMVEIntegerOps())) {
4355
0
    return fastEmitInst_rr(ARM::MVE_VAND, &ARM::MQPRRegClass, Op0, Op1);
4356
0
  }
4357
0
  if ((Subtarget->hasNEON())) {
4358
0
    return fastEmitInst_rr(ARM::VANDq, &ARM::QPRRegClass, Op0, Op1);
4359
0
  }
4360
0
  return 0;
4361
0
}
4362
4363
0
unsigned fastEmit_ISD_AND_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4364
0
  if (RetVT.SimpleTy != MVT::v1i64)
4365
0
    return 0;
4366
0
  if ((Subtarget->hasNEON())) {
4367
0
    return fastEmitInst_rr(ARM::VANDd, &ARM::DPRRegClass, Op0, Op1);
4368
0
  }
4369
0
  return 0;
4370
0
}
4371
4372
0
unsigned fastEmit_ISD_AND_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4373
0
  if (RetVT.SimpleTy != MVT::v2i64)
4374
0
    return 0;
4375
0
  if ((Subtarget->hasMVEIntegerOps())) {
4376
0
    return fastEmitInst_rr(ARM::MVE_VAND, &ARM::MQPRRegClass, Op0, Op1);
4377
0
  }
4378
0
  if ((Subtarget->hasNEON())) {
4379
0
    return fastEmitInst_rr(ARM::VANDq, &ARM::QPRRegClass, Op0, Op1);
4380
0
  }
4381
0
  return 0;
4382
0
}
4383
4384
0
unsigned fastEmit_ISD_AND_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4385
0
  switch (VT.SimpleTy) {
4386
0
  case MVT::i32: return fastEmit_ISD_AND_MVT_i32_rr(RetVT, Op0, Op1);
4387
0
  case MVT::v8i8: return fastEmit_ISD_AND_MVT_v8i8_rr(RetVT, Op0, Op1);
4388
0
  case MVT::v16i8: return fastEmit_ISD_AND_MVT_v16i8_rr(RetVT, Op0, Op1);
4389
0
  case MVT::v4i16: return fastEmit_ISD_AND_MVT_v4i16_rr(RetVT, Op0, Op1);
4390
0
  case MVT::v8i16: return fastEmit_ISD_AND_MVT_v8i16_rr(RetVT, Op0, Op1);
4391
0
  case MVT::v2i32: return fastEmit_ISD_AND_MVT_v2i32_rr(RetVT, Op0, Op1);
4392
0
  case MVT::v4i32: return fastEmit_ISD_AND_MVT_v4i32_rr(RetVT, Op0, Op1);
4393
0
  case MVT::v1i64: return fastEmit_ISD_AND_MVT_v1i64_rr(RetVT, Op0, Op1);
4394
0
  case MVT::v2i64: return fastEmit_ISD_AND_MVT_v2i64_rr(RetVT, Op0, Op1);
4395
0
  default: return 0;
4396
0
  }
4397
0
}
4398
4399
// FastEmit functions for ISD::AVGCEILS.
4400
4401
0
unsigned fastEmit_ISD_AVGCEILS_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4402
0
  if (RetVT.SimpleTy != MVT::v16i8)
4403
0
    return 0;
4404
0
  return fastEmitInst_rr(ARM::MVE_VRHADDs8, &ARM::MQPRRegClass, Op0, Op1);
4405
0
}
4406
4407
0
unsigned fastEmit_ISD_AVGCEILS_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4408
0
  if (RetVT.SimpleTy != MVT::v8i16)
4409
0
    return 0;
4410
0
  return fastEmitInst_rr(ARM::MVE_VRHADDs16, &ARM::MQPRRegClass, Op0, Op1);
4411
0
}
4412
4413
0
unsigned fastEmit_ISD_AVGCEILS_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4414
0
  if (RetVT.SimpleTy != MVT::v4i32)
4415
0
    return 0;
4416
0
  return fastEmitInst_rr(ARM::MVE_VRHADDs32, &ARM::MQPRRegClass, Op0, Op1);
4417
0
}
4418
4419
0
unsigned fastEmit_ISD_AVGCEILS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4420
0
  switch (VT.SimpleTy) {
4421
0
  case MVT::v16i8: return fastEmit_ISD_AVGCEILS_MVT_v16i8_rr(RetVT, Op0, Op1);
4422
0
  case MVT::v8i16: return fastEmit_ISD_AVGCEILS_MVT_v8i16_rr(RetVT, Op0, Op1);
4423
0
  case MVT::v4i32: return fastEmit_ISD_AVGCEILS_MVT_v4i32_rr(RetVT, Op0, Op1);
4424
0
  default: return 0;
4425
0
  }
4426
0
}
4427
4428
// FastEmit functions for ISD::AVGCEILU.
4429
4430
0
unsigned fastEmit_ISD_AVGCEILU_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4431
0
  if (RetVT.SimpleTy != MVT::v16i8)
4432
0
    return 0;
4433
0
  return fastEmitInst_rr(ARM::MVE_VRHADDu8, &ARM::MQPRRegClass, Op0, Op1);
4434
0
}
4435
4436
0
unsigned fastEmit_ISD_AVGCEILU_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4437
0
  if (RetVT.SimpleTy != MVT::v8i16)
4438
0
    return 0;
4439
0
  return fastEmitInst_rr(ARM::MVE_VRHADDu16, &ARM::MQPRRegClass, Op0, Op1);
4440
0
}
4441
4442
0
unsigned fastEmit_ISD_AVGCEILU_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4443
0
  if (RetVT.SimpleTy != MVT::v4i32)
4444
0
    return 0;
4445
0
  return fastEmitInst_rr(ARM::MVE_VRHADDu32, &ARM::MQPRRegClass, Op0, Op1);
4446
0
}
4447
4448
0
unsigned fastEmit_ISD_AVGCEILU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4449
0
  switch (VT.SimpleTy) {
4450
0
  case MVT::v16i8: return fastEmit_ISD_AVGCEILU_MVT_v16i8_rr(RetVT, Op0, Op1);
4451
0
  case MVT::v8i16: return fastEmit_ISD_AVGCEILU_MVT_v8i16_rr(RetVT, Op0, Op1);
4452
0
  case MVT::v4i32: return fastEmit_ISD_AVGCEILU_MVT_v4i32_rr(RetVT, Op0, Op1);
4453
0
  default: return 0;
4454
0
  }
4455
0
}
4456
4457
// FastEmit functions for ISD::AVGFLOORS.
4458
4459
0
unsigned fastEmit_ISD_AVGFLOORS_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4460
0
  if (RetVT.SimpleTy != MVT::v16i8)
4461
0
    return 0;
4462
0
  return fastEmitInst_rr(ARM::MVE_VHADDs8, &ARM::MQPRRegClass, Op0, Op1);
4463
0
}
4464
4465
0
unsigned fastEmit_ISD_AVGFLOORS_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4466
0
  if (RetVT.SimpleTy != MVT::v8i16)
4467
0
    return 0;
4468
0
  return fastEmitInst_rr(ARM::MVE_VHADDs16, &ARM::MQPRRegClass, Op0, Op1);
4469
0
}
4470
4471
0
unsigned fastEmit_ISD_AVGFLOORS_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4472
0
  if (RetVT.SimpleTy != MVT::v4i32)
4473
0
    return 0;
4474
0
  return fastEmitInst_rr(ARM::MVE_VHADDs32, &ARM::MQPRRegClass, Op0, Op1);
4475
0
}
4476
4477
0
unsigned fastEmit_ISD_AVGFLOORS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4478
0
  switch (VT.SimpleTy) {
4479
0
  case MVT::v16i8: return fastEmit_ISD_AVGFLOORS_MVT_v16i8_rr(RetVT, Op0, Op1);
4480
0
  case MVT::v8i16: return fastEmit_ISD_AVGFLOORS_MVT_v8i16_rr(RetVT, Op0, Op1);
4481
0
  case MVT::v4i32: return fastEmit_ISD_AVGFLOORS_MVT_v4i32_rr(RetVT, Op0, Op1);
4482
0
  default: return 0;
4483
0
  }
4484
0
}
4485
4486
// FastEmit functions for ISD::AVGFLOORU.
4487
4488
0
unsigned fastEmit_ISD_AVGFLOORU_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4489
0
  if (RetVT.SimpleTy != MVT::v16i8)
4490
0
    return 0;
4491
0
  return fastEmitInst_rr(ARM::MVE_VHADDu8, &ARM::MQPRRegClass, Op0, Op1);
4492
0
}
4493
4494
0
unsigned fastEmit_ISD_AVGFLOORU_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4495
0
  if (RetVT.SimpleTy != MVT::v8i16)
4496
0
    return 0;
4497
0
  return fastEmitInst_rr(ARM::MVE_VHADDu16, &ARM::MQPRRegClass, Op0, Op1);
4498
0
}
4499
4500
0
unsigned fastEmit_ISD_AVGFLOORU_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4501
0
  if (RetVT.SimpleTy != MVT::v4i32)
4502
0
    return 0;
4503
0
  return fastEmitInst_rr(ARM::MVE_VHADDu32, &ARM::MQPRRegClass, Op0, Op1);
4504
0
}
4505
4506
0
unsigned fastEmit_ISD_AVGFLOORU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4507
0
  switch (VT.SimpleTy) {
4508
0
  case MVT::v16i8: return fastEmit_ISD_AVGFLOORU_MVT_v16i8_rr(RetVT, Op0, Op1);
4509
0
  case MVT::v8i16: return fastEmit_ISD_AVGFLOORU_MVT_v8i16_rr(RetVT, Op0, Op1);
4510
0
  case MVT::v4i32: return fastEmit_ISD_AVGFLOORU_MVT_v4i32_rr(RetVT, Op0, Op1);
4511
0
  default: return 0;
4512
0
  }
4513
0
}
4514
4515
// FastEmit functions for ISD::FADD.
4516
4517
0
unsigned fastEmit_ISD_FADD_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4518
0
  if (RetVT.SimpleTy != MVT::f16)
4519
0
    return 0;
4520
0
  if ((Subtarget->hasFullFP16())) {
4521
0
    return fastEmitInst_rr(ARM::VADDH, &ARM::HPRRegClass, Op0, Op1);
4522
0
  }
4523
0
  return 0;
4524
0
}
4525
4526
0
unsigned fastEmit_ISD_FADD_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4527
0
  if (RetVT.SimpleTy != MVT::f32)
4528
0
    return 0;
4529
0
  if ((!Subtarget->useNEONForSinglePrecisionFP()) && (Subtarget->hasVFP2Base())) {
4530
0
    return fastEmitInst_rr(ARM::VADDS, &ARM::SPRRegClass, Op0, Op1);
4531
0
  }
4532
0
  return 0;
4533
0
}
4534
4535
0
unsigned fastEmit_ISD_FADD_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4536
0
  if (RetVT.SimpleTy != MVT::f64)
4537
0
    return 0;
4538
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
4539
0
    return fastEmitInst_rr(ARM::VADDD, &ARM::DPRRegClass, Op0, Op1);
4540
0
  }
4541
0
  return 0;
4542
0
}
4543
4544
0
unsigned fastEmit_ISD_FADD_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4545
0
  if (RetVT.SimpleTy != MVT::v4f16)
4546
0
    return 0;
4547
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4548
0
    return fastEmitInst_rr(ARM::VADDhd, &ARM::DPRRegClass, Op0, Op1);
4549
0
  }
4550
0
  return 0;
4551
0
}
4552
4553
0
unsigned fastEmit_ISD_FADD_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4554
0
  if (RetVT.SimpleTy != MVT::v8f16)
4555
0
    return 0;
4556
0
  if ((Subtarget->hasMVEFloatOps())) {
4557
0
    return fastEmitInst_rr(ARM::MVE_VADDf16, &ARM::MQPRRegClass, Op0, Op1);
4558
0
  }
4559
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4560
0
    return fastEmitInst_rr(ARM::VADDhq, &ARM::QPRRegClass, Op0, Op1);
4561
0
  }
4562
0
  return 0;
4563
0
}
4564
4565
0
unsigned fastEmit_ISD_FADD_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4566
0
  if (RetVT.SimpleTy != MVT::v2f32)
4567
0
    return 0;
4568
0
  if ((Subtarget->hasNEON())) {
4569
0
    return fastEmitInst_rr(ARM::VADDfd, &ARM::DPRRegClass, Op0, Op1);
4570
0
  }
4571
0
  return 0;
4572
0
}
4573
4574
0
unsigned fastEmit_ISD_FADD_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4575
0
  if (RetVT.SimpleTy != MVT::v4f32)
4576
0
    return 0;
4577
0
  if ((Subtarget->hasMVEFloatOps())) {
4578
0
    return fastEmitInst_rr(ARM::MVE_VADDf32, &ARM::MQPRRegClass, Op0, Op1);
4579
0
  }
4580
0
  if ((Subtarget->hasNEON())) {
4581
0
    return fastEmitInst_rr(ARM::VADDfq, &ARM::QPRRegClass, Op0, Op1);
4582
0
  }
4583
0
  return 0;
4584
0
}
4585
4586
0
unsigned fastEmit_ISD_FADD_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4587
0
  switch (VT.SimpleTy) {
4588
0
  case MVT::f16: return fastEmit_ISD_FADD_MVT_f16_rr(RetVT, Op0, Op1);
4589
0
  case MVT::f32: return fastEmit_ISD_FADD_MVT_f32_rr(RetVT, Op0, Op1);
4590
0
  case MVT::f64: return fastEmit_ISD_FADD_MVT_f64_rr(RetVT, Op0, Op1);
4591
0
  case MVT::v4f16: return fastEmit_ISD_FADD_MVT_v4f16_rr(RetVT, Op0, Op1);
4592
0
  case MVT::v8f16: return fastEmit_ISD_FADD_MVT_v8f16_rr(RetVT, Op0, Op1);
4593
0
  case MVT::v2f32: return fastEmit_ISD_FADD_MVT_v2f32_rr(RetVT, Op0, Op1);
4594
0
  case MVT::v4f32: return fastEmit_ISD_FADD_MVT_v4f32_rr(RetVT, Op0, Op1);
4595
0
  default: return 0;
4596
0
  }
4597
0
}
4598
4599
// FastEmit functions for ISD::FDIV.
4600
4601
0
unsigned fastEmit_ISD_FDIV_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4602
0
  if (RetVT.SimpleTy != MVT::f16)
4603
0
    return 0;
4604
0
  if ((Subtarget->hasFullFP16())) {
4605
0
    return fastEmitInst_rr(ARM::VDIVH, &ARM::HPRRegClass, Op0, Op1);
4606
0
  }
4607
0
  return 0;
4608
0
}
4609
4610
0
unsigned fastEmit_ISD_FDIV_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4611
0
  if (RetVT.SimpleTy != MVT::f32)
4612
0
    return 0;
4613
0
  if ((Subtarget->hasVFP2Base())) {
4614
0
    return fastEmitInst_rr(ARM::VDIVS, &ARM::SPRRegClass, Op0, Op1);
4615
0
  }
4616
0
  return 0;
4617
0
}
4618
4619
0
unsigned fastEmit_ISD_FDIV_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4620
0
  if (RetVT.SimpleTy != MVT::f64)
4621
0
    return 0;
4622
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
4623
0
    return fastEmitInst_rr(ARM::VDIVD, &ARM::DPRRegClass, Op0, Op1);
4624
0
  }
4625
0
  return 0;
4626
0
}
4627
4628
0
unsigned fastEmit_ISD_FDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4629
0
  switch (VT.SimpleTy) {
4630
0
  case MVT::f16: return fastEmit_ISD_FDIV_MVT_f16_rr(RetVT, Op0, Op1);
4631
0
  case MVT::f32: return fastEmit_ISD_FDIV_MVT_f32_rr(RetVT, Op0, Op1);
4632
0
  case MVT::f64: return fastEmit_ISD_FDIV_MVT_f64_rr(RetVT, Op0, Op1);
4633
0
  default: return 0;
4634
0
  }
4635
0
}
4636
4637
// FastEmit functions for ISD::FMAXIMUM.
4638
4639
0
unsigned fastEmit_ISD_FMAXIMUM_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4640
0
  if (RetVT.SimpleTy != MVT::v4f16)
4641
0
    return 0;
4642
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4643
0
    return fastEmitInst_rr(ARM::VMAXhd, &ARM::DPRRegClass, Op0, Op1);
4644
0
  }
4645
0
  return 0;
4646
0
}
4647
4648
0
unsigned fastEmit_ISD_FMAXIMUM_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4649
0
  if (RetVT.SimpleTy != MVT::v8f16)
4650
0
    return 0;
4651
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4652
0
    return fastEmitInst_rr(ARM::VMAXhq, &ARM::QPRRegClass, Op0, Op1);
4653
0
  }
4654
0
  return 0;
4655
0
}
4656
4657
0
unsigned fastEmit_ISD_FMAXIMUM_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4658
0
  if (RetVT.SimpleTy != MVT::v2f32)
4659
0
    return 0;
4660
0
  if ((Subtarget->hasNEON())) {
4661
0
    return fastEmitInst_rr(ARM::VMAXfd, &ARM::DPRRegClass, Op0, Op1);
4662
0
  }
4663
0
  return 0;
4664
0
}
4665
4666
0
unsigned fastEmit_ISD_FMAXIMUM_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4667
0
  if (RetVT.SimpleTy != MVT::v4f32)
4668
0
    return 0;
4669
0
  if ((Subtarget->hasNEON())) {
4670
0
    return fastEmitInst_rr(ARM::VMAXfq, &ARM::QPRRegClass, Op0, Op1);
4671
0
  }
4672
0
  return 0;
4673
0
}
4674
4675
0
unsigned fastEmit_ISD_FMAXIMUM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4676
0
  switch (VT.SimpleTy) {
4677
0
  case MVT::v4f16: return fastEmit_ISD_FMAXIMUM_MVT_v4f16_rr(RetVT, Op0, Op1);
4678
0
  case MVT::v8f16: return fastEmit_ISD_FMAXIMUM_MVT_v8f16_rr(RetVT, Op0, Op1);
4679
0
  case MVT::v2f32: return fastEmit_ISD_FMAXIMUM_MVT_v2f32_rr(RetVT, Op0, Op1);
4680
0
  case MVT::v4f32: return fastEmit_ISD_FMAXIMUM_MVT_v4f32_rr(RetVT, Op0, Op1);
4681
0
  default: return 0;
4682
0
  }
4683
0
}
4684
4685
// FastEmit functions for ISD::FMAXNUM.
4686
4687
0
unsigned fastEmit_ISD_FMAXNUM_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4688
0
  if (RetVT.SimpleTy != MVT::f16)
4689
0
    return 0;
4690
0
  if ((Subtarget->hasFullFP16())) {
4691
0
    return fastEmitInst_rr(ARM::VFP_VMAXNMH, &ARM::HPRRegClass, Op0, Op1);
4692
0
  }
4693
0
  return 0;
4694
0
}
4695
4696
0
unsigned fastEmit_ISD_FMAXNUM_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4697
0
  if (RetVT.SimpleTy != MVT::f32)
4698
0
    return 0;
4699
0
  if ((Subtarget->hasFPARMv8Base())) {
4700
0
    return fastEmitInst_rr(ARM::VFP_VMAXNMS, &ARM::SPRRegClass, Op0, Op1);
4701
0
  }
4702
0
  return 0;
4703
0
}
4704
4705
0
unsigned fastEmit_ISD_FMAXNUM_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4706
0
  if (RetVT.SimpleTy != MVT::f64)
4707
0
    return 0;
4708
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
4709
0
    return fastEmitInst_rr(ARM::VFP_VMAXNMD, &ARM::DPRRegClass, Op0, Op1);
4710
0
  }
4711
0
  return 0;
4712
0
}
4713
4714
0
unsigned fastEmit_ISD_FMAXNUM_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4715
0
  if (RetVT.SimpleTy != MVT::v4f16)
4716
0
    return 0;
4717
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4718
0
    return fastEmitInst_rr(ARM::NEON_VMAXNMNDh, &ARM::DPRRegClass, Op0, Op1);
4719
0
  }
4720
0
  return 0;
4721
0
}
4722
4723
0
unsigned fastEmit_ISD_FMAXNUM_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4724
0
  if (RetVT.SimpleTy != MVT::v8f16)
4725
0
    return 0;
4726
0
  if ((Subtarget->hasMVEFloatOps())) {
4727
0
    return fastEmitInst_rr(ARM::MVE_VMAXNMf16, &ARM::MQPRRegClass, Op0, Op1);
4728
0
  }
4729
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4730
0
    return fastEmitInst_rr(ARM::NEON_VMAXNMNQh, &ARM::QPRRegClass, Op0, Op1);
4731
0
  }
4732
0
  return 0;
4733
0
}
4734
4735
0
unsigned fastEmit_ISD_FMAXNUM_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4736
0
  if (RetVT.SimpleTy != MVT::v2f32)
4737
0
    return 0;
4738
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasNEON())) {
4739
0
    return fastEmitInst_rr(ARM::NEON_VMAXNMNDf, &ARM::DPRRegClass, Op0, Op1);
4740
0
  }
4741
0
  return 0;
4742
0
}
4743
4744
0
unsigned fastEmit_ISD_FMAXNUM_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4745
0
  if (RetVT.SimpleTy != MVT::v4f32)
4746
0
    return 0;
4747
0
  if ((Subtarget->hasMVEFloatOps())) {
4748
0
    return fastEmitInst_rr(ARM::MVE_VMAXNMf32, &ARM::MQPRRegClass, Op0, Op1);
4749
0
  }
4750
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasNEON())) {
4751
0
    return fastEmitInst_rr(ARM::NEON_VMAXNMNQf, &ARM::QPRRegClass, Op0, Op1);
4752
0
  }
4753
0
  return 0;
4754
0
}
4755
4756
0
unsigned fastEmit_ISD_FMAXNUM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4757
0
  switch (VT.SimpleTy) {
4758
0
  case MVT::f16: return fastEmit_ISD_FMAXNUM_MVT_f16_rr(RetVT, Op0, Op1);
4759
0
  case MVT::f32: return fastEmit_ISD_FMAXNUM_MVT_f32_rr(RetVT, Op0, Op1);
4760
0
  case MVT::f64: return fastEmit_ISD_FMAXNUM_MVT_f64_rr(RetVT, Op0, Op1);
4761
0
  case MVT::v4f16: return fastEmit_ISD_FMAXNUM_MVT_v4f16_rr(RetVT, Op0, Op1);
4762
0
  case MVT::v8f16: return fastEmit_ISD_FMAXNUM_MVT_v8f16_rr(RetVT, Op0, Op1);
4763
0
  case MVT::v2f32: return fastEmit_ISD_FMAXNUM_MVT_v2f32_rr(RetVT, Op0, Op1);
4764
0
  case MVT::v4f32: return fastEmit_ISD_FMAXNUM_MVT_v4f32_rr(RetVT, Op0, Op1);
4765
0
  default: return 0;
4766
0
  }
4767
0
}
4768
4769
// FastEmit functions for ISD::FMINIMUM.
4770
4771
0
unsigned fastEmit_ISD_FMINIMUM_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4772
0
  if (RetVT.SimpleTy != MVT::v4f16)
4773
0
    return 0;
4774
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4775
0
    return fastEmitInst_rr(ARM::VMINhd, &ARM::DPRRegClass, Op0, Op1);
4776
0
  }
4777
0
  return 0;
4778
0
}
4779
4780
0
unsigned fastEmit_ISD_FMINIMUM_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4781
0
  if (RetVT.SimpleTy != MVT::v8f16)
4782
0
    return 0;
4783
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4784
0
    return fastEmitInst_rr(ARM::VMINhq, &ARM::QPRRegClass, Op0, Op1);
4785
0
  }
4786
0
  return 0;
4787
0
}
4788
4789
0
unsigned fastEmit_ISD_FMINIMUM_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4790
0
  if (RetVT.SimpleTy != MVT::v2f32)
4791
0
    return 0;
4792
0
  if ((Subtarget->hasNEON())) {
4793
0
    return fastEmitInst_rr(ARM::VMINfd, &ARM::DPRRegClass, Op0, Op1);
4794
0
  }
4795
0
  return 0;
4796
0
}
4797
4798
0
unsigned fastEmit_ISD_FMINIMUM_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4799
0
  if (RetVT.SimpleTy != MVT::v4f32)
4800
0
    return 0;
4801
0
  if ((Subtarget->hasNEON())) {
4802
0
    return fastEmitInst_rr(ARM::VMINfq, &ARM::QPRRegClass, Op0, Op1);
4803
0
  }
4804
0
  return 0;
4805
0
}
4806
4807
0
unsigned fastEmit_ISD_FMINIMUM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4808
0
  switch (VT.SimpleTy) {
4809
0
  case MVT::v4f16: return fastEmit_ISD_FMINIMUM_MVT_v4f16_rr(RetVT, Op0, Op1);
4810
0
  case MVT::v8f16: return fastEmit_ISD_FMINIMUM_MVT_v8f16_rr(RetVT, Op0, Op1);
4811
0
  case MVT::v2f32: return fastEmit_ISD_FMINIMUM_MVT_v2f32_rr(RetVT, Op0, Op1);
4812
0
  case MVT::v4f32: return fastEmit_ISD_FMINIMUM_MVT_v4f32_rr(RetVT, Op0, Op1);
4813
0
  default: return 0;
4814
0
  }
4815
0
}
4816
4817
// FastEmit functions for ISD::FMINNUM.
4818
4819
0
unsigned fastEmit_ISD_FMINNUM_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4820
0
  if (RetVT.SimpleTy != MVT::f16)
4821
0
    return 0;
4822
0
  if ((Subtarget->hasFullFP16())) {
4823
0
    return fastEmitInst_rr(ARM::VFP_VMINNMH, &ARM::HPRRegClass, Op0, Op1);
4824
0
  }
4825
0
  return 0;
4826
0
}
4827
4828
0
unsigned fastEmit_ISD_FMINNUM_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4829
0
  if (RetVT.SimpleTy != MVT::f32)
4830
0
    return 0;
4831
0
  if ((Subtarget->hasFPARMv8Base())) {
4832
0
    return fastEmitInst_rr(ARM::VFP_VMINNMS, &ARM::SPRRegClass, Op0, Op1);
4833
0
  }
4834
0
  return 0;
4835
0
}
4836
4837
0
unsigned fastEmit_ISD_FMINNUM_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4838
0
  if (RetVT.SimpleTy != MVT::f64)
4839
0
    return 0;
4840
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasFPARMv8Base())) {
4841
0
    return fastEmitInst_rr(ARM::VFP_VMINNMD, &ARM::DPRRegClass, Op0, Op1);
4842
0
  }
4843
0
  return 0;
4844
0
}
4845
4846
0
unsigned fastEmit_ISD_FMINNUM_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4847
0
  if (RetVT.SimpleTy != MVT::v4f16)
4848
0
    return 0;
4849
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4850
0
    return fastEmitInst_rr(ARM::NEON_VMINNMNDh, &ARM::DPRRegClass, Op0, Op1);
4851
0
  }
4852
0
  return 0;
4853
0
}
4854
4855
0
unsigned fastEmit_ISD_FMINNUM_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4856
0
  if (RetVT.SimpleTy != MVT::v8f16)
4857
0
    return 0;
4858
0
  if ((Subtarget->hasMVEFloatOps())) {
4859
0
    return fastEmitInst_rr(ARM::MVE_VMINNMf16, &ARM::MQPRRegClass, Op0, Op1);
4860
0
  }
4861
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4862
0
    return fastEmitInst_rr(ARM::NEON_VMINNMNQh, &ARM::QPRRegClass, Op0, Op1);
4863
0
  }
4864
0
  return 0;
4865
0
}
4866
4867
0
unsigned fastEmit_ISD_FMINNUM_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4868
0
  if (RetVT.SimpleTy != MVT::v2f32)
4869
0
    return 0;
4870
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasNEON())) {
4871
0
    return fastEmitInst_rr(ARM::NEON_VMINNMNDf, &ARM::DPRRegClass, Op0, Op1);
4872
0
  }
4873
0
  return 0;
4874
0
}
4875
4876
0
unsigned fastEmit_ISD_FMINNUM_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4877
0
  if (RetVT.SimpleTy != MVT::v4f32)
4878
0
    return 0;
4879
0
  if ((Subtarget->hasMVEFloatOps())) {
4880
0
    return fastEmitInst_rr(ARM::MVE_VMINNMf32, &ARM::MQPRRegClass, Op0, Op1);
4881
0
  }
4882
0
  if ((Subtarget->hasFPARMv8Base()) && (Subtarget->hasNEON())) {
4883
0
    return fastEmitInst_rr(ARM::NEON_VMINNMNQf, &ARM::QPRRegClass, Op0, Op1);
4884
0
  }
4885
0
  return 0;
4886
0
}
4887
4888
0
unsigned fastEmit_ISD_FMINNUM_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4889
0
  switch (VT.SimpleTy) {
4890
0
  case MVT::f16: return fastEmit_ISD_FMINNUM_MVT_f16_rr(RetVT, Op0, Op1);
4891
0
  case MVT::f32: return fastEmit_ISD_FMINNUM_MVT_f32_rr(RetVT, Op0, Op1);
4892
0
  case MVT::f64: return fastEmit_ISD_FMINNUM_MVT_f64_rr(RetVT, Op0, Op1);
4893
0
  case MVT::v4f16: return fastEmit_ISD_FMINNUM_MVT_v4f16_rr(RetVT, Op0, Op1);
4894
0
  case MVT::v8f16: return fastEmit_ISD_FMINNUM_MVT_v8f16_rr(RetVT, Op0, Op1);
4895
0
  case MVT::v2f32: return fastEmit_ISD_FMINNUM_MVT_v2f32_rr(RetVT, Op0, Op1);
4896
0
  case MVT::v4f32: return fastEmit_ISD_FMINNUM_MVT_v4f32_rr(RetVT, Op0, Op1);
4897
0
  default: return 0;
4898
0
  }
4899
0
}
4900
4901
// FastEmit functions for ISD::FMUL.
4902
4903
0
unsigned fastEmit_ISD_FMUL_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4904
0
  if (RetVT.SimpleTy != MVT::f16)
4905
0
    return 0;
4906
0
  if ((Subtarget->hasFullFP16())) {
4907
0
    return fastEmitInst_rr(ARM::VMULH, &ARM::HPRRegClass, Op0, Op1);
4908
0
  }
4909
0
  return 0;
4910
0
}
4911
4912
0
unsigned fastEmit_ISD_FMUL_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4913
0
  if (RetVT.SimpleTy != MVT::f32)
4914
0
    return 0;
4915
0
  if ((!Subtarget->useNEONForSinglePrecisionFP()) && (Subtarget->hasVFP2Base())) {
4916
0
    return fastEmitInst_rr(ARM::VMULS, &ARM::SPRRegClass, Op0, Op1);
4917
0
  }
4918
0
  return 0;
4919
0
}
4920
4921
0
unsigned fastEmit_ISD_FMUL_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4922
0
  if (RetVT.SimpleTy != MVT::f64)
4923
0
    return 0;
4924
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
4925
0
    return fastEmitInst_rr(ARM::VMULD, &ARM::DPRRegClass, Op0, Op1);
4926
0
  }
4927
0
  return 0;
4928
0
}
4929
4930
0
unsigned fastEmit_ISD_FMUL_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4931
0
  if (RetVT.SimpleTy != MVT::v4f16)
4932
0
    return 0;
4933
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4934
0
    return fastEmitInst_rr(ARM::VMULhd, &ARM::DPRRegClass, Op0, Op1);
4935
0
  }
4936
0
  return 0;
4937
0
}
4938
4939
0
unsigned fastEmit_ISD_FMUL_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4940
0
  if (RetVT.SimpleTy != MVT::v8f16)
4941
0
    return 0;
4942
0
  if ((Subtarget->hasMVEFloatOps())) {
4943
0
    return fastEmitInst_rr(ARM::MVE_VMULf16, &ARM::MQPRRegClass, Op0, Op1);
4944
0
  }
4945
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
4946
0
    return fastEmitInst_rr(ARM::VMULhq, &ARM::QPRRegClass, Op0, Op1);
4947
0
  }
4948
0
  return 0;
4949
0
}
4950
4951
0
unsigned fastEmit_ISD_FMUL_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4952
0
  if (RetVT.SimpleTy != MVT::v2f32)
4953
0
    return 0;
4954
0
  if ((Subtarget->hasNEON())) {
4955
0
    return fastEmitInst_rr(ARM::VMULfd, &ARM::DPRRegClass, Op0, Op1);
4956
0
  }
4957
0
  return 0;
4958
0
}
4959
4960
0
unsigned fastEmit_ISD_FMUL_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4961
0
  if (RetVT.SimpleTy != MVT::v4f32)
4962
0
    return 0;
4963
0
  if ((Subtarget->hasMVEFloatOps())) {
4964
0
    return fastEmitInst_rr(ARM::MVE_VMULf32, &ARM::MQPRRegClass, Op0, Op1);
4965
0
  }
4966
0
  if ((Subtarget->hasNEON())) {
4967
0
    return fastEmitInst_rr(ARM::VMULfq, &ARM::QPRRegClass, Op0, Op1);
4968
0
  }
4969
0
  return 0;
4970
0
}
4971
4972
0
unsigned fastEmit_ISD_FMUL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
4973
0
  switch (VT.SimpleTy) {
4974
0
  case MVT::f16: return fastEmit_ISD_FMUL_MVT_f16_rr(RetVT, Op0, Op1);
4975
0
  case MVT::f32: return fastEmit_ISD_FMUL_MVT_f32_rr(RetVT, Op0, Op1);
4976
0
  case MVT::f64: return fastEmit_ISD_FMUL_MVT_f64_rr(RetVT, Op0, Op1);
4977
0
  case MVT::v4f16: return fastEmit_ISD_FMUL_MVT_v4f16_rr(RetVT, Op0, Op1);
4978
0
  case MVT::v8f16: return fastEmit_ISD_FMUL_MVT_v8f16_rr(RetVT, Op0, Op1);
4979
0
  case MVT::v2f32: return fastEmit_ISD_FMUL_MVT_v2f32_rr(RetVT, Op0, Op1);
4980
0
  case MVT::v4f32: return fastEmit_ISD_FMUL_MVT_v4f32_rr(RetVT, Op0, Op1);
4981
0
  default: return 0;
4982
0
  }
4983
0
}
4984
4985
// FastEmit functions for ISD::FSUB.
4986
4987
0
unsigned fastEmit_ISD_FSUB_MVT_f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4988
0
  if (RetVT.SimpleTy != MVT::f16)
4989
0
    return 0;
4990
0
  if ((Subtarget->hasFullFP16())) {
4991
0
    return fastEmitInst_rr(ARM::VSUBH, &ARM::HPRRegClass, Op0, Op1);
4992
0
  }
4993
0
  return 0;
4994
0
}
4995
4996
0
unsigned fastEmit_ISD_FSUB_MVT_f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
4997
0
  if (RetVT.SimpleTy != MVT::f32)
4998
0
    return 0;
4999
0
  if ((!Subtarget->useNEONForSinglePrecisionFP()) && (Subtarget->hasVFP2Base())) {
5000
0
    return fastEmitInst_rr(ARM::VSUBS, &ARM::SPRRegClass, Op0, Op1);
5001
0
  }
5002
0
  return 0;
5003
0
}
5004
5005
0
unsigned fastEmit_ISD_FSUB_MVT_f64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5006
0
  if (RetVT.SimpleTy != MVT::f64)
5007
0
    return 0;
5008
0
  if ((Subtarget->hasFP64()) && (Subtarget->hasVFP2Base())) {
5009
0
    return fastEmitInst_rr(ARM::VSUBD, &ARM::DPRRegClass, Op0, Op1);
5010
0
  }
5011
0
  return 0;
5012
0
}
5013
5014
0
unsigned fastEmit_ISD_FSUB_MVT_v4f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5015
0
  if (RetVT.SimpleTy != MVT::v4f16)
5016
0
    return 0;
5017
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
5018
0
    return fastEmitInst_rr(ARM::VSUBhd, &ARM::DPRRegClass, Op0, Op1);
5019
0
  }
5020
0
  return 0;
5021
0
}
5022
5023
0
unsigned fastEmit_ISD_FSUB_MVT_v8f16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5024
0
  if (RetVT.SimpleTy != MVT::v8f16)
5025
0
    return 0;
5026
0
  if ((Subtarget->hasMVEFloatOps())) {
5027
0
    return fastEmitInst_rr(ARM::MVE_VSUBf16, &ARM::MQPRRegClass, Op0, Op1);
5028
0
  }
5029
0
  if ((Subtarget->hasFullFP16()) && (Subtarget->hasNEON())) {
5030
0
    return fastEmitInst_rr(ARM::VSUBhq, &ARM::QPRRegClass, Op0, Op1);
5031
0
  }
5032
0
  return 0;
5033
0
}
5034
5035
0
unsigned fastEmit_ISD_FSUB_MVT_v2f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5036
0
  if (RetVT.SimpleTy != MVT::v2f32)
5037
0
    return 0;
5038
0
  if ((Subtarget->hasNEON())) {
5039
0
    return fastEmitInst_rr(ARM::VSUBfd, &ARM::DPRRegClass, Op0, Op1);
5040
0
  }
5041
0
  return 0;
5042
0
}
5043
5044
0
unsigned fastEmit_ISD_FSUB_MVT_v4f32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5045
0
  if (RetVT.SimpleTy != MVT::v4f32)
5046
0
    return 0;
5047
0
  if ((Subtarget->hasMVEFloatOps())) {
5048
0
    return fastEmitInst_rr(ARM::MVE_VSUBf32, &ARM::MQPRRegClass, Op0, Op1);
5049
0
  }
5050
0
  if ((Subtarget->hasNEON())) {
5051
0
    return fastEmitInst_rr(ARM::VSUBfq, &ARM::QPRRegClass, Op0, Op1);
5052
0
  }
5053
0
  return 0;
5054
0
}
5055
5056
0
unsigned fastEmit_ISD_FSUB_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5057
0
  switch (VT.SimpleTy) {
5058
0
  case MVT::f16: return fastEmit_ISD_FSUB_MVT_f16_rr(RetVT, Op0, Op1);
5059
0
  case MVT::f32: return fastEmit_ISD_FSUB_MVT_f32_rr(RetVT, Op0, Op1);
5060
0
  case MVT::f64: return fastEmit_ISD_FSUB_MVT_f64_rr(RetVT, Op0, Op1);
5061
0
  case MVT::v4f16: return fastEmit_ISD_FSUB_MVT_v4f16_rr(RetVT, Op0, Op1);
5062
0
  case MVT::v8f16: return fastEmit_ISD_FSUB_MVT_v8f16_rr(RetVT, Op0, Op1);
5063
0
  case MVT::v2f32: return fastEmit_ISD_FSUB_MVT_v2f32_rr(RetVT, Op0, Op1);
5064
0
  case MVT::v4f32: return fastEmit_ISD_FSUB_MVT_v4f32_rr(RetVT, Op0, Op1);
5065
0
  default: return 0;
5066
0
  }
5067
0
}
5068
5069
// FastEmit functions for ISD::MUL.
5070
5071
0
unsigned fastEmit_ISD_MUL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5072
0
  if (RetVT.SimpleTy != MVT::i32)
5073
0
    return 0;
5074
0
  if ((Subtarget->isThumb2())) {
5075
0
    return fastEmitInst_rr(ARM::t2MUL, &ARM::rGPRRegClass, Op0, Op1);
5076
0
  }
5077
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5078
0
    return fastEmitInst_rr(ARM::tMUL, &ARM::tGPRRegClass, Op0, Op1);
5079
0
  }
5080
0
  if ((!Subtarget->isThumb()) && (!Subtarget->hasV6Ops()) && (Subtarget->useMulOps())) {
5081
0
    return fastEmitInst_rr(ARM::MULv5, &ARM::GPRnopcRegClass, Op0, Op1);
5082
0
  }
5083
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
5084
0
    return fastEmitInst_rr(ARM::MUL, &ARM::GPRnopcRegClass, Op0, Op1);
5085
0
  }
5086
0
  return 0;
5087
0
}
5088
5089
0
unsigned fastEmit_ISD_MUL_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5090
0
  if (RetVT.SimpleTy != MVT::v8i8)
5091
0
    return 0;
5092
0
  if ((Subtarget->hasNEON())) {
5093
0
    return fastEmitInst_rr(ARM::VMULv8i8, &ARM::DPRRegClass, Op0, Op1);
5094
0
  }
5095
0
  return 0;
5096
0
}
5097
5098
0
unsigned fastEmit_ISD_MUL_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5099
0
  if (RetVT.SimpleTy != MVT::v16i8)
5100
0
    return 0;
5101
0
  if ((Subtarget->hasMVEIntegerOps())) {
5102
0
    return fastEmitInst_rr(ARM::MVE_VMULi8, &ARM::MQPRRegClass, Op0, Op1);
5103
0
  }
5104
0
  if ((Subtarget->hasNEON())) {
5105
0
    return fastEmitInst_rr(ARM::VMULv16i8, &ARM::QPRRegClass, Op0, Op1);
5106
0
  }
5107
0
  return 0;
5108
0
}
5109
5110
0
unsigned fastEmit_ISD_MUL_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5111
0
  if (RetVT.SimpleTy != MVT::v4i16)
5112
0
    return 0;
5113
0
  if ((Subtarget->hasNEON())) {
5114
0
    return fastEmitInst_rr(ARM::VMULv4i16, &ARM::DPRRegClass, Op0, Op1);
5115
0
  }
5116
0
  return 0;
5117
0
}
5118
5119
0
unsigned fastEmit_ISD_MUL_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5120
0
  if (RetVT.SimpleTy != MVT::v8i16)
5121
0
    return 0;
5122
0
  if ((Subtarget->hasMVEIntegerOps())) {
5123
0
    return fastEmitInst_rr(ARM::MVE_VMULi16, &ARM::MQPRRegClass, Op0, Op1);
5124
0
  }
5125
0
  if ((Subtarget->hasNEON())) {
5126
0
    return fastEmitInst_rr(ARM::VMULv8i16, &ARM::QPRRegClass, Op0, Op1);
5127
0
  }
5128
0
  return 0;
5129
0
}
5130
5131
0
unsigned fastEmit_ISD_MUL_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5132
0
  if (RetVT.SimpleTy != MVT::v2i32)
5133
0
    return 0;
5134
0
  if ((Subtarget->hasNEON())) {
5135
0
    return fastEmitInst_rr(ARM::VMULv2i32, &ARM::DPRRegClass, Op0, Op1);
5136
0
  }
5137
0
  return 0;
5138
0
}
5139
5140
0
unsigned fastEmit_ISD_MUL_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5141
0
  if (RetVT.SimpleTy != MVT::v4i32)
5142
0
    return 0;
5143
0
  if ((Subtarget->hasMVEIntegerOps())) {
5144
0
    return fastEmitInst_rr(ARM::MVE_VMULi32, &ARM::MQPRRegClass, Op0, Op1);
5145
0
  }
5146
0
  if ((Subtarget->hasNEON())) {
5147
0
    return fastEmitInst_rr(ARM::VMULv4i32, &ARM::QPRRegClass, Op0, Op1);
5148
0
  }
5149
0
  return 0;
5150
0
}
5151
5152
0
unsigned fastEmit_ISD_MUL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5153
0
  switch (VT.SimpleTy) {
5154
0
  case MVT::i32: return fastEmit_ISD_MUL_MVT_i32_rr(RetVT, Op0, Op1);
5155
0
  case MVT::v8i8: return fastEmit_ISD_MUL_MVT_v8i8_rr(RetVT, Op0, Op1);
5156
0
  case MVT::v16i8: return fastEmit_ISD_MUL_MVT_v16i8_rr(RetVT, Op0, Op1);
5157
0
  case MVT::v4i16: return fastEmit_ISD_MUL_MVT_v4i16_rr(RetVT, Op0, Op1);
5158
0
  case MVT::v8i16: return fastEmit_ISD_MUL_MVT_v8i16_rr(RetVT, Op0, Op1);
5159
0
  case MVT::v2i32: return fastEmit_ISD_MUL_MVT_v2i32_rr(RetVT, Op0, Op1);
5160
0
  case MVT::v4i32: return fastEmit_ISD_MUL_MVT_v4i32_rr(RetVT, Op0, Op1);
5161
0
  default: return 0;
5162
0
  }
5163
0
}
5164
5165
// FastEmit functions for ISD::MULHS.
5166
5167
0
unsigned fastEmit_ISD_MULHS_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5168
0
  if (RetVT.SimpleTy != MVT::i32)
5169
0
    return 0;
5170
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
5171
0
    return fastEmitInst_rr(ARM::t2SMMUL, &ARM::rGPRRegClass, Op0, Op1);
5172
0
  }
5173
0
  if ((Subtarget->hasV6Ops()) && (!Subtarget->isThumb())) {
5174
0
    return fastEmitInst_rr(ARM::SMMUL, &ARM::GPRRegClass, Op0, Op1);
5175
0
  }
5176
0
  return 0;
5177
0
}
5178
5179
0
unsigned fastEmit_ISD_MULHS_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5180
0
  if (RetVT.SimpleTy != MVT::v16i8)
5181
0
    return 0;
5182
0
  if ((Subtarget->hasMVEIntegerOps())) {
5183
0
    return fastEmitInst_rr(ARM::MVE_VMULHs8, &ARM::MQPRRegClass, Op0, Op1);
5184
0
  }
5185
0
  return 0;
5186
0
}
5187
5188
0
unsigned fastEmit_ISD_MULHS_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5189
0
  if (RetVT.SimpleTy != MVT::v8i16)
5190
0
    return 0;
5191
0
  if ((Subtarget->hasMVEIntegerOps())) {
5192
0
    return fastEmitInst_rr(ARM::MVE_VMULHs16, &ARM::MQPRRegClass, Op0, Op1);
5193
0
  }
5194
0
  return 0;
5195
0
}
5196
5197
0
unsigned fastEmit_ISD_MULHS_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5198
0
  if (RetVT.SimpleTy != MVT::v4i32)
5199
0
    return 0;
5200
0
  if ((Subtarget->hasMVEIntegerOps())) {
5201
0
    return fastEmitInst_rr(ARM::MVE_VMULHs32, &ARM::MQPRRegClass, Op0, Op1);
5202
0
  }
5203
0
  return 0;
5204
0
}
5205
5206
0
unsigned fastEmit_ISD_MULHS_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5207
0
  switch (VT.SimpleTy) {
5208
0
  case MVT::i32: return fastEmit_ISD_MULHS_MVT_i32_rr(RetVT, Op0, Op1);
5209
0
  case MVT::v16i8: return fastEmit_ISD_MULHS_MVT_v16i8_rr(RetVT, Op0, Op1);
5210
0
  case MVT::v8i16: return fastEmit_ISD_MULHS_MVT_v8i16_rr(RetVT, Op0, Op1);
5211
0
  case MVT::v4i32: return fastEmit_ISD_MULHS_MVT_v4i32_rr(RetVT, Op0, Op1);
5212
0
  default: return 0;
5213
0
  }
5214
0
}
5215
5216
// FastEmit functions for ISD::MULHU.
5217
5218
0
unsigned fastEmit_ISD_MULHU_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5219
0
  if (RetVT.SimpleTy != MVT::v16i8)
5220
0
    return 0;
5221
0
  if ((Subtarget->hasMVEIntegerOps())) {
5222
0
    return fastEmitInst_rr(ARM::MVE_VMULHu8, &ARM::MQPRRegClass, Op0, Op1);
5223
0
  }
5224
0
  return 0;
5225
0
}
5226
5227
0
unsigned fastEmit_ISD_MULHU_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5228
0
  if (RetVT.SimpleTy != MVT::v8i16)
5229
0
    return 0;
5230
0
  if ((Subtarget->hasMVEIntegerOps())) {
5231
0
    return fastEmitInst_rr(ARM::MVE_VMULHu16, &ARM::MQPRRegClass, Op0, Op1);
5232
0
  }
5233
0
  return 0;
5234
0
}
5235
5236
0
unsigned fastEmit_ISD_MULHU_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5237
0
  if (RetVT.SimpleTy != MVT::v4i32)
5238
0
    return 0;
5239
0
  if ((Subtarget->hasMVEIntegerOps())) {
5240
0
    return fastEmitInst_rr(ARM::MVE_VMULHu32, &ARM::MQPRRegClass, Op0, Op1);
5241
0
  }
5242
0
  return 0;
5243
0
}
5244
5245
0
unsigned fastEmit_ISD_MULHU_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5246
0
  switch (VT.SimpleTy) {
5247
0
  case MVT::v16i8: return fastEmit_ISD_MULHU_MVT_v16i8_rr(RetVT, Op0, Op1);
5248
0
  case MVT::v8i16: return fastEmit_ISD_MULHU_MVT_v8i16_rr(RetVT, Op0, Op1);
5249
0
  case MVT::v4i32: return fastEmit_ISD_MULHU_MVT_v4i32_rr(RetVT, Op0, Op1);
5250
0
  default: return 0;
5251
0
  }
5252
0
}
5253
5254
// FastEmit functions for ISD::OR.
5255
5256
0
unsigned fastEmit_ISD_OR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5257
0
  if (RetVT.SimpleTy != MVT::i32)
5258
0
    return 0;
5259
0
  if ((Subtarget->isThumb2())) {
5260
0
    return fastEmitInst_rr(ARM::t2ORRrr, &ARM::rGPRRegClass, Op0, Op1);
5261
0
  }
5262
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5263
0
    return fastEmitInst_rr(ARM::tORR, &ARM::tGPRRegClass, Op0, Op1);
5264
0
  }
5265
0
  if ((!Subtarget->isThumb())) {
5266
0
    return fastEmitInst_rr(ARM::ORRrr, &ARM::GPRRegClass, Op0, Op1);
5267
0
  }
5268
0
  return 0;
5269
0
}
5270
5271
0
unsigned fastEmit_ISD_OR_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5272
0
  if (RetVT.SimpleTy != MVT::v8i8)
5273
0
    return 0;
5274
0
  if ((Subtarget->hasNEON())) {
5275
0
    return fastEmitInst_rr(ARM::VORRd, &ARM::DPRRegClass, Op0, Op1);
5276
0
  }
5277
0
  return 0;
5278
0
}
5279
5280
0
unsigned fastEmit_ISD_OR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5281
0
  if (RetVT.SimpleTy != MVT::v16i8)
5282
0
    return 0;
5283
0
  if ((Subtarget->hasMVEIntegerOps())) {
5284
0
    return fastEmitInst_rr(ARM::MVE_VORR, &ARM::MQPRRegClass, Op0, Op1);
5285
0
  }
5286
0
  if ((Subtarget->hasNEON())) {
5287
0
    return fastEmitInst_rr(ARM::VORRq, &ARM::QPRRegClass, Op0, Op1);
5288
0
  }
5289
0
  return 0;
5290
0
}
5291
5292
0
unsigned fastEmit_ISD_OR_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5293
0
  if (RetVT.SimpleTy != MVT::v4i16)
5294
0
    return 0;
5295
0
  if ((Subtarget->hasNEON())) {
5296
0
    return fastEmitInst_rr(ARM::VORRd, &ARM::DPRRegClass, Op0, Op1);
5297
0
  }
5298
0
  return 0;
5299
0
}
5300
5301
0
unsigned fastEmit_ISD_OR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5302
0
  if (RetVT.SimpleTy != MVT::v8i16)
5303
0
    return 0;
5304
0
  if ((Subtarget->hasMVEIntegerOps())) {
5305
0
    return fastEmitInst_rr(ARM::MVE_VORR, &ARM::MQPRRegClass, Op0, Op1);
5306
0
  }
5307
0
  if ((Subtarget->hasNEON())) {
5308
0
    return fastEmitInst_rr(ARM::VORRq, &ARM::QPRRegClass, Op0, Op1);
5309
0
  }
5310
0
  return 0;
5311
0
}
5312
5313
0
unsigned fastEmit_ISD_OR_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5314
0
  if (RetVT.SimpleTy != MVT::v2i32)
5315
0
    return 0;
5316
0
  if ((Subtarget->hasNEON())) {
5317
0
    return fastEmitInst_rr(ARM::VORRd, &ARM::DPRRegClass, Op0, Op1);
5318
0
  }
5319
0
  return 0;
5320
0
}
5321
5322
0
unsigned fastEmit_ISD_OR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5323
0
  if (RetVT.SimpleTy != MVT::v4i32)
5324
0
    return 0;
5325
0
  if ((Subtarget->hasMVEIntegerOps())) {
5326
0
    return fastEmitInst_rr(ARM::MVE_VORR, &ARM::MQPRRegClass, Op0, Op1);
5327
0
  }
5328
0
  if ((Subtarget->hasNEON())) {
5329
0
    return fastEmitInst_rr(ARM::VORRq, &ARM::QPRRegClass, Op0, Op1);
5330
0
  }
5331
0
  return 0;
5332
0
}
5333
5334
0
unsigned fastEmit_ISD_OR_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5335
0
  if (RetVT.SimpleTy != MVT::v1i64)
5336
0
    return 0;
5337
0
  if ((Subtarget->hasNEON())) {
5338
0
    return fastEmitInst_rr(ARM::VORRd, &ARM::DPRRegClass, Op0, Op1);
5339
0
  }
5340
0
  return 0;
5341
0
}
5342
5343
0
unsigned fastEmit_ISD_OR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5344
0
  if (RetVT.SimpleTy != MVT::v2i64)
5345
0
    return 0;
5346
0
  if ((Subtarget->hasMVEIntegerOps())) {
5347
0
    return fastEmitInst_rr(ARM::MVE_VORR, &ARM::MQPRRegClass, Op0, Op1);
5348
0
  }
5349
0
  if ((Subtarget->hasNEON())) {
5350
0
    return fastEmitInst_rr(ARM::VORRq, &ARM::QPRRegClass, Op0, Op1);
5351
0
  }
5352
0
  return 0;
5353
0
}
5354
5355
0
unsigned fastEmit_ISD_OR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5356
0
  switch (VT.SimpleTy) {
5357
0
  case MVT::i32: return fastEmit_ISD_OR_MVT_i32_rr(RetVT, Op0, Op1);
5358
0
  case MVT::v8i8: return fastEmit_ISD_OR_MVT_v8i8_rr(RetVT, Op0, Op1);
5359
0
  case MVT::v16i8: return fastEmit_ISD_OR_MVT_v16i8_rr(RetVT, Op0, Op1);
5360
0
  case MVT::v4i16: return fastEmit_ISD_OR_MVT_v4i16_rr(RetVT, Op0, Op1);
5361
0
  case MVT::v8i16: return fastEmit_ISD_OR_MVT_v8i16_rr(RetVT, Op0, Op1);
5362
0
  case MVT::v2i32: return fastEmit_ISD_OR_MVT_v2i32_rr(RetVT, Op0, Op1);
5363
0
  case MVT::v4i32: return fastEmit_ISD_OR_MVT_v4i32_rr(RetVT, Op0, Op1);
5364
0
  case MVT::v1i64: return fastEmit_ISD_OR_MVT_v1i64_rr(RetVT, Op0, Op1);
5365
0
  case MVT::v2i64: return fastEmit_ISD_OR_MVT_v2i64_rr(RetVT, Op0, Op1);
5366
0
  default: return 0;
5367
0
  }
5368
0
}
5369
5370
// FastEmit functions for ISD::ROTR.
5371
5372
0
unsigned fastEmit_ISD_ROTR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5373
0
  if (RetVT.SimpleTy != MVT::i32)
5374
0
    return 0;
5375
0
  if ((Subtarget->isThumb2())) {
5376
0
    return fastEmitInst_rr(ARM::t2RORrr, &ARM::rGPRRegClass, Op0, Op1);
5377
0
  }
5378
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5379
0
    return fastEmitInst_rr(ARM::tROR, &ARM::tGPRRegClass, Op0, Op1);
5380
0
  }
5381
0
  return 0;
5382
0
}
5383
5384
0
unsigned fastEmit_ISD_ROTR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5385
0
  switch (VT.SimpleTy) {
5386
0
  case MVT::i32: return fastEmit_ISD_ROTR_MVT_i32_rr(RetVT, Op0, Op1);
5387
0
  default: return 0;
5388
0
  }
5389
0
}
5390
5391
// FastEmit functions for ISD::SADDSAT.
5392
5393
0
unsigned fastEmit_ISD_SADDSAT_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5394
0
  if (RetVT.SimpleTy != MVT::i32)
5395
0
    return 0;
5396
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
5397
0
    return fastEmitInst_rr(ARM::t2QADD, &ARM::rGPRRegClass, Op0, Op1);
5398
0
  }
5399
0
  if ((Subtarget->hasV5TEOps()) && (!Subtarget->isThumb())) {
5400
0
    return fastEmitInst_rr(ARM::QADD, &ARM::GPRnopcRegClass, Op0, Op1);
5401
0
  }
5402
0
  return 0;
5403
0
}
5404
5405
0
unsigned fastEmit_ISD_SADDSAT_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5406
0
  if (RetVT.SimpleTy != MVT::v8i8)
5407
0
    return 0;
5408
0
  if ((Subtarget->hasNEON())) {
5409
0
    return fastEmitInst_rr(ARM::VQADDsv8i8, &ARM::DPRRegClass, Op0, Op1);
5410
0
  }
5411
0
  return 0;
5412
0
}
5413
5414
0
unsigned fastEmit_ISD_SADDSAT_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5415
0
  if (RetVT.SimpleTy != MVT::v16i8)
5416
0
    return 0;
5417
0
  if ((Subtarget->hasMVEIntegerOps())) {
5418
0
    return fastEmitInst_rr(ARM::MVE_VQADDs8, &ARM::MQPRRegClass, Op0, Op1);
5419
0
  }
5420
0
  if ((Subtarget->hasNEON())) {
5421
0
    return fastEmitInst_rr(ARM::VQADDsv16i8, &ARM::QPRRegClass, Op0, Op1);
5422
0
  }
5423
0
  return 0;
5424
0
}
5425
5426
0
unsigned fastEmit_ISD_SADDSAT_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5427
0
  if (RetVT.SimpleTy != MVT::v4i16)
5428
0
    return 0;
5429
0
  if ((Subtarget->hasNEON())) {
5430
0
    return fastEmitInst_rr(ARM::VQADDsv4i16, &ARM::DPRRegClass, Op0, Op1);
5431
0
  }
5432
0
  return 0;
5433
0
}
5434
5435
0
unsigned fastEmit_ISD_SADDSAT_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5436
0
  if (RetVT.SimpleTy != MVT::v8i16)
5437
0
    return 0;
5438
0
  if ((Subtarget->hasMVEIntegerOps())) {
5439
0
    return fastEmitInst_rr(ARM::MVE_VQADDs16, &ARM::MQPRRegClass, Op0, Op1);
5440
0
  }
5441
0
  if ((Subtarget->hasNEON())) {
5442
0
    return fastEmitInst_rr(ARM::VQADDsv8i16, &ARM::QPRRegClass, Op0, Op1);
5443
0
  }
5444
0
  return 0;
5445
0
}
5446
5447
0
unsigned fastEmit_ISD_SADDSAT_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5448
0
  if (RetVT.SimpleTy != MVT::v2i32)
5449
0
    return 0;
5450
0
  if ((Subtarget->hasNEON())) {
5451
0
    return fastEmitInst_rr(ARM::VQADDsv2i32, &ARM::DPRRegClass, Op0, Op1);
5452
0
  }
5453
0
  return 0;
5454
0
}
5455
5456
0
unsigned fastEmit_ISD_SADDSAT_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5457
0
  if (RetVT.SimpleTy != MVT::v4i32)
5458
0
    return 0;
5459
0
  if ((Subtarget->hasMVEIntegerOps())) {
5460
0
    return fastEmitInst_rr(ARM::MVE_VQADDs32, &ARM::MQPRRegClass, Op0, Op1);
5461
0
  }
5462
0
  if ((Subtarget->hasNEON())) {
5463
0
    return fastEmitInst_rr(ARM::VQADDsv4i32, &ARM::QPRRegClass, Op0, Op1);
5464
0
  }
5465
0
  return 0;
5466
0
}
5467
5468
0
unsigned fastEmit_ISD_SADDSAT_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5469
0
  if (RetVT.SimpleTy != MVT::v1i64)
5470
0
    return 0;
5471
0
  if ((Subtarget->hasNEON())) {
5472
0
    return fastEmitInst_rr(ARM::VQADDsv1i64, &ARM::DPRRegClass, Op0, Op1);
5473
0
  }
5474
0
  return 0;
5475
0
}
5476
5477
0
unsigned fastEmit_ISD_SADDSAT_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5478
0
  if (RetVT.SimpleTy != MVT::v2i64)
5479
0
    return 0;
5480
0
  if ((Subtarget->hasNEON())) {
5481
0
    return fastEmitInst_rr(ARM::VQADDsv2i64, &ARM::QPRRegClass, Op0, Op1);
5482
0
  }
5483
0
  return 0;
5484
0
}
5485
5486
0
unsigned fastEmit_ISD_SADDSAT_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5487
0
  switch (VT.SimpleTy) {
5488
0
  case MVT::i32: return fastEmit_ISD_SADDSAT_MVT_i32_rr(RetVT, Op0, Op1);
5489
0
  case MVT::v8i8: return fastEmit_ISD_SADDSAT_MVT_v8i8_rr(RetVT, Op0, Op1);
5490
0
  case MVT::v16i8: return fastEmit_ISD_SADDSAT_MVT_v16i8_rr(RetVT, Op0, Op1);
5491
0
  case MVT::v4i16: return fastEmit_ISD_SADDSAT_MVT_v4i16_rr(RetVT, Op0, Op1);
5492
0
  case MVT::v8i16: return fastEmit_ISD_SADDSAT_MVT_v8i16_rr(RetVT, Op0, Op1);
5493
0
  case MVT::v2i32: return fastEmit_ISD_SADDSAT_MVT_v2i32_rr(RetVT, Op0, Op1);
5494
0
  case MVT::v4i32: return fastEmit_ISD_SADDSAT_MVT_v4i32_rr(RetVT, Op0, Op1);
5495
0
  case MVT::v1i64: return fastEmit_ISD_SADDSAT_MVT_v1i64_rr(RetVT, Op0, Op1);
5496
0
  case MVT::v2i64: return fastEmit_ISD_SADDSAT_MVT_v2i64_rr(RetVT, Op0, Op1);
5497
0
  default: return 0;
5498
0
  }
5499
0
}
5500
5501
// FastEmit functions for ISD::SDIV.
5502
5503
0
unsigned fastEmit_ISD_SDIV_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5504
0
  if (RetVT.SimpleTy != MVT::i32)
5505
0
    return 0;
5506
0
  if ((Subtarget->hasDivideInThumbMode()) && (Subtarget->hasV8MBaselineOps()) && (Subtarget->isThumb())) {
5507
0
    return fastEmitInst_rr(ARM::t2SDIV, &ARM::rGPRRegClass, Op0, Op1);
5508
0
  }
5509
0
  if ((Subtarget->hasDivideInARMMode()) && (!Subtarget->isThumb())) {
5510
0
    return fastEmitInst_rr(ARM::SDIV, &ARM::GPRRegClass, Op0, Op1);
5511
0
  }
5512
0
  return 0;
5513
0
}
5514
5515
0
unsigned fastEmit_ISD_SDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5516
0
  switch (VT.SimpleTy) {
5517
0
  case MVT::i32: return fastEmit_ISD_SDIV_MVT_i32_rr(RetVT, Op0, Op1);
5518
0
  default: return 0;
5519
0
  }
5520
0
}
5521
5522
// FastEmit functions for ISD::SHL.
5523
5524
0
unsigned fastEmit_ISD_SHL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5525
0
  if (RetVT.SimpleTy != MVT::i32)
5526
0
    return 0;
5527
0
  if ((Subtarget->isThumb2())) {
5528
0
    return fastEmitInst_rr(ARM::t2LSLrr, &ARM::rGPRRegClass, Op0, Op1);
5529
0
  }
5530
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5531
0
    return fastEmitInst_rr(ARM::tLSLrr, &ARM::tGPRRegClass, Op0, Op1);
5532
0
  }
5533
0
  return 0;
5534
0
}
5535
5536
0
unsigned fastEmit_ISD_SHL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5537
0
  switch (VT.SimpleTy) {
5538
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_rr(RetVT, Op0, Op1);
5539
0
  default: return 0;
5540
0
  }
5541
0
}
5542
5543
// FastEmit functions for ISD::SMAX.
5544
5545
0
unsigned fastEmit_ISD_SMAX_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5546
0
  if (RetVT.SimpleTy != MVT::v8i8)
5547
0
    return 0;
5548
0
  if ((Subtarget->hasNEON())) {
5549
0
    return fastEmitInst_rr(ARM::VMAXsv8i8, &ARM::DPRRegClass, Op0, Op1);
5550
0
  }
5551
0
  return 0;
5552
0
}
5553
5554
0
unsigned fastEmit_ISD_SMAX_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5555
0
  if (RetVT.SimpleTy != MVT::v16i8)
5556
0
    return 0;
5557
0
  if ((Subtarget->hasMVEIntegerOps())) {
5558
0
    return fastEmitInst_rr(ARM::MVE_VMAXs8, &ARM::MQPRRegClass, Op0, Op1);
5559
0
  }
5560
0
  if ((Subtarget->hasNEON())) {
5561
0
    return fastEmitInst_rr(ARM::VMAXsv16i8, &ARM::QPRRegClass, Op0, Op1);
5562
0
  }
5563
0
  return 0;
5564
0
}
5565
5566
0
unsigned fastEmit_ISD_SMAX_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5567
0
  if (RetVT.SimpleTy != MVT::v4i16)
5568
0
    return 0;
5569
0
  if ((Subtarget->hasNEON())) {
5570
0
    return fastEmitInst_rr(ARM::VMAXsv4i16, &ARM::DPRRegClass, Op0, Op1);
5571
0
  }
5572
0
  return 0;
5573
0
}
5574
5575
0
unsigned fastEmit_ISD_SMAX_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5576
0
  if (RetVT.SimpleTy != MVT::v8i16)
5577
0
    return 0;
5578
0
  if ((Subtarget->hasMVEIntegerOps())) {
5579
0
    return fastEmitInst_rr(ARM::MVE_VMAXs16, &ARM::MQPRRegClass, Op0, Op1);
5580
0
  }
5581
0
  if ((Subtarget->hasNEON())) {
5582
0
    return fastEmitInst_rr(ARM::VMAXsv8i16, &ARM::QPRRegClass, Op0, Op1);
5583
0
  }
5584
0
  return 0;
5585
0
}
5586
5587
0
unsigned fastEmit_ISD_SMAX_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5588
0
  if (RetVT.SimpleTy != MVT::v2i32)
5589
0
    return 0;
5590
0
  if ((Subtarget->hasNEON())) {
5591
0
    return fastEmitInst_rr(ARM::VMAXsv2i32, &ARM::DPRRegClass, Op0, Op1);
5592
0
  }
5593
0
  return 0;
5594
0
}
5595
5596
0
unsigned fastEmit_ISD_SMAX_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5597
0
  if (RetVT.SimpleTy != MVT::v4i32)
5598
0
    return 0;
5599
0
  if ((Subtarget->hasMVEIntegerOps())) {
5600
0
    return fastEmitInst_rr(ARM::MVE_VMAXs32, &ARM::MQPRRegClass, Op0, Op1);
5601
0
  }
5602
0
  if ((Subtarget->hasNEON())) {
5603
0
    return fastEmitInst_rr(ARM::VMAXsv4i32, &ARM::QPRRegClass, Op0, Op1);
5604
0
  }
5605
0
  return 0;
5606
0
}
5607
5608
0
unsigned fastEmit_ISD_SMAX_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5609
0
  switch (VT.SimpleTy) {
5610
0
  case MVT::v8i8: return fastEmit_ISD_SMAX_MVT_v8i8_rr(RetVT, Op0, Op1);
5611
0
  case MVT::v16i8: return fastEmit_ISD_SMAX_MVT_v16i8_rr(RetVT, Op0, Op1);
5612
0
  case MVT::v4i16: return fastEmit_ISD_SMAX_MVT_v4i16_rr(RetVT, Op0, Op1);
5613
0
  case MVT::v8i16: return fastEmit_ISD_SMAX_MVT_v8i16_rr(RetVT, Op0, Op1);
5614
0
  case MVT::v2i32: return fastEmit_ISD_SMAX_MVT_v2i32_rr(RetVT, Op0, Op1);
5615
0
  case MVT::v4i32: return fastEmit_ISD_SMAX_MVT_v4i32_rr(RetVT, Op0, Op1);
5616
0
  default: return 0;
5617
0
  }
5618
0
}
5619
5620
// FastEmit functions for ISD::SMIN.
5621
5622
0
unsigned fastEmit_ISD_SMIN_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5623
0
  if (RetVT.SimpleTy != MVT::v8i8)
5624
0
    return 0;
5625
0
  if ((Subtarget->hasNEON())) {
5626
0
    return fastEmitInst_rr(ARM::VMINsv8i8, &ARM::DPRRegClass, Op0, Op1);
5627
0
  }
5628
0
  return 0;
5629
0
}
5630
5631
0
unsigned fastEmit_ISD_SMIN_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5632
0
  if (RetVT.SimpleTy != MVT::v16i8)
5633
0
    return 0;
5634
0
  if ((Subtarget->hasMVEIntegerOps())) {
5635
0
    return fastEmitInst_rr(ARM::MVE_VMINs8, &ARM::MQPRRegClass, Op0, Op1);
5636
0
  }
5637
0
  if ((Subtarget->hasNEON())) {
5638
0
    return fastEmitInst_rr(ARM::VMINsv16i8, &ARM::QPRRegClass, Op0, Op1);
5639
0
  }
5640
0
  return 0;
5641
0
}
5642
5643
0
unsigned fastEmit_ISD_SMIN_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5644
0
  if (RetVT.SimpleTy != MVT::v4i16)
5645
0
    return 0;
5646
0
  if ((Subtarget->hasNEON())) {
5647
0
    return fastEmitInst_rr(ARM::VMINsv4i16, &ARM::DPRRegClass, Op0, Op1);
5648
0
  }
5649
0
  return 0;
5650
0
}
5651
5652
0
unsigned fastEmit_ISD_SMIN_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5653
0
  if (RetVT.SimpleTy != MVT::v8i16)
5654
0
    return 0;
5655
0
  if ((Subtarget->hasMVEIntegerOps())) {
5656
0
    return fastEmitInst_rr(ARM::MVE_VMINs16, &ARM::MQPRRegClass, Op0, Op1);
5657
0
  }
5658
0
  if ((Subtarget->hasNEON())) {
5659
0
    return fastEmitInst_rr(ARM::VMINsv8i16, &ARM::QPRRegClass, Op0, Op1);
5660
0
  }
5661
0
  return 0;
5662
0
}
5663
5664
0
unsigned fastEmit_ISD_SMIN_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5665
0
  if (RetVT.SimpleTy != MVT::v2i32)
5666
0
    return 0;
5667
0
  if ((Subtarget->hasNEON())) {
5668
0
    return fastEmitInst_rr(ARM::VMINsv2i32, &ARM::DPRRegClass, Op0, Op1);
5669
0
  }
5670
0
  return 0;
5671
0
}
5672
5673
0
unsigned fastEmit_ISD_SMIN_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5674
0
  if (RetVT.SimpleTy != MVT::v4i32)
5675
0
    return 0;
5676
0
  if ((Subtarget->hasMVEIntegerOps())) {
5677
0
    return fastEmitInst_rr(ARM::MVE_VMINs32, &ARM::MQPRRegClass, Op0, Op1);
5678
0
  }
5679
0
  if ((Subtarget->hasNEON())) {
5680
0
    return fastEmitInst_rr(ARM::VMINsv4i32, &ARM::QPRRegClass, Op0, Op1);
5681
0
  }
5682
0
  return 0;
5683
0
}
5684
5685
0
unsigned fastEmit_ISD_SMIN_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5686
0
  switch (VT.SimpleTy) {
5687
0
  case MVT::v8i8: return fastEmit_ISD_SMIN_MVT_v8i8_rr(RetVT, Op0, Op1);
5688
0
  case MVT::v16i8: return fastEmit_ISD_SMIN_MVT_v16i8_rr(RetVT, Op0, Op1);
5689
0
  case MVT::v4i16: return fastEmit_ISD_SMIN_MVT_v4i16_rr(RetVT, Op0, Op1);
5690
0
  case MVT::v8i16: return fastEmit_ISD_SMIN_MVT_v8i16_rr(RetVT, Op0, Op1);
5691
0
  case MVT::v2i32: return fastEmit_ISD_SMIN_MVT_v2i32_rr(RetVT, Op0, Op1);
5692
0
  case MVT::v4i32: return fastEmit_ISD_SMIN_MVT_v4i32_rr(RetVT, Op0, Op1);
5693
0
  default: return 0;
5694
0
  }
5695
0
}
5696
5697
// FastEmit functions for ISD::SRA.
5698
5699
0
unsigned fastEmit_ISD_SRA_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5700
0
  if (RetVT.SimpleTy != MVT::i32)
5701
0
    return 0;
5702
0
  if ((Subtarget->isThumb2())) {
5703
0
    return fastEmitInst_rr(ARM::t2ASRrr, &ARM::rGPRRegClass, Op0, Op1);
5704
0
  }
5705
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5706
0
    return fastEmitInst_rr(ARM::tASRrr, &ARM::tGPRRegClass, Op0, Op1);
5707
0
  }
5708
0
  return 0;
5709
0
}
5710
5711
0
unsigned fastEmit_ISD_SRA_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5712
0
  switch (VT.SimpleTy) {
5713
0
  case MVT::i32: return fastEmit_ISD_SRA_MVT_i32_rr(RetVT, Op0, Op1);
5714
0
  default: return 0;
5715
0
  }
5716
0
}
5717
5718
// FastEmit functions for ISD::SRL.
5719
5720
0
unsigned fastEmit_ISD_SRL_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5721
0
  if (RetVT.SimpleTy != MVT::i32)
5722
0
    return 0;
5723
0
  if ((Subtarget->isThumb2())) {
5724
0
    return fastEmitInst_rr(ARM::t2LSRrr, &ARM::rGPRRegClass, Op0, Op1);
5725
0
  }
5726
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5727
0
    return fastEmitInst_rr(ARM::tLSRrr, &ARM::tGPRRegClass, Op0, Op1);
5728
0
  }
5729
0
  return 0;
5730
0
}
5731
5732
0
unsigned fastEmit_ISD_SRL_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5733
0
  switch (VT.SimpleTy) {
5734
0
  case MVT::i32: return fastEmit_ISD_SRL_MVT_i32_rr(RetVT, Op0, Op1);
5735
0
  default: return 0;
5736
0
  }
5737
0
}
5738
5739
// FastEmit functions for ISD::SSUBSAT.
5740
5741
0
unsigned fastEmit_ISD_SSUBSAT_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5742
0
  if (RetVT.SimpleTy != MVT::i32)
5743
0
    return 0;
5744
0
  if ((Subtarget->hasDSP()) && (Subtarget->isThumb2())) {
5745
0
    return fastEmitInst_rr(ARM::t2QSUB, &ARM::rGPRRegClass, Op0, Op1);
5746
0
  }
5747
0
  if ((Subtarget->hasV5TEOps()) && (!Subtarget->isThumb())) {
5748
0
    return fastEmitInst_rr(ARM::QSUB, &ARM::GPRnopcRegClass, Op0, Op1);
5749
0
  }
5750
0
  return 0;
5751
0
}
5752
5753
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5754
0
  if (RetVT.SimpleTy != MVT::v8i8)
5755
0
    return 0;
5756
0
  if ((Subtarget->hasNEON())) {
5757
0
    return fastEmitInst_rr(ARM::VQSUBsv8i8, &ARM::DPRRegClass, Op0, Op1);
5758
0
  }
5759
0
  return 0;
5760
0
}
5761
5762
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5763
0
  if (RetVT.SimpleTy != MVT::v16i8)
5764
0
    return 0;
5765
0
  if ((Subtarget->hasMVEIntegerOps())) {
5766
0
    return fastEmitInst_rr(ARM::MVE_VQSUBs8, &ARM::MQPRRegClass, Op0, Op1);
5767
0
  }
5768
0
  if ((Subtarget->hasNEON())) {
5769
0
    return fastEmitInst_rr(ARM::VQSUBsv16i8, &ARM::QPRRegClass, Op0, Op1);
5770
0
  }
5771
0
  return 0;
5772
0
}
5773
5774
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5775
0
  if (RetVT.SimpleTy != MVT::v4i16)
5776
0
    return 0;
5777
0
  if ((Subtarget->hasNEON())) {
5778
0
    return fastEmitInst_rr(ARM::VQSUBsv4i16, &ARM::DPRRegClass, Op0, Op1);
5779
0
  }
5780
0
  return 0;
5781
0
}
5782
5783
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5784
0
  if (RetVT.SimpleTy != MVT::v8i16)
5785
0
    return 0;
5786
0
  if ((Subtarget->hasMVEIntegerOps())) {
5787
0
    return fastEmitInst_rr(ARM::MVE_VQSUBs16, &ARM::MQPRRegClass, Op0, Op1);
5788
0
  }
5789
0
  if ((Subtarget->hasNEON())) {
5790
0
    return fastEmitInst_rr(ARM::VQSUBsv8i16, &ARM::QPRRegClass, Op0, Op1);
5791
0
  }
5792
0
  return 0;
5793
0
}
5794
5795
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5796
0
  if (RetVT.SimpleTy != MVT::v2i32)
5797
0
    return 0;
5798
0
  if ((Subtarget->hasNEON())) {
5799
0
    return fastEmitInst_rr(ARM::VQSUBsv2i32, &ARM::DPRRegClass, Op0, Op1);
5800
0
  }
5801
0
  return 0;
5802
0
}
5803
5804
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5805
0
  if (RetVT.SimpleTy != MVT::v4i32)
5806
0
    return 0;
5807
0
  if ((Subtarget->hasMVEIntegerOps())) {
5808
0
    return fastEmitInst_rr(ARM::MVE_VQSUBs32, &ARM::MQPRRegClass, Op0, Op1);
5809
0
  }
5810
0
  if ((Subtarget->hasNEON())) {
5811
0
    return fastEmitInst_rr(ARM::VQSUBsv4i32, &ARM::QPRRegClass, Op0, Op1);
5812
0
  }
5813
0
  return 0;
5814
0
}
5815
5816
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5817
0
  if (RetVT.SimpleTy != MVT::v1i64)
5818
0
    return 0;
5819
0
  if ((Subtarget->hasNEON())) {
5820
0
    return fastEmitInst_rr(ARM::VQSUBsv1i64, &ARM::DPRRegClass, Op0, Op1);
5821
0
  }
5822
0
  return 0;
5823
0
}
5824
5825
0
unsigned fastEmit_ISD_SSUBSAT_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5826
0
  if (RetVT.SimpleTy != MVT::v2i64)
5827
0
    return 0;
5828
0
  if ((Subtarget->hasNEON())) {
5829
0
    return fastEmitInst_rr(ARM::VQSUBsv2i64, &ARM::QPRRegClass, Op0, Op1);
5830
0
  }
5831
0
  return 0;
5832
0
}
5833
5834
0
unsigned fastEmit_ISD_SSUBSAT_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5835
0
  switch (VT.SimpleTy) {
5836
0
  case MVT::i32: return fastEmit_ISD_SSUBSAT_MVT_i32_rr(RetVT, Op0, Op1);
5837
0
  case MVT::v8i8: return fastEmit_ISD_SSUBSAT_MVT_v8i8_rr(RetVT, Op0, Op1);
5838
0
  case MVT::v16i8: return fastEmit_ISD_SSUBSAT_MVT_v16i8_rr(RetVT, Op0, Op1);
5839
0
  case MVT::v4i16: return fastEmit_ISD_SSUBSAT_MVT_v4i16_rr(RetVT, Op0, Op1);
5840
0
  case MVT::v8i16: return fastEmit_ISD_SSUBSAT_MVT_v8i16_rr(RetVT, Op0, Op1);
5841
0
  case MVT::v2i32: return fastEmit_ISD_SSUBSAT_MVT_v2i32_rr(RetVT, Op0, Op1);
5842
0
  case MVT::v4i32: return fastEmit_ISD_SSUBSAT_MVT_v4i32_rr(RetVT, Op0, Op1);
5843
0
  case MVT::v1i64: return fastEmit_ISD_SSUBSAT_MVT_v1i64_rr(RetVT, Op0, Op1);
5844
0
  case MVT::v2i64: return fastEmit_ISD_SSUBSAT_MVT_v2i64_rr(RetVT, Op0, Op1);
5845
0
  default: return 0;
5846
0
  }
5847
0
}
5848
5849
// FastEmit functions for ISD::SUB.
5850
5851
0
unsigned fastEmit_ISD_SUB_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5852
0
  if (RetVT.SimpleTy != MVT::i32)
5853
0
    return 0;
5854
0
  if ((Subtarget->isThumb2())) {
5855
0
    return fastEmitInst_rr(ARM::t2SUBrr, &ARM::GPRnopcRegClass, Op0, Op1);
5856
0
  }
5857
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
5858
0
    return fastEmitInst_rr(ARM::tSUBrr, &ARM::tGPRRegClass, Op0, Op1);
5859
0
  }
5860
0
  if ((!Subtarget->isThumb())) {
5861
0
    return fastEmitInst_rr(ARM::SUBrr, &ARM::GPRRegClass, Op0, Op1);
5862
0
  }
5863
0
  return 0;
5864
0
}
5865
5866
0
unsigned fastEmit_ISD_SUB_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5867
0
  if (RetVT.SimpleTy != MVT::v8i8)
5868
0
    return 0;
5869
0
  if ((Subtarget->hasNEON())) {
5870
0
    return fastEmitInst_rr(ARM::VSUBv8i8, &ARM::DPRRegClass, Op0, Op1);
5871
0
  }
5872
0
  return 0;
5873
0
}
5874
5875
0
unsigned fastEmit_ISD_SUB_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5876
0
  if (RetVT.SimpleTy != MVT::v16i8)
5877
0
    return 0;
5878
0
  if ((Subtarget->hasMVEIntegerOps())) {
5879
0
    return fastEmitInst_rr(ARM::MVE_VSUBi8, &ARM::MQPRRegClass, Op0, Op1);
5880
0
  }
5881
0
  if ((Subtarget->hasNEON())) {
5882
0
    return fastEmitInst_rr(ARM::VSUBv16i8, &ARM::QPRRegClass, Op0, Op1);
5883
0
  }
5884
0
  return 0;
5885
0
}
5886
5887
0
unsigned fastEmit_ISD_SUB_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5888
0
  if (RetVT.SimpleTy != MVT::v4i16)
5889
0
    return 0;
5890
0
  if ((Subtarget->hasNEON())) {
5891
0
    return fastEmitInst_rr(ARM::VSUBv4i16, &ARM::DPRRegClass, Op0, Op1);
5892
0
  }
5893
0
  return 0;
5894
0
}
5895
5896
0
unsigned fastEmit_ISD_SUB_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5897
0
  if (RetVT.SimpleTy != MVT::v8i16)
5898
0
    return 0;
5899
0
  if ((Subtarget->hasMVEIntegerOps())) {
5900
0
    return fastEmitInst_rr(ARM::MVE_VSUBi16, &ARM::MQPRRegClass, Op0, Op1);
5901
0
  }
5902
0
  if ((Subtarget->hasNEON())) {
5903
0
    return fastEmitInst_rr(ARM::VSUBv8i16, &ARM::QPRRegClass, Op0, Op1);
5904
0
  }
5905
0
  return 0;
5906
0
}
5907
5908
0
unsigned fastEmit_ISD_SUB_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5909
0
  if (RetVT.SimpleTy != MVT::v2i32)
5910
0
    return 0;
5911
0
  if ((Subtarget->hasNEON())) {
5912
0
    return fastEmitInst_rr(ARM::VSUBv2i32, &ARM::DPRRegClass, Op0, Op1);
5913
0
  }
5914
0
  return 0;
5915
0
}
5916
5917
0
unsigned fastEmit_ISD_SUB_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5918
0
  if (RetVT.SimpleTy != MVT::v4i32)
5919
0
    return 0;
5920
0
  if ((Subtarget->hasMVEIntegerOps())) {
5921
0
    return fastEmitInst_rr(ARM::MVE_VSUBi32, &ARM::MQPRRegClass, Op0, Op1);
5922
0
  }
5923
0
  if ((Subtarget->hasNEON())) {
5924
0
    return fastEmitInst_rr(ARM::VSUBv4i32, &ARM::QPRRegClass, Op0, Op1);
5925
0
  }
5926
0
  return 0;
5927
0
}
5928
5929
0
unsigned fastEmit_ISD_SUB_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5930
0
  if (RetVT.SimpleTy != MVT::v1i64)
5931
0
    return 0;
5932
0
  if ((Subtarget->hasNEON())) {
5933
0
    return fastEmitInst_rr(ARM::VSUBv1i64, &ARM::DPRRegClass, Op0, Op1);
5934
0
  }
5935
0
  return 0;
5936
0
}
5937
5938
0
unsigned fastEmit_ISD_SUB_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5939
0
  if (RetVT.SimpleTy != MVT::v2i64)
5940
0
    return 0;
5941
0
  if ((Subtarget->hasNEON())) {
5942
0
    return fastEmitInst_rr(ARM::VSUBv2i64, &ARM::QPRRegClass, Op0, Op1);
5943
0
  }
5944
0
  return 0;
5945
0
}
5946
5947
0
unsigned fastEmit_ISD_SUB_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
5948
0
  switch (VT.SimpleTy) {
5949
0
  case MVT::i32: return fastEmit_ISD_SUB_MVT_i32_rr(RetVT, Op0, Op1);
5950
0
  case MVT::v8i8: return fastEmit_ISD_SUB_MVT_v8i8_rr(RetVT, Op0, Op1);
5951
0
  case MVT::v16i8: return fastEmit_ISD_SUB_MVT_v16i8_rr(RetVT, Op0, Op1);
5952
0
  case MVT::v4i16: return fastEmit_ISD_SUB_MVT_v4i16_rr(RetVT, Op0, Op1);
5953
0
  case MVT::v8i16: return fastEmit_ISD_SUB_MVT_v8i16_rr(RetVT, Op0, Op1);
5954
0
  case MVT::v2i32: return fastEmit_ISD_SUB_MVT_v2i32_rr(RetVT, Op0, Op1);
5955
0
  case MVT::v4i32: return fastEmit_ISD_SUB_MVT_v4i32_rr(RetVT, Op0, Op1);
5956
0
  case MVT::v1i64: return fastEmit_ISD_SUB_MVT_v1i64_rr(RetVT, Op0, Op1);
5957
0
  case MVT::v2i64: return fastEmit_ISD_SUB_MVT_v2i64_rr(RetVT, Op0, Op1);
5958
0
  default: return 0;
5959
0
  }
5960
0
}
5961
5962
// FastEmit functions for ISD::UADDSAT.
5963
5964
0
unsigned fastEmit_ISD_UADDSAT_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5965
0
  if (RetVT.SimpleTy != MVT::v8i8)
5966
0
    return 0;
5967
0
  if ((Subtarget->hasNEON())) {
5968
0
    return fastEmitInst_rr(ARM::VQADDuv8i8, &ARM::DPRRegClass, Op0, Op1);
5969
0
  }
5970
0
  return 0;
5971
0
}
5972
5973
0
unsigned fastEmit_ISD_UADDSAT_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5974
0
  if (RetVT.SimpleTy != MVT::v16i8)
5975
0
    return 0;
5976
0
  if ((Subtarget->hasMVEIntegerOps())) {
5977
0
    return fastEmitInst_rr(ARM::MVE_VQADDu8, &ARM::MQPRRegClass, Op0, Op1);
5978
0
  }
5979
0
  if ((Subtarget->hasNEON())) {
5980
0
    return fastEmitInst_rr(ARM::VQADDuv16i8, &ARM::QPRRegClass, Op0, Op1);
5981
0
  }
5982
0
  return 0;
5983
0
}
5984
5985
0
unsigned fastEmit_ISD_UADDSAT_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5986
0
  if (RetVT.SimpleTy != MVT::v4i16)
5987
0
    return 0;
5988
0
  if ((Subtarget->hasNEON())) {
5989
0
    return fastEmitInst_rr(ARM::VQADDuv4i16, &ARM::DPRRegClass, Op0, Op1);
5990
0
  }
5991
0
  return 0;
5992
0
}
5993
5994
0
unsigned fastEmit_ISD_UADDSAT_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
5995
0
  if (RetVT.SimpleTy != MVT::v8i16)
5996
0
    return 0;
5997
0
  if ((Subtarget->hasMVEIntegerOps())) {
5998
0
    return fastEmitInst_rr(ARM::MVE_VQADDu16, &ARM::MQPRRegClass, Op0, Op1);
5999
0
  }
6000
0
  if ((Subtarget->hasNEON())) {
6001
0
    return fastEmitInst_rr(ARM::VQADDuv8i16, &ARM::QPRRegClass, Op0, Op1);
6002
0
  }
6003
0
  return 0;
6004
0
}
6005
6006
0
unsigned fastEmit_ISD_UADDSAT_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6007
0
  if (RetVT.SimpleTy != MVT::v2i32)
6008
0
    return 0;
6009
0
  if ((Subtarget->hasNEON())) {
6010
0
    return fastEmitInst_rr(ARM::VQADDuv2i32, &ARM::DPRRegClass, Op0, Op1);
6011
0
  }
6012
0
  return 0;
6013
0
}
6014
6015
0
unsigned fastEmit_ISD_UADDSAT_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6016
0
  if (RetVT.SimpleTy != MVT::v4i32)
6017
0
    return 0;
6018
0
  if ((Subtarget->hasMVEIntegerOps())) {
6019
0
    return fastEmitInst_rr(ARM::MVE_VQADDu32, &ARM::MQPRRegClass, Op0, Op1);
6020
0
  }
6021
0
  if ((Subtarget->hasNEON())) {
6022
0
    return fastEmitInst_rr(ARM::VQADDuv4i32, &ARM::QPRRegClass, Op0, Op1);
6023
0
  }
6024
0
  return 0;
6025
0
}
6026
6027
0
unsigned fastEmit_ISD_UADDSAT_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6028
0
  if (RetVT.SimpleTy != MVT::v1i64)
6029
0
    return 0;
6030
0
  if ((Subtarget->hasNEON())) {
6031
0
    return fastEmitInst_rr(ARM::VQADDuv1i64, &ARM::DPRRegClass, Op0, Op1);
6032
0
  }
6033
0
  return 0;
6034
0
}
6035
6036
0
unsigned fastEmit_ISD_UADDSAT_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6037
0
  if (RetVT.SimpleTy != MVT::v2i64)
6038
0
    return 0;
6039
0
  if ((Subtarget->hasNEON())) {
6040
0
    return fastEmitInst_rr(ARM::VQADDuv2i64, &ARM::QPRRegClass, Op0, Op1);
6041
0
  }
6042
0
  return 0;
6043
0
}
6044
6045
0
unsigned fastEmit_ISD_UADDSAT_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6046
0
  switch (VT.SimpleTy) {
6047
0
  case MVT::v8i8: return fastEmit_ISD_UADDSAT_MVT_v8i8_rr(RetVT, Op0, Op1);
6048
0
  case MVT::v16i8: return fastEmit_ISD_UADDSAT_MVT_v16i8_rr(RetVT, Op0, Op1);
6049
0
  case MVT::v4i16: return fastEmit_ISD_UADDSAT_MVT_v4i16_rr(RetVT, Op0, Op1);
6050
0
  case MVT::v8i16: return fastEmit_ISD_UADDSAT_MVT_v8i16_rr(RetVT, Op0, Op1);
6051
0
  case MVT::v2i32: return fastEmit_ISD_UADDSAT_MVT_v2i32_rr(RetVT, Op0, Op1);
6052
0
  case MVT::v4i32: return fastEmit_ISD_UADDSAT_MVT_v4i32_rr(RetVT, Op0, Op1);
6053
0
  case MVT::v1i64: return fastEmit_ISD_UADDSAT_MVT_v1i64_rr(RetVT, Op0, Op1);
6054
0
  case MVT::v2i64: return fastEmit_ISD_UADDSAT_MVT_v2i64_rr(RetVT, Op0, Op1);
6055
0
  default: return 0;
6056
0
  }
6057
0
}
6058
6059
// FastEmit functions for ISD::UDIV.
6060
6061
0
unsigned fastEmit_ISD_UDIV_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6062
0
  if (RetVT.SimpleTy != MVT::i32)
6063
0
    return 0;
6064
0
  if ((Subtarget->hasDivideInThumbMode()) && (Subtarget->hasV8MBaselineOps()) && (Subtarget->isThumb())) {
6065
0
    return fastEmitInst_rr(ARM::t2UDIV, &ARM::rGPRRegClass, Op0, Op1);
6066
0
  }
6067
0
  if ((Subtarget->hasDivideInARMMode()) && (!Subtarget->isThumb())) {
6068
0
    return fastEmitInst_rr(ARM::UDIV, &ARM::GPRRegClass, Op0, Op1);
6069
0
  }
6070
0
  return 0;
6071
0
}
6072
6073
0
unsigned fastEmit_ISD_UDIV_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6074
0
  switch (VT.SimpleTy) {
6075
0
  case MVT::i32: return fastEmit_ISD_UDIV_MVT_i32_rr(RetVT, Op0, Op1);
6076
0
  default: return 0;
6077
0
  }
6078
0
}
6079
6080
// FastEmit functions for ISD::UMAX.
6081
6082
0
unsigned fastEmit_ISD_UMAX_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6083
0
  if (RetVT.SimpleTy != MVT::v8i8)
6084
0
    return 0;
6085
0
  if ((Subtarget->hasNEON())) {
6086
0
    return fastEmitInst_rr(ARM::VMAXuv8i8, &ARM::DPRRegClass, Op0, Op1);
6087
0
  }
6088
0
  return 0;
6089
0
}
6090
6091
0
unsigned fastEmit_ISD_UMAX_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6092
0
  if (RetVT.SimpleTy != MVT::v16i8)
6093
0
    return 0;
6094
0
  if ((Subtarget->hasMVEIntegerOps())) {
6095
0
    return fastEmitInst_rr(ARM::MVE_VMAXu8, &ARM::MQPRRegClass, Op0, Op1);
6096
0
  }
6097
0
  if ((Subtarget->hasNEON())) {
6098
0
    return fastEmitInst_rr(ARM::VMAXuv16i8, &ARM::QPRRegClass, Op0, Op1);
6099
0
  }
6100
0
  return 0;
6101
0
}
6102
6103
0
unsigned fastEmit_ISD_UMAX_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6104
0
  if (RetVT.SimpleTy != MVT::v4i16)
6105
0
    return 0;
6106
0
  if ((Subtarget->hasNEON())) {
6107
0
    return fastEmitInst_rr(ARM::VMAXuv4i16, &ARM::DPRRegClass, Op0, Op1);
6108
0
  }
6109
0
  return 0;
6110
0
}
6111
6112
0
unsigned fastEmit_ISD_UMAX_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6113
0
  if (RetVT.SimpleTy != MVT::v8i16)
6114
0
    return 0;
6115
0
  if ((Subtarget->hasMVEIntegerOps())) {
6116
0
    return fastEmitInst_rr(ARM::MVE_VMAXu16, &ARM::MQPRRegClass, Op0, Op1);
6117
0
  }
6118
0
  if ((Subtarget->hasNEON())) {
6119
0
    return fastEmitInst_rr(ARM::VMAXuv8i16, &ARM::QPRRegClass, Op0, Op1);
6120
0
  }
6121
0
  return 0;
6122
0
}
6123
6124
0
unsigned fastEmit_ISD_UMAX_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6125
0
  if (RetVT.SimpleTy != MVT::v2i32)
6126
0
    return 0;
6127
0
  if ((Subtarget->hasNEON())) {
6128
0
    return fastEmitInst_rr(ARM::VMAXuv2i32, &ARM::DPRRegClass, Op0, Op1);
6129
0
  }
6130
0
  return 0;
6131
0
}
6132
6133
0
unsigned fastEmit_ISD_UMAX_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6134
0
  if (RetVT.SimpleTy != MVT::v4i32)
6135
0
    return 0;
6136
0
  if ((Subtarget->hasMVEIntegerOps())) {
6137
0
    return fastEmitInst_rr(ARM::MVE_VMAXu32, &ARM::MQPRRegClass, Op0, Op1);
6138
0
  }
6139
0
  if ((Subtarget->hasNEON())) {
6140
0
    return fastEmitInst_rr(ARM::VMAXuv4i32, &ARM::QPRRegClass, Op0, Op1);
6141
0
  }
6142
0
  return 0;
6143
0
}
6144
6145
0
unsigned fastEmit_ISD_UMAX_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6146
0
  switch (VT.SimpleTy) {
6147
0
  case MVT::v8i8: return fastEmit_ISD_UMAX_MVT_v8i8_rr(RetVT, Op0, Op1);
6148
0
  case MVT::v16i8: return fastEmit_ISD_UMAX_MVT_v16i8_rr(RetVT, Op0, Op1);
6149
0
  case MVT::v4i16: return fastEmit_ISD_UMAX_MVT_v4i16_rr(RetVT, Op0, Op1);
6150
0
  case MVT::v8i16: return fastEmit_ISD_UMAX_MVT_v8i16_rr(RetVT, Op0, Op1);
6151
0
  case MVT::v2i32: return fastEmit_ISD_UMAX_MVT_v2i32_rr(RetVT, Op0, Op1);
6152
0
  case MVT::v4i32: return fastEmit_ISD_UMAX_MVT_v4i32_rr(RetVT, Op0, Op1);
6153
0
  default: return 0;
6154
0
  }
6155
0
}
6156
6157
// FastEmit functions for ISD::UMIN.
6158
6159
0
unsigned fastEmit_ISD_UMIN_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6160
0
  if (RetVT.SimpleTy != MVT::v8i8)
6161
0
    return 0;
6162
0
  if ((Subtarget->hasNEON())) {
6163
0
    return fastEmitInst_rr(ARM::VMINuv8i8, &ARM::DPRRegClass, Op0, Op1);
6164
0
  }
6165
0
  return 0;
6166
0
}
6167
6168
0
unsigned fastEmit_ISD_UMIN_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6169
0
  if (RetVT.SimpleTy != MVT::v16i8)
6170
0
    return 0;
6171
0
  if ((Subtarget->hasMVEIntegerOps())) {
6172
0
    return fastEmitInst_rr(ARM::MVE_VMINu8, &ARM::MQPRRegClass, Op0, Op1);
6173
0
  }
6174
0
  if ((Subtarget->hasNEON())) {
6175
0
    return fastEmitInst_rr(ARM::VMINuv16i8, &ARM::QPRRegClass, Op0, Op1);
6176
0
  }
6177
0
  return 0;
6178
0
}
6179
6180
0
unsigned fastEmit_ISD_UMIN_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6181
0
  if (RetVT.SimpleTy != MVT::v4i16)
6182
0
    return 0;
6183
0
  if ((Subtarget->hasNEON())) {
6184
0
    return fastEmitInst_rr(ARM::VMINuv4i16, &ARM::DPRRegClass, Op0, Op1);
6185
0
  }
6186
0
  return 0;
6187
0
}
6188
6189
0
unsigned fastEmit_ISD_UMIN_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6190
0
  if (RetVT.SimpleTy != MVT::v8i16)
6191
0
    return 0;
6192
0
  if ((Subtarget->hasMVEIntegerOps())) {
6193
0
    return fastEmitInst_rr(ARM::MVE_VMINu16, &ARM::MQPRRegClass, Op0, Op1);
6194
0
  }
6195
0
  if ((Subtarget->hasNEON())) {
6196
0
    return fastEmitInst_rr(ARM::VMINuv8i16, &ARM::QPRRegClass, Op0, Op1);
6197
0
  }
6198
0
  return 0;
6199
0
}
6200
6201
0
unsigned fastEmit_ISD_UMIN_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6202
0
  if (RetVT.SimpleTy != MVT::v2i32)
6203
0
    return 0;
6204
0
  if ((Subtarget->hasNEON())) {
6205
0
    return fastEmitInst_rr(ARM::VMINuv2i32, &ARM::DPRRegClass, Op0, Op1);
6206
0
  }
6207
0
  return 0;
6208
0
}
6209
6210
0
unsigned fastEmit_ISD_UMIN_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6211
0
  if (RetVT.SimpleTy != MVT::v4i32)
6212
0
    return 0;
6213
0
  if ((Subtarget->hasMVEIntegerOps())) {
6214
0
    return fastEmitInst_rr(ARM::MVE_VMINu32, &ARM::MQPRRegClass, Op0, Op1);
6215
0
  }
6216
0
  if ((Subtarget->hasNEON())) {
6217
0
    return fastEmitInst_rr(ARM::VMINuv4i32, &ARM::QPRRegClass, Op0, Op1);
6218
0
  }
6219
0
  return 0;
6220
0
}
6221
6222
0
unsigned fastEmit_ISD_UMIN_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6223
0
  switch (VT.SimpleTy) {
6224
0
  case MVT::v8i8: return fastEmit_ISD_UMIN_MVT_v8i8_rr(RetVT, Op0, Op1);
6225
0
  case MVT::v16i8: return fastEmit_ISD_UMIN_MVT_v16i8_rr(RetVT, Op0, Op1);
6226
0
  case MVT::v4i16: return fastEmit_ISD_UMIN_MVT_v4i16_rr(RetVT, Op0, Op1);
6227
0
  case MVT::v8i16: return fastEmit_ISD_UMIN_MVT_v8i16_rr(RetVT, Op0, Op1);
6228
0
  case MVT::v2i32: return fastEmit_ISD_UMIN_MVT_v2i32_rr(RetVT, Op0, Op1);
6229
0
  case MVT::v4i32: return fastEmit_ISD_UMIN_MVT_v4i32_rr(RetVT, Op0, Op1);
6230
0
  default: return 0;
6231
0
  }
6232
0
}
6233
6234
// FastEmit functions for ISD::USUBSAT.
6235
6236
0
unsigned fastEmit_ISD_USUBSAT_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6237
0
  if (RetVT.SimpleTy != MVT::v8i8)
6238
0
    return 0;
6239
0
  if ((Subtarget->hasNEON())) {
6240
0
    return fastEmitInst_rr(ARM::VQSUBuv8i8, &ARM::DPRRegClass, Op0, Op1);
6241
0
  }
6242
0
  return 0;
6243
0
}
6244
6245
0
unsigned fastEmit_ISD_USUBSAT_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6246
0
  if (RetVT.SimpleTy != MVT::v16i8)
6247
0
    return 0;
6248
0
  if ((Subtarget->hasMVEIntegerOps())) {
6249
0
    return fastEmitInst_rr(ARM::MVE_VQSUBu8, &ARM::MQPRRegClass, Op0, Op1);
6250
0
  }
6251
0
  if ((Subtarget->hasNEON())) {
6252
0
    return fastEmitInst_rr(ARM::VQSUBuv16i8, &ARM::QPRRegClass, Op0, Op1);
6253
0
  }
6254
0
  return 0;
6255
0
}
6256
6257
0
unsigned fastEmit_ISD_USUBSAT_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6258
0
  if (RetVT.SimpleTy != MVT::v4i16)
6259
0
    return 0;
6260
0
  if ((Subtarget->hasNEON())) {
6261
0
    return fastEmitInst_rr(ARM::VQSUBuv4i16, &ARM::DPRRegClass, Op0, Op1);
6262
0
  }
6263
0
  return 0;
6264
0
}
6265
6266
0
unsigned fastEmit_ISD_USUBSAT_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6267
0
  if (RetVT.SimpleTy != MVT::v8i16)
6268
0
    return 0;
6269
0
  if ((Subtarget->hasMVEIntegerOps())) {
6270
0
    return fastEmitInst_rr(ARM::MVE_VQSUBu16, &ARM::MQPRRegClass, Op0, Op1);
6271
0
  }
6272
0
  if ((Subtarget->hasNEON())) {
6273
0
    return fastEmitInst_rr(ARM::VQSUBuv8i16, &ARM::QPRRegClass, Op0, Op1);
6274
0
  }
6275
0
  return 0;
6276
0
}
6277
6278
0
unsigned fastEmit_ISD_USUBSAT_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6279
0
  if (RetVT.SimpleTy != MVT::v2i32)
6280
0
    return 0;
6281
0
  if ((Subtarget->hasNEON())) {
6282
0
    return fastEmitInst_rr(ARM::VQSUBuv2i32, &ARM::DPRRegClass, Op0, Op1);
6283
0
  }
6284
0
  return 0;
6285
0
}
6286
6287
0
unsigned fastEmit_ISD_USUBSAT_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6288
0
  if (RetVT.SimpleTy != MVT::v4i32)
6289
0
    return 0;
6290
0
  if ((Subtarget->hasMVEIntegerOps())) {
6291
0
    return fastEmitInst_rr(ARM::MVE_VQSUBu32, &ARM::MQPRRegClass, Op0, Op1);
6292
0
  }
6293
0
  if ((Subtarget->hasNEON())) {
6294
0
    return fastEmitInst_rr(ARM::VQSUBuv4i32, &ARM::QPRRegClass, Op0, Op1);
6295
0
  }
6296
0
  return 0;
6297
0
}
6298
6299
0
unsigned fastEmit_ISD_USUBSAT_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6300
0
  if (RetVT.SimpleTy != MVT::v1i64)
6301
0
    return 0;
6302
0
  if ((Subtarget->hasNEON())) {
6303
0
    return fastEmitInst_rr(ARM::VQSUBuv1i64, &ARM::DPRRegClass, Op0, Op1);
6304
0
  }
6305
0
  return 0;
6306
0
}
6307
6308
0
unsigned fastEmit_ISD_USUBSAT_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6309
0
  if (RetVT.SimpleTy != MVT::v2i64)
6310
0
    return 0;
6311
0
  if ((Subtarget->hasNEON())) {
6312
0
    return fastEmitInst_rr(ARM::VQSUBuv2i64, &ARM::QPRRegClass, Op0, Op1);
6313
0
  }
6314
0
  return 0;
6315
0
}
6316
6317
0
unsigned fastEmit_ISD_USUBSAT_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6318
0
  switch (VT.SimpleTy) {
6319
0
  case MVT::v8i8: return fastEmit_ISD_USUBSAT_MVT_v8i8_rr(RetVT, Op0, Op1);
6320
0
  case MVT::v16i8: return fastEmit_ISD_USUBSAT_MVT_v16i8_rr(RetVT, Op0, Op1);
6321
0
  case MVT::v4i16: return fastEmit_ISD_USUBSAT_MVT_v4i16_rr(RetVT, Op0, Op1);
6322
0
  case MVT::v8i16: return fastEmit_ISD_USUBSAT_MVT_v8i16_rr(RetVT, Op0, Op1);
6323
0
  case MVT::v2i32: return fastEmit_ISD_USUBSAT_MVT_v2i32_rr(RetVT, Op0, Op1);
6324
0
  case MVT::v4i32: return fastEmit_ISD_USUBSAT_MVT_v4i32_rr(RetVT, Op0, Op1);
6325
0
  case MVT::v1i64: return fastEmit_ISD_USUBSAT_MVT_v1i64_rr(RetVT, Op0, Op1);
6326
0
  case MVT::v2i64: return fastEmit_ISD_USUBSAT_MVT_v2i64_rr(RetVT, Op0, Op1);
6327
0
  default: return 0;
6328
0
  }
6329
0
}
6330
6331
// FastEmit functions for ISD::XOR.
6332
6333
0
unsigned fastEmit_ISD_XOR_MVT_i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6334
0
  if (RetVT.SimpleTy != MVT::i32)
6335
0
    return 0;
6336
0
  if ((Subtarget->isThumb2())) {
6337
0
    return fastEmitInst_rr(ARM::t2EORrr, &ARM::rGPRRegClass, Op0, Op1);
6338
0
  }
6339
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
6340
0
    return fastEmitInst_rr(ARM::tEOR, &ARM::tGPRRegClass, Op0, Op1);
6341
0
  }
6342
0
  if ((!Subtarget->isThumb())) {
6343
0
    return fastEmitInst_rr(ARM::EORrr, &ARM::GPRRegClass, Op0, Op1);
6344
0
  }
6345
0
  return 0;
6346
0
}
6347
6348
0
unsigned fastEmit_ISD_XOR_MVT_v8i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6349
0
  if (RetVT.SimpleTy != MVT::v8i8)
6350
0
    return 0;
6351
0
  if ((Subtarget->hasNEON())) {
6352
0
    return fastEmitInst_rr(ARM::VEORd, &ARM::DPRRegClass, Op0, Op1);
6353
0
  }
6354
0
  return 0;
6355
0
}
6356
6357
0
unsigned fastEmit_ISD_XOR_MVT_v16i8_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6358
0
  if (RetVT.SimpleTy != MVT::v16i8)
6359
0
    return 0;
6360
0
  if ((Subtarget->hasMVEIntegerOps())) {
6361
0
    return fastEmitInst_rr(ARM::MVE_VEOR, &ARM::MQPRRegClass, Op0, Op1);
6362
0
  }
6363
0
  if ((Subtarget->hasNEON())) {
6364
0
    return fastEmitInst_rr(ARM::VEORq, &ARM::QPRRegClass, Op0, Op1);
6365
0
  }
6366
0
  return 0;
6367
0
}
6368
6369
0
unsigned fastEmit_ISD_XOR_MVT_v4i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6370
0
  if (RetVT.SimpleTy != MVT::v4i16)
6371
0
    return 0;
6372
0
  if ((Subtarget->hasNEON())) {
6373
0
    return fastEmitInst_rr(ARM::VEORd, &ARM::DPRRegClass, Op0, Op1);
6374
0
  }
6375
0
  return 0;
6376
0
}
6377
6378
0
unsigned fastEmit_ISD_XOR_MVT_v8i16_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6379
0
  if (RetVT.SimpleTy != MVT::v8i16)
6380
0
    return 0;
6381
0
  if ((Subtarget->hasMVEIntegerOps())) {
6382
0
    return fastEmitInst_rr(ARM::MVE_VEOR, &ARM::MQPRRegClass, Op0, Op1);
6383
0
  }
6384
0
  if ((Subtarget->hasNEON())) {
6385
0
    return fastEmitInst_rr(ARM::VEORq, &ARM::QPRRegClass, Op0, Op1);
6386
0
  }
6387
0
  return 0;
6388
0
}
6389
6390
0
unsigned fastEmit_ISD_XOR_MVT_v2i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6391
0
  if (RetVT.SimpleTy != MVT::v2i32)
6392
0
    return 0;
6393
0
  if ((Subtarget->hasNEON())) {
6394
0
    return fastEmitInst_rr(ARM::VEORd, &ARM::DPRRegClass, Op0, Op1);
6395
0
  }
6396
0
  return 0;
6397
0
}
6398
6399
0
unsigned fastEmit_ISD_XOR_MVT_v4i32_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6400
0
  if (RetVT.SimpleTy != MVT::v4i32)
6401
0
    return 0;
6402
0
  if ((Subtarget->hasMVEIntegerOps())) {
6403
0
    return fastEmitInst_rr(ARM::MVE_VEOR, &ARM::MQPRRegClass, Op0, Op1);
6404
0
  }
6405
0
  if ((Subtarget->hasNEON())) {
6406
0
    return fastEmitInst_rr(ARM::VEORq, &ARM::QPRRegClass, Op0, Op1);
6407
0
  }
6408
0
  return 0;
6409
0
}
6410
6411
0
unsigned fastEmit_ISD_XOR_MVT_v1i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6412
0
  if (RetVT.SimpleTy != MVT::v1i64)
6413
0
    return 0;
6414
0
  if ((Subtarget->hasNEON())) {
6415
0
    return fastEmitInst_rr(ARM::VEORd, &ARM::DPRRegClass, Op0, Op1);
6416
0
  }
6417
0
  return 0;
6418
0
}
6419
6420
0
unsigned fastEmit_ISD_XOR_MVT_v2i64_rr(MVT RetVT, unsigned Op0, unsigned Op1) {
6421
0
  if (RetVT.SimpleTy != MVT::v2i64)
6422
0
    return 0;
6423
0
  if ((Subtarget->hasMVEIntegerOps())) {
6424
0
    return fastEmitInst_rr(ARM::MVE_VEOR, &ARM::MQPRRegClass, Op0, Op1);
6425
0
  }
6426
0
  if ((Subtarget->hasNEON())) {
6427
0
    return fastEmitInst_rr(ARM::VEORq, &ARM::QPRRegClass, Op0, Op1);
6428
0
  }
6429
0
  return 0;
6430
0
}
6431
6432
0
unsigned fastEmit_ISD_XOR_rr(MVT VT, MVT RetVT, unsigned Op0, unsigned Op1) {
6433
0
  switch (VT.SimpleTy) {
6434
0
  case MVT::i32: return fastEmit_ISD_XOR_MVT_i32_rr(RetVT, Op0, Op1);
6435
0
  case MVT::v8i8: return fastEmit_ISD_XOR_MVT_v8i8_rr(RetVT, Op0, Op1);
6436
0
  case MVT::v16i8: return fastEmit_ISD_XOR_MVT_v16i8_rr(RetVT, Op0, Op1);
6437
0
  case MVT::v4i16: return fastEmit_ISD_XOR_MVT_v4i16_rr(RetVT, Op0, Op1);
6438
0
  case MVT::v8i16: return fastEmit_ISD_XOR_MVT_v8i16_rr(RetVT, Op0, Op1);
6439
0
  case MVT::v2i32: return fastEmit_ISD_XOR_MVT_v2i32_rr(RetVT, Op0, Op1);
6440
0
  case MVT::v4i32: return fastEmit_ISD_XOR_MVT_v4i32_rr(RetVT, Op0, Op1);
6441
0
  case MVT::v1i64: return fastEmit_ISD_XOR_MVT_v1i64_rr(RetVT, Op0, Op1);
6442
0
  case MVT::v2i64: return fastEmit_ISD_XOR_MVT_v2i64_rr(RetVT, Op0, Op1);
6443
0
  default: return 0;
6444
0
  }
6445
0
}
6446
6447
// Top-level FastEmit function.
6448
6449
0
unsigned fastEmit_rr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, unsigned Op1) override {
6450
0
  switch (Opcode) {
6451
0
  case ARMISD::CMP: return fastEmit_ARMISD_CMP_rr(VT, RetVT, Op0, Op1);
6452
0
  case ARMISD::CMPFP: return fastEmit_ARMISD_CMPFP_rr(VT, RetVT, Op0, Op1);
6453
0
  case ARMISD::CMPFPE: return fastEmit_ARMISD_CMPFPE_rr(VT, RetVT, Op0, Op1);
6454
0
  case ARMISD::CMPZ: return fastEmit_ARMISD_CMPZ_rr(VT, RetVT, Op0, Op1);
6455
0
  case ARMISD::EH_SJLJ_LONGJMP: return fastEmit_ARMISD_EH_SJLJ_LONGJMP_rr(VT, RetVT, Op0, Op1);
6456
0
  case ARMISD::EH_SJLJ_SETJMP: return fastEmit_ARMISD_EH_SJLJ_SETJMP_rr(VT, RetVT, Op0, Op1);
6457
0
  case ARMISD::QADD16b: return fastEmit_ARMISD_QADD16b_rr(VT, RetVT, Op0, Op1);
6458
0
  case ARMISD::QADD8b: return fastEmit_ARMISD_QADD8b_rr(VT, RetVT, Op0, Op1);
6459
0
  case ARMISD::QSUB16b: return fastEmit_ARMISD_QSUB16b_rr(VT, RetVT, Op0, Op1);
6460
0
  case ARMISD::QSUB8b: return fastEmit_ARMISD_QSUB8b_rr(VT, RetVT, Op0, Op1);
6461
0
  case ARMISD::SMULWB: return fastEmit_ARMISD_SMULWB_rr(VT, RetVT, Op0, Op1);
6462
0
  case ARMISD::SMULWT: return fastEmit_ARMISD_SMULWT_rr(VT, RetVT, Op0, Op1);
6463
0
  case ARMISD::SUBS: return fastEmit_ARMISD_SUBS_rr(VT, RetVT, Op0, Op1);
6464
0
  case ARMISD::UQADD16b: return fastEmit_ARMISD_UQADD16b_rr(VT, RetVT, Op0, Op1);
6465
0
  case ARMISD::UQADD8b: return fastEmit_ARMISD_UQADD8b_rr(VT, RetVT, Op0, Op1);
6466
0
  case ARMISD::UQSUB16b: return fastEmit_ARMISD_UQSUB16b_rr(VT, RetVT, Op0, Op1);
6467
0
  case ARMISD::UQSUB8b: return fastEmit_ARMISD_UQSUB8b_rr(VT, RetVT, Op0, Op1);
6468
0
  case ARMISD::VMLAVs: return fastEmit_ARMISD_VMLAVs_rr(VT, RetVT, Op0, Op1);
6469
0
  case ARMISD::VMLAVu: return fastEmit_ARMISD_VMLAVu_rr(VT, RetVT, Op0, Op1);
6470
0
  case ARMISD::VMOVDRR: return fastEmit_ARMISD_VMOVDRR_rr(VT, RetVT, Op0, Op1);
6471
0
  case ARMISD::VMULLs: return fastEmit_ARMISD_VMULLs_rr(VT, RetVT, Op0, Op1);
6472
0
  case ARMISD::VMULLu: return fastEmit_ARMISD_VMULLu_rr(VT, RetVT, Op0, Op1);
6473
0
  case ARMISD::VQDMULH: return fastEmit_ARMISD_VQDMULH_rr(VT, RetVT, Op0, Op1);
6474
0
  case ARMISD::VSHLs: return fastEmit_ARMISD_VSHLs_rr(VT, RetVT, Op0, Op1);
6475
0
  case ARMISD::VSHLu: return fastEmit_ARMISD_VSHLu_rr(VT, RetVT, Op0, Op1);
6476
0
  case ARMISD::VTBL1: return fastEmit_ARMISD_VTBL1_rr(VT, RetVT, Op0, Op1);
6477
0
  case ARMISD::VTST: return fastEmit_ARMISD_VTST_rr(VT, RetVT, Op0, Op1);
6478
0
  case ISD::ABDS: return fastEmit_ISD_ABDS_rr(VT, RetVT, Op0, Op1);
6479
0
  case ISD::ABDU: return fastEmit_ISD_ABDU_rr(VT, RetVT, Op0, Op1);
6480
0
  case ISD::ADD: return fastEmit_ISD_ADD_rr(VT, RetVT, Op0, Op1);
6481
0
  case ISD::AND: return fastEmit_ISD_AND_rr(VT, RetVT, Op0, Op1);
6482
0
  case ISD::AVGCEILS: return fastEmit_ISD_AVGCEILS_rr(VT, RetVT, Op0, Op1);
6483
0
  case ISD::AVGCEILU: return fastEmit_ISD_AVGCEILU_rr(VT, RetVT, Op0, Op1);
6484
0
  case ISD::AVGFLOORS: return fastEmit_ISD_AVGFLOORS_rr(VT, RetVT, Op0, Op1);
6485
0
  case ISD::AVGFLOORU: return fastEmit_ISD_AVGFLOORU_rr(VT, RetVT, Op0, Op1);
6486
0
  case ISD::FADD: return fastEmit_ISD_FADD_rr(VT, RetVT, Op0, Op1);
6487
0
  case ISD::FDIV: return fastEmit_ISD_FDIV_rr(VT, RetVT, Op0, Op1);
6488
0
  case ISD::FMAXIMUM: return fastEmit_ISD_FMAXIMUM_rr(VT, RetVT, Op0, Op1);
6489
0
  case ISD::FMAXNUM: return fastEmit_ISD_FMAXNUM_rr(VT, RetVT, Op0, Op1);
6490
0
  case ISD::FMINIMUM: return fastEmit_ISD_FMINIMUM_rr(VT, RetVT, Op0, Op1);
6491
0
  case ISD::FMINNUM: return fastEmit_ISD_FMINNUM_rr(VT, RetVT, Op0, Op1);
6492
0
  case ISD::FMUL: return fastEmit_ISD_FMUL_rr(VT, RetVT, Op0, Op1);
6493
0
  case ISD::FSUB: return fastEmit_ISD_FSUB_rr(VT, RetVT, Op0, Op1);
6494
0
  case ISD::MUL: return fastEmit_ISD_MUL_rr(VT, RetVT, Op0, Op1);
6495
0
  case ISD::MULHS: return fastEmit_ISD_MULHS_rr(VT, RetVT, Op0, Op1);
6496
0
  case ISD::MULHU: return fastEmit_ISD_MULHU_rr(VT, RetVT, Op0, Op1);
6497
0
  case ISD::OR: return fastEmit_ISD_OR_rr(VT, RetVT, Op0, Op1);
6498
0
  case ISD::ROTR: return fastEmit_ISD_ROTR_rr(VT, RetVT, Op0, Op1);
6499
0
  case ISD::SADDSAT: return fastEmit_ISD_SADDSAT_rr(VT, RetVT, Op0, Op1);
6500
0
  case ISD::SDIV: return fastEmit_ISD_SDIV_rr(VT, RetVT, Op0, Op1);
6501
0
  case ISD::SHL: return fastEmit_ISD_SHL_rr(VT, RetVT, Op0, Op1);
6502
0
  case ISD::SMAX: return fastEmit_ISD_SMAX_rr(VT, RetVT, Op0, Op1);
6503
0
  case ISD::SMIN: return fastEmit_ISD_SMIN_rr(VT, RetVT, Op0, Op1);
6504
0
  case ISD::SRA: return fastEmit_ISD_SRA_rr(VT, RetVT, Op0, Op1);
6505
0
  case ISD::SRL: return fastEmit_ISD_SRL_rr(VT, RetVT, Op0, Op1);
6506
0
  case ISD::SSUBSAT: return fastEmit_ISD_SSUBSAT_rr(VT, RetVT, Op0, Op1);
6507
0
  case ISD::SUB: return fastEmit_ISD_SUB_rr(VT, RetVT, Op0, Op1);
6508
0
  case ISD::UADDSAT: return fastEmit_ISD_UADDSAT_rr(VT, RetVT, Op0, Op1);
6509
0
  case ISD::UDIV: return fastEmit_ISD_UDIV_rr(VT, RetVT, Op0, Op1);
6510
0
  case ISD::UMAX: return fastEmit_ISD_UMAX_rr(VT, RetVT, Op0, Op1);
6511
0
  case ISD::UMIN: return fastEmit_ISD_UMIN_rr(VT, RetVT, Op0, Op1);
6512
0
  case ISD::USUBSAT: return fastEmit_ISD_USUBSAT_rr(VT, RetVT, Op0, Op1);
6513
0
  case ISD::XOR: return fastEmit_ISD_XOR_rr(VT, RetVT, Op0, Op1);
6514
0
  default: return 0;
6515
0
  }
6516
0
}
6517
6518
// FastEmit functions for ARMISD::PIC_ADD.
6519
6520
0
unsigned fastEmit_ARMISD_PIC_ADD_MVT_i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6521
0
  if (RetVT.SimpleTy != MVT::i32)
6522
0
    return 0;
6523
0
  if ((Subtarget->isThumb())) {
6524
0
    return fastEmitInst_ri(ARM::tPICADD, &ARM::GPRRegClass, Op0, imm1);
6525
0
  }
6526
0
  if ((!Subtarget->isThumb())) {
6527
0
    return fastEmitInst_ri(ARM::PICADD, &ARM::GPRRegClass, Op0, imm1);
6528
0
  }
6529
0
  return 0;
6530
0
}
6531
6532
0
unsigned fastEmit_ARMISD_PIC_ADD_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6533
0
  switch (VT.SimpleTy) {
6534
0
  case MVT::i32: return fastEmit_ARMISD_PIC_ADD_MVT_i32_ri(RetVT, Op0, imm1);
6535
0
  default: return 0;
6536
0
  }
6537
0
}
6538
6539
// FastEmit functions for ARMISD::VDUPLANE.
6540
6541
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6542
0
  if (RetVT.SimpleTy != MVT::v8i8)
6543
0
    return 0;
6544
0
  if ((Subtarget->hasNEON())) {
6545
0
    return fastEmitInst_ri(ARM::VDUPLN8d, &ARM::DPRRegClass, Op0, imm1);
6546
0
  }
6547
0
  return 0;
6548
0
}
6549
6550
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6551
0
  if (RetVT.SimpleTy != MVT::v4i16)
6552
0
    return 0;
6553
0
  if ((Subtarget->hasNEON())) {
6554
0
    return fastEmitInst_ri(ARM::VDUPLN16d, &ARM::DPRRegClass, Op0, imm1);
6555
0
  }
6556
0
  return 0;
6557
0
}
6558
6559
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6560
0
  if (RetVT.SimpleTy != MVT::v2i32)
6561
0
    return 0;
6562
0
  if ((Subtarget->hasNEON())) {
6563
0
    return fastEmitInst_ri(ARM::VDUPLN32d, &ARM::DPRRegClass, Op0, imm1);
6564
0
  }
6565
0
  return 0;
6566
0
}
6567
6568
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v4f16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6569
0
  if (RetVT.SimpleTy != MVT::v4f16)
6570
0
    return 0;
6571
0
  if ((Subtarget->hasNEON())) {
6572
0
    return fastEmitInst_ri(ARM::VDUPLN16d, &ARM::DPRRegClass, Op0, imm1);
6573
0
  }
6574
0
  return 0;
6575
0
}
6576
6577
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v4bf16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6578
0
  if (RetVT.SimpleTy != MVT::v4bf16)
6579
0
    return 0;
6580
0
  if ((Subtarget->hasBF16()) && (Subtarget->hasNEON())) {
6581
0
    return fastEmitInst_ri(ARM::VDUPLN16d, &ARM::DPRRegClass, Op0, imm1);
6582
0
  }
6583
0
  return 0;
6584
0
}
6585
6586
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v2f32_MVT_v2f32_ri(unsigned Op0, uint64_t imm1) {
6587
0
  if ((Subtarget->hasNEON())) {
6588
0
    return fastEmitInst_ri(ARM::VDUPLN32d, &ARM::DPRRegClass, Op0, imm1);
6589
0
  }
6590
0
  return 0;
6591
0
}
6592
6593
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v2f32_MVT_v4f32_ri(unsigned Op0, uint64_t imm1) {
6594
0
  if ((Subtarget->hasNEON())) {
6595
0
    return fastEmitInst_ri(ARM::VDUPLN32q, &ARM::QPRRegClass, Op0, imm1);
6596
0
  }
6597
0
  return 0;
6598
0
}
6599
6600
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v2f32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6601
0
switch (RetVT.SimpleTy) {
6602
0
  case MVT::v2f32: return fastEmit_ARMISD_VDUPLANE_MVT_v2f32_MVT_v2f32_ri(Op0, imm1);
6603
0
  case MVT::v4f32: return fastEmit_ARMISD_VDUPLANE_MVT_v2f32_MVT_v4f32_ri(Op0, imm1);
6604
0
  default: return 0;
6605
0
}
6606
0
}
6607
6608
0
unsigned fastEmit_ARMISD_VDUPLANE_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6609
0
  switch (VT.SimpleTy) {
6610
0
  case MVT::v8i8: return fastEmit_ARMISD_VDUPLANE_MVT_v8i8_ri(RetVT, Op0, imm1);
6611
0
  case MVT::v4i16: return fastEmit_ARMISD_VDUPLANE_MVT_v4i16_ri(RetVT, Op0, imm1);
6612
0
  case MVT::v2i32: return fastEmit_ARMISD_VDUPLANE_MVT_v2i32_ri(RetVT, Op0, imm1);
6613
0
  case MVT::v4f16: return fastEmit_ARMISD_VDUPLANE_MVT_v4f16_ri(RetVT, Op0, imm1);
6614
0
  case MVT::v4bf16: return fastEmit_ARMISD_VDUPLANE_MVT_v4bf16_ri(RetVT, Op0, imm1);
6615
0
  case MVT::v2f32: return fastEmit_ARMISD_VDUPLANE_MVT_v2f32_ri(RetVT, Op0, imm1);
6616
0
  default: return 0;
6617
0
  }
6618
0
}
6619
6620
// FastEmit functions for ARMISD::VGETLANEs.
6621
6622
0
unsigned fastEmit_ARMISD_VGETLANEs_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6623
0
  if (RetVT.SimpleTy != MVT::i32)
6624
0
    return 0;
6625
0
  if ((Subtarget->hasNEON())) {
6626
0
    return fastEmitInst_ri(ARM::VGETLNs8, &ARM::GPRRegClass, Op0, imm1);
6627
0
  }
6628
0
  return 0;
6629
0
}
6630
6631
0
unsigned fastEmit_ARMISD_VGETLANEs_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6632
0
  if (RetVT.SimpleTy != MVT::i32)
6633
0
    return 0;
6634
0
  if ((Subtarget->hasMVEIntegerOps())) {
6635
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_s8, &ARM::rGPRRegClass, Op0, imm1);
6636
0
  }
6637
0
  return 0;
6638
0
}
6639
6640
0
unsigned fastEmit_ARMISD_VGETLANEs_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6641
0
  if (RetVT.SimpleTy != MVT::i32)
6642
0
    return 0;
6643
0
  if ((Subtarget->hasNEON())) {
6644
0
    return fastEmitInst_ri(ARM::VGETLNs16, &ARM::GPRRegClass, Op0, imm1);
6645
0
  }
6646
0
  return 0;
6647
0
}
6648
6649
0
unsigned fastEmit_ARMISD_VGETLANEs_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6650
0
  if (RetVT.SimpleTy != MVT::i32)
6651
0
    return 0;
6652
0
  if ((Subtarget->hasMVEIntegerOps())) {
6653
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_s16, &ARM::rGPRRegClass, Op0, imm1);
6654
0
  }
6655
0
  return 0;
6656
0
}
6657
6658
0
unsigned fastEmit_ARMISD_VGETLANEs_MVT_v8f16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6659
0
  if (RetVT.SimpleTy != MVT::i32)
6660
0
    return 0;
6661
0
  if ((Subtarget->hasMVEIntegerOps())) {
6662
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_s16, &ARM::rGPRRegClass, Op0, imm1);
6663
0
  }
6664
0
  return 0;
6665
0
}
6666
6667
0
unsigned fastEmit_ARMISD_VGETLANEs_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6668
0
  switch (VT.SimpleTy) {
6669
0
  case MVT::v8i8: return fastEmit_ARMISD_VGETLANEs_MVT_v8i8_ri(RetVT, Op0, imm1);
6670
0
  case MVT::v16i8: return fastEmit_ARMISD_VGETLANEs_MVT_v16i8_ri(RetVT, Op0, imm1);
6671
0
  case MVT::v4i16: return fastEmit_ARMISD_VGETLANEs_MVT_v4i16_ri(RetVT, Op0, imm1);
6672
0
  case MVT::v8i16: return fastEmit_ARMISD_VGETLANEs_MVT_v8i16_ri(RetVT, Op0, imm1);
6673
0
  case MVT::v8f16: return fastEmit_ARMISD_VGETLANEs_MVT_v8f16_ri(RetVT, Op0, imm1);
6674
0
  default: return 0;
6675
0
  }
6676
0
}
6677
6678
// FastEmit functions for ARMISD::VGETLANEu.
6679
6680
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6681
0
  if (RetVT.SimpleTy != MVT::i32)
6682
0
    return 0;
6683
0
  if ((Subtarget->hasNEON())) {
6684
0
    return fastEmitInst_ri(ARM::VGETLNu8, &ARM::GPRRegClass, Op0, imm1);
6685
0
  }
6686
0
  return 0;
6687
0
}
6688
6689
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6690
0
  if (RetVT.SimpleTy != MVT::i32)
6691
0
    return 0;
6692
0
  if ((Subtarget->hasMVEIntegerOps())) {
6693
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_u8, &ARM::rGPRRegClass, Op0, imm1);
6694
0
  }
6695
0
  return 0;
6696
0
}
6697
6698
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6699
0
  if (RetVT.SimpleTy != MVT::i32)
6700
0
    return 0;
6701
0
  if ((Subtarget->hasNEON())) {
6702
0
    return fastEmitInst_ri(ARM::VGETLNu16, &ARM::GPRRegClass, Op0, imm1);
6703
0
  }
6704
0
  return 0;
6705
0
}
6706
6707
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6708
0
  if (RetVT.SimpleTy != MVT::i32)
6709
0
    return 0;
6710
0
  if ((Subtarget->hasMVEIntegerOps())) {
6711
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_u16, &ARM::rGPRRegClass, Op0, imm1);
6712
0
  }
6713
0
  return 0;
6714
0
}
6715
6716
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v4f16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6717
0
  if (RetVT.SimpleTy != MVT::i32)
6718
0
    return 0;
6719
0
  if ((Subtarget->hasNEON())) {
6720
0
    return fastEmitInst_ri(ARM::VGETLNu16, &ARM::GPRRegClass, Op0, imm1);
6721
0
  }
6722
0
  return 0;
6723
0
}
6724
6725
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v8f16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6726
0
  if (RetVT.SimpleTy != MVT::i32)
6727
0
    return 0;
6728
0
  if ((Subtarget->hasMVEIntegerOps())) {
6729
0
    return fastEmitInst_ri(ARM::MVE_VMOV_from_lane_u16, &ARM::rGPRRegClass, Op0, imm1);
6730
0
  }
6731
0
  return 0;
6732
0
}
6733
6734
0
unsigned fastEmit_ARMISD_VGETLANEu_MVT_v4bf16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6735
0
  if (RetVT.SimpleTy != MVT::i32)
6736
0
    return 0;
6737
0
  if ((Subtarget->hasNEON())) {
6738
0
    return fastEmitInst_ri(ARM::VGETLNu16, &ARM::GPRRegClass, Op0, imm1);
6739
0
  }
6740
0
  return 0;
6741
0
}
6742
6743
0
unsigned fastEmit_ARMISD_VGETLANEu_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6744
0
  switch (VT.SimpleTy) {
6745
0
  case MVT::v8i8: return fastEmit_ARMISD_VGETLANEu_MVT_v8i8_ri(RetVT, Op0, imm1);
6746
0
  case MVT::v16i8: return fastEmit_ARMISD_VGETLANEu_MVT_v16i8_ri(RetVT, Op0, imm1);
6747
0
  case MVT::v4i16: return fastEmit_ARMISD_VGETLANEu_MVT_v4i16_ri(RetVT, Op0, imm1);
6748
0
  case MVT::v8i16: return fastEmit_ARMISD_VGETLANEu_MVT_v8i16_ri(RetVT, Op0, imm1);
6749
0
  case MVT::v4f16: return fastEmit_ARMISD_VGETLANEu_MVT_v4f16_ri(RetVT, Op0, imm1);
6750
0
  case MVT::v8f16: return fastEmit_ARMISD_VGETLANEu_MVT_v8f16_ri(RetVT, Op0, imm1);
6751
0
  case MVT::v4bf16: return fastEmit_ARMISD_VGETLANEu_MVT_v4bf16_ri(RetVT, Op0, imm1);
6752
0
  default: return 0;
6753
0
  }
6754
0
}
6755
6756
// FastEmit functions for ARMISD::VQSHLsIMM.
6757
6758
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6759
0
  if (RetVT.SimpleTy != MVT::v8i8)
6760
0
    return 0;
6761
0
  if ((Subtarget->hasNEON())) {
6762
0
    return fastEmitInst_ri(ARM::VQSHLsiv8i8, &ARM::DPRRegClass, Op0, imm1);
6763
0
  }
6764
0
  return 0;
6765
0
}
6766
6767
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6768
0
  if (RetVT.SimpleTy != MVT::v16i8)
6769
0
    return 0;
6770
0
  if ((Subtarget->hasNEON())) {
6771
0
    return fastEmitInst_ri(ARM::VQSHLsiv16i8, &ARM::QPRRegClass, Op0, imm1);
6772
0
  }
6773
0
  return 0;
6774
0
}
6775
6776
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6777
0
  if (RetVT.SimpleTy != MVT::v4i16)
6778
0
    return 0;
6779
0
  if ((Subtarget->hasNEON())) {
6780
0
    return fastEmitInst_ri(ARM::VQSHLsiv4i16, &ARM::DPRRegClass, Op0, imm1);
6781
0
  }
6782
0
  return 0;
6783
0
}
6784
6785
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6786
0
  if (RetVT.SimpleTy != MVT::v8i16)
6787
0
    return 0;
6788
0
  if ((Subtarget->hasNEON())) {
6789
0
    return fastEmitInst_ri(ARM::VQSHLsiv8i16, &ARM::QPRRegClass, Op0, imm1);
6790
0
  }
6791
0
  return 0;
6792
0
}
6793
6794
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6795
0
  if (RetVT.SimpleTy != MVT::v2i32)
6796
0
    return 0;
6797
0
  if ((Subtarget->hasNEON())) {
6798
0
    return fastEmitInst_ri(ARM::VQSHLsiv2i32, &ARM::DPRRegClass, Op0, imm1);
6799
0
  }
6800
0
  return 0;
6801
0
}
6802
6803
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6804
0
  if (RetVT.SimpleTy != MVT::v4i32)
6805
0
    return 0;
6806
0
  if ((Subtarget->hasNEON())) {
6807
0
    return fastEmitInst_ri(ARM::VQSHLsiv4i32, &ARM::QPRRegClass, Op0, imm1);
6808
0
  }
6809
0
  return 0;
6810
0
}
6811
6812
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6813
0
  if (RetVT.SimpleTy != MVT::v1i64)
6814
0
    return 0;
6815
0
  if ((Subtarget->hasNEON())) {
6816
0
    return fastEmitInst_ri(ARM::VQSHLsiv1i64, &ARM::DPRRegClass, Op0, imm1);
6817
0
  }
6818
0
  return 0;
6819
0
}
6820
6821
0
unsigned fastEmit_ARMISD_VQSHLsIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6822
0
  if (RetVT.SimpleTy != MVT::v2i64)
6823
0
    return 0;
6824
0
  if ((Subtarget->hasNEON())) {
6825
0
    return fastEmitInst_ri(ARM::VQSHLsiv2i64, &ARM::QPRRegClass, Op0, imm1);
6826
0
  }
6827
0
  return 0;
6828
0
}
6829
6830
0
unsigned fastEmit_ARMISD_VQSHLsIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6831
0
  switch (VT.SimpleTy) {
6832
0
  case MVT::v8i8: return fastEmit_ARMISD_VQSHLsIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
6833
0
  case MVT::v16i8: return fastEmit_ARMISD_VQSHLsIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
6834
0
  case MVT::v4i16: return fastEmit_ARMISD_VQSHLsIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
6835
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHLsIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
6836
0
  case MVT::v2i32: return fastEmit_ARMISD_VQSHLsIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
6837
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHLsIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
6838
0
  case MVT::v1i64: return fastEmit_ARMISD_VQSHLsIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
6839
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHLsIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
6840
0
  default: return 0;
6841
0
  }
6842
0
}
6843
6844
// FastEmit functions for ARMISD::VQSHLsuIMM.
6845
6846
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6847
0
  if (RetVT.SimpleTy != MVT::v8i8)
6848
0
    return 0;
6849
0
  if ((Subtarget->hasNEON())) {
6850
0
    return fastEmitInst_ri(ARM::VQSHLsuv8i8, &ARM::DPRRegClass, Op0, imm1);
6851
0
  }
6852
0
  return 0;
6853
0
}
6854
6855
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6856
0
  if (RetVT.SimpleTy != MVT::v16i8)
6857
0
    return 0;
6858
0
  if ((Subtarget->hasNEON())) {
6859
0
    return fastEmitInst_ri(ARM::VQSHLsuv16i8, &ARM::QPRRegClass, Op0, imm1);
6860
0
  }
6861
0
  return 0;
6862
0
}
6863
6864
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6865
0
  if (RetVT.SimpleTy != MVT::v4i16)
6866
0
    return 0;
6867
0
  if ((Subtarget->hasNEON())) {
6868
0
    return fastEmitInst_ri(ARM::VQSHLsuv4i16, &ARM::DPRRegClass, Op0, imm1);
6869
0
  }
6870
0
  return 0;
6871
0
}
6872
6873
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6874
0
  if (RetVT.SimpleTy != MVT::v8i16)
6875
0
    return 0;
6876
0
  if ((Subtarget->hasNEON())) {
6877
0
    return fastEmitInst_ri(ARM::VQSHLsuv8i16, &ARM::QPRRegClass, Op0, imm1);
6878
0
  }
6879
0
  return 0;
6880
0
}
6881
6882
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6883
0
  if (RetVT.SimpleTy != MVT::v2i32)
6884
0
    return 0;
6885
0
  if ((Subtarget->hasNEON())) {
6886
0
    return fastEmitInst_ri(ARM::VQSHLsuv2i32, &ARM::DPRRegClass, Op0, imm1);
6887
0
  }
6888
0
  return 0;
6889
0
}
6890
6891
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6892
0
  if (RetVT.SimpleTy != MVT::v4i32)
6893
0
    return 0;
6894
0
  if ((Subtarget->hasNEON())) {
6895
0
    return fastEmitInst_ri(ARM::VQSHLsuv4i32, &ARM::QPRRegClass, Op0, imm1);
6896
0
  }
6897
0
  return 0;
6898
0
}
6899
6900
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6901
0
  if (RetVT.SimpleTy != MVT::v1i64)
6902
0
    return 0;
6903
0
  if ((Subtarget->hasNEON())) {
6904
0
    return fastEmitInst_ri(ARM::VQSHLsuv1i64, &ARM::DPRRegClass, Op0, imm1);
6905
0
  }
6906
0
  return 0;
6907
0
}
6908
6909
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6910
0
  if (RetVT.SimpleTy != MVT::v2i64)
6911
0
    return 0;
6912
0
  if ((Subtarget->hasNEON())) {
6913
0
    return fastEmitInst_ri(ARM::VQSHLsuv2i64, &ARM::QPRRegClass, Op0, imm1);
6914
0
  }
6915
0
  return 0;
6916
0
}
6917
6918
0
unsigned fastEmit_ARMISD_VQSHLsuIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
6919
0
  switch (VT.SimpleTy) {
6920
0
  case MVT::v8i8: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
6921
0
  case MVT::v16i8: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
6922
0
  case MVT::v4i16: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
6923
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
6924
0
  case MVT::v2i32: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
6925
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
6926
0
  case MVT::v1i64: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
6927
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHLsuIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
6928
0
  default: return 0;
6929
0
  }
6930
0
}
6931
6932
// FastEmit functions for ARMISD::VQSHLuIMM.
6933
6934
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6935
0
  if (RetVT.SimpleTy != MVT::v8i8)
6936
0
    return 0;
6937
0
  if ((Subtarget->hasNEON())) {
6938
0
    return fastEmitInst_ri(ARM::VQSHLuiv8i8, &ARM::DPRRegClass, Op0, imm1);
6939
0
  }
6940
0
  return 0;
6941
0
}
6942
6943
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6944
0
  if (RetVT.SimpleTy != MVT::v16i8)
6945
0
    return 0;
6946
0
  if ((Subtarget->hasNEON())) {
6947
0
    return fastEmitInst_ri(ARM::VQSHLuiv16i8, &ARM::QPRRegClass, Op0, imm1);
6948
0
  }
6949
0
  return 0;
6950
0
}
6951
6952
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6953
0
  if (RetVT.SimpleTy != MVT::v4i16)
6954
0
    return 0;
6955
0
  if ((Subtarget->hasNEON())) {
6956
0
    return fastEmitInst_ri(ARM::VQSHLuiv4i16, &ARM::DPRRegClass, Op0, imm1);
6957
0
  }
6958
0
  return 0;
6959
0
}
6960
6961
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6962
0
  if (RetVT.SimpleTy != MVT::v8i16)
6963
0
    return 0;
6964
0
  if ((Subtarget->hasNEON())) {
6965
0
    return fastEmitInst_ri(ARM::VQSHLuiv8i16, &ARM::QPRRegClass, Op0, imm1);
6966
0
  }
6967
0
  return 0;
6968
0
}
6969
6970
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6971
0
  if (RetVT.SimpleTy != MVT::v2i32)
6972
0
    return 0;
6973
0
  if ((Subtarget->hasNEON())) {
6974
0
    return fastEmitInst_ri(ARM::VQSHLuiv2i32, &ARM::DPRRegClass, Op0, imm1);
6975
0
  }
6976
0
  return 0;
6977
0
}
6978
6979
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6980
0
  if (RetVT.SimpleTy != MVT::v4i32)
6981
0
    return 0;
6982
0
  if ((Subtarget->hasNEON())) {
6983
0
    return fastEmitInst_ri(ARM::VQSHLuiv4i32, &ARM::QPRRegClass, Op0, imm1);
6984
0
  }
6985
0
  return 0;
6986
0
}
6987
6988
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6989
0
  if (RetVT.SimpleTy != MVT::v1i64)
6990
0
    return 0;
6991
0
  if ((Subtarget->hasNEON())) {
6992
0
    return fastEmitInst_ri(ARM::VQSHLuiv1i64, &ARM::DPRRegClass, Op0, imm1);
6993
0
  }
6994
0
  return 0;
6995
0
}
6996
6997
0
unsigned fastEmit_ARMISD_VQSHLuIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
6998
0
  if (RetVT.SimpleTy != MVT::v2i64)
6999
0
    return 0;
7000
0
  if ((Subtarget->hasNEON())) {
7001
0
    return fastEmitInst_ri(ARM::VQSHLuiv2i64, &ARM::QPRRegClass, Op0, imm1);
7002
0
  }
7003
0
  return 0;
7004
0
}
7005
7006
0
unsigned fastEmit_ARMISD_VQSHLuIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7007
0
  switch (VT.SimpleTy) {
7008
0
  case MVT::v8i8: return fastEmit_ARMISD_VQSHLuIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7009
0
  case MVT::v16i8: return fastEmit_ARMISD_VQSHLuIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7010
0
  case MVT::v4i16: return fastEmit_ARMISD_VQSHLuIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7011
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHLuIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7012
0
  case MVT::v2i32: return fastEmit_ARMISD_VQSHLuIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7013
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHLuIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7014
0
  case MVT::v1i64: return fastEmit_ARMISD_VQSHLuIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7015
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHLuIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7016
0
  default: return 0;
7017
0
  }
7018
0
}
7019
7020
// FastEmit functions for ARMISD::VRSHRsIMM.
7021
7022
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7023
0
  if (RetVT.SimpleTy != MVT::v8i8)
7024
0
    return 0;
7025
0
  if ((Subtarget->hasNEON())) {
7026
0
    return fastEmitInst_ri(ARM::VRSHRsv8i8, &ARM::DPRRegClass, Op0, imm1);
7027
0
  }
7028
0
  return 0;
7029
0
}
7030
7031
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7032
0
  if (RetVT.SimpleTy != MVT::v16i8)
7033
0
    return 0;
7034
0
  if ((Subtarget->hasNEON())) {
7035
0
    return fastEmitInst_ri(ARM::VRSHRsv16i8, &ARM::QPRRegClass, Op0, imm1);
7036
0
  }
7037
0
  return 0;
7038
0
}
7039
7040
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7041
0
  if (RetVT.SimpleTy != MVT::v4i16)
7042
0
    return 0;
7043
0
  if ((Subtarget->hasNEON())) {
7044
0
    return fastEmitInst_ri(ARM::VRSHRsv4i16, &ARM::DPRRegClass, Op0, imm1);
7045
0
  }
7046
0
  return 0;
7047
0
}
7048
7049
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7050
0
  if (RetVT.SimpleTy != MVT::v8i16)
7051
0
    return 0;
7052
0
  if ((Subtarget->hasNEON())) {
7053
0
    return fastEmitInst_ri(ARM::VRSHRsv8i16, &ARM::QPRRegClass, Op0, imm1);
7054
0
  }
7055
0
  return 0;
7056
0
}
7057
7058
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7059
0
  if (RetVT.SimpleTy != MVT::v2i32)
7060
0
    return 0;
7061
0
  if ((Subtarget->hasNEON())) {
7062
0
    return fastEmitInst_ri(ARM::VRSHRsv2i32, &ARM::DPRRegClass, Op0, imm1);
7063
0
  }
7064
0
  return 0;
7065
0
}
7066
7067
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7068
0
  if (RetVT.SimpleTy != MVT::v4i32)
7069
0
    return 0;
7070
0
  if ((Subtarget->hasNEON())) {
7071
0
    return fastEmitInst_ri(ARM::VRSHRsv4i32, &ARM::QPRRegClass, Op0, imm1);
7072
0
  }
7073
0
  return 0;
7074
0
}
7075
7076
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7077
0
  if (RetVT.SimpleTy != MVT::v1i64)
7078
0
    return 0;
7079
0
  if ((Subtarget->hasNEON())) {
7080
0
    return fastEmitInst_ri(ARM::VRSHRsv1i64, &ARM::DPRRegClass, Op0, imm1);
7081
0
  }
7082
0
  return 0;
7083
0
}
7084
7085
0
unsigned fastEmit_ARMISD_VRSHRsIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7086
0
  if (RetVT.SimpleTy != MVT::v2i64)
7087
0
    return 0;
7088
0
  if ((Subtarget->hasNEON())) {
7089
0
    return fastEmitInst_ri(ARM::VRSHRsv2i64, &ARM::QPRRegClass, Op0, imm1);
7090
0
  }
7091
0
  return 0;
7092
0
}
7093
7094
0
unsigned fastEmit_ARMISD_VRSHRsIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7095
0
  switch (VT.SimpleTy) {
7096
0
  case MVT::v8i8: return fastEmit_ARMISD_VRSHRsIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7097
0
  case MVT::v16i8: return fastEmit_ARMISD_VRSHRsIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7098
0
  case MVT::v4i16: return fastEmit_ARMISD_VRSHRsIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7099
0
  case MVT::v8i16: return fastEmit_ARMISD_VRSHRsIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7100
0
  case MVT::v2i32: return fastEmit_ARMISD_VRSHRsIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7101
0
  case MVT::v4i32: return fastEmit_ARMISD_VRSHRsIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7102
0
  case MVT::v1i64: return fastEmit_ARMISD_VRSHRsIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7103
0
  case MVT::v2i64: return fastEmit_ARMISD_VRSHRsIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7104
0
  default: return 0;
7105
0
  }
7106
0
}
7107
7108
// FastEmit functions for ARMISD::VRSHRuIMM.
7109
7110
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7111
0
  if (RetVT.SimpleTy != MVT::v8i8)
7112
0
    return 0;
7113
0
  if ((Subtarget->hasNEON())) {
7114
0
    return fastEmitInst_ri(ARM::VRSHRuv8i8, &ARM::DPRRegClass, Op0, imm1);
7115
0
  }
7116
0
  return 0;
7117
0
}
7118
7119
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7120
0
  if (RetVT.SimpleTy != MVT::v16i8)
7121
0
    return 0;
7122
0
  if ((Subtarget->hasNEON())) {
7123
0
    return fastEmitInst_ri(ARM::VRSHRuv16i8, &ARM::QPRRegClass, Op0, imm1);
7124
0
  }
7125
0
  return 0;
7126
0
}
7127
7128
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7129
0
  if (RetVT.SimpleTy != MVT::v4i16)
7130
0
    return 0;
7131
0
  if ((Subtarget->hasNEON())) {
7132
0
    return fastEmitInst_ri(ARM::VRSHRuv4i16, &ARM::DPRRegClass, Op0, imm1);
7133
0
  }
7134
0
  return 0;
7135
0
}
7136
7137
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7138
0
  if (RetVT.SimpleTy != MVT::v8i16)
7139
0
    return 0;
7140
0
  if ((Subtarget->hasNEON())) {
7141
0
    return fastEmitInst_ri(ARM::VRSHRuv8i16, &ARM::QPRRegClass, Op0, imm1);
7142
0
  }
7143
0
  return 0;
7144
0
}
7145
7146
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7147
0
  if (RetVT.SimpleTy != MVT::v2i32)
7148
0
    return 0;
7149
0
  if ((Subtarget->hasNEON())) {
7150
0
    return fastEmitInst_ri(ARM::VRSHRuv2i32, &ARM::DPRRegClass, Op0, imm1);
7151
0
  }
7152
0
  return 0;
7153
0
}
7154
7155
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7156
0
  if (RetVT.SimpleTy != MVT::v4i32)
7157
0
    return 0;
7158
0
  if ((Subtarget->hasNEON())) {
7159
0
    return fastEmitInst_ri(ARM::VRSHRuv4i32, &ARM::QPRRegClass, Op0, imm1);
7160
0
  }
7161
0
  return 0;
7162
0
}
7163
7164
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7165
0
  if (RetVT.SimpleTy != MVT::v1i64)
7166
0
    return 0;
7167
0
  if ((Subtarget->hasNEON())) {
7168
0
    return fastEmitInst_ri(ARM::VRSHRuv1i64, &ARM::DPRRegClass, Op0, imm1);
7169
0
  }
7170
0
  return 0;
7171
0
}
7172
7173
0
unsigned fastEmit_ARMISD_VRSHRuIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7174
0
  if (RetVT.SimpleTy != MVT::v2i64)
7175
0
    return 0;
7176
0
  if ((Subtarget->hasNEON())) {
7177
0
    return fastEmitInst_ri(ARM::VRSHRuv2i64, &ARM::QPRRegClass, Op0, imm1);
7178
0
  }
7179
0
  return 0;
7180
0
}
7181
7182
0
unsigned fastEmit_ARMISD_VRSHRuIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7183
0
  switch (VT.SimpleTy) {
7184
0
  case MVT::v8i8: return fastEmit_ARMISD_VRSHRuIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7185
0
  case MVT::v16i8: return fastEmit_ARMISD_VRSHRuIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7186
0
  case MVT::v4i16: return fastEmit_ARMISD_VRSHRuIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7187
0
  case MVT::v8i16: return fastEmit_ARMISD_VRSHRuIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7188
0
  case MVT::v2i32: return fastEmit_ARMISD_VRSHRuIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7189
0
  case MVT::v4i32: return fastEmit_ARMISD_VRSHRuIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7190
0
  case MVT::v1i64: return fastEmit_ARMISD_VRSHRuIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7191
0
  case MVT::v2i64: return fastEmit_ARMISD_VRSHRuIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7192
0
  default: return 0;
7193
0
  }
7194
0
}
7195
7196
// FastEmit functions for ARMISD::VSHLIMM.
7197
7198
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7199
0
  if (RetVT.SimpleTy != MVT::v8i8)
7200
0
    return 0;
7201
0
  if ((Subtarget->hasNEON())) {
7202
0
    return fastEmitInst_ri(ARM::VSHLiv8i8, &ARM::DPRRegClass, Op0, imm1);
7203
0
  }
7204
0
  return 0;
7205
0
}
7206
7207
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7208
0
  if (RetVT.SimpleTy != MVT::v16i8)
7209
0
    return 0;
7210
0
  if ((Subtarget->hasNEON())) {
7211
0
    return fastEmitInst_ri(ARM::VSHLiv16i8, &ARM::QPRRegClass, Op0, imm1);
7212
0
  }
7213
0
  return 0;
7214
0
}
7215
7216
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7217
0
  if (RetVT.SimpleTy != MVT::v4i16)
7218
0
    return 0;
7219
0
  if ((Subtarget->hasNEON())) {
7220
0
    return fastEmitInst_ri(ARM::VSHLiv4i16, &ARM::DPRRegClass, Op0, imm1);
7221
0
  }
7222
0
  return 0;
7223
0
}
7224
7225
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7226
0
  if (RetVT.SimpleTy != MVT::v8i16)
7227
0
    return 0;
7228
0
  if ((Subtarget->hasNEON())) {
7229
0
    return fastEmitInst_ri(ARM::VSHLiv8i16, &ARM::QPRRegClass, Op0, imm1);
7230
0
  }
7231
0
  return 0;
7232
0
}
7233
7234
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7235
0
  if (RetVT.SimpleTy != MVT::v2i32)
7236
0
    return 0;
7237
0
  if ((Subtarget->hasNEON())) {
7238
0
    return fastEmitInst_ri(ARM::VSHLiv2i32, &ARM::DPRRegClass, Op0, imm1);
7239
0
  }
7240
0
  return 0;
7241
0
}
7242
7243
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7244
0
  if (RetVT.SimpleTy != MVT::v4i32)
7245
0
    return 0;
7246
0
  if ((Subtarget->hasNEON())) {
7247
0
    return fastEmitInst_ri(ARM::VSHLiv4i32, &ARM::QPRRegClass, Op0, imm1);
7248
0
  }
7249
0
  return 0;
7250
0
}
7251
7252
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7253
0
  if (RetVT.SimpleTy != MVT::v1i64)
7254
0
    return 0;
7255
0
  if ((Subtarget->hasNEON())) {
7256
0
    return fastEmitInst_ri(ARM::VSHLiv1i64, &ARM::DPRRegClass, Op0, imm1);
7257
0
  }
7258
0
  return 0;
7259
0
}
7260
7261
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7262
0
  if (RetVT.SimpleTy != MVT::v2i64)
7263
0
    return 0;
7264
0
  if ((Subtarget->hasNEON())) {
7265
0
    return fastEmitInst_ri(ARM::VSHLiv2i64, &ARM::QPRRegClass, Op0, imm1);
7266
0
  }
7267
0
  return 0;
7268
0
}
7269
7270
0
unsigned fastEmit_ARMISD_VSHLIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7271
0
  switch (VT.SimpleTy) {
7272
0
  case MVT::v8i8: return fastEmit_ARMISD_VSHLIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7273
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHLIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7274
0
  case MVT::v4i16: return fastEmit_ARMISD_VSHLIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7275
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHLIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7276
0
  case MVT::v2i32: return fastEmit_ARMISD_VSHLIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7277
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHLIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7278
0
  case MVT::v1i64: return fastEmit_ARMISD_VSHLIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7279
0
  case MVT::v2i64: return fastEmit_ARMISD_VSHLIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7280
0
  default: return 0;
7281
0
  }
7282
0
}
7283
7284
// FastEmit functions for ARMISD::VSHRsIMM.
7285
7286
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7287
0
  if (RetVT.SimpleTy != MVT::v8i8)
7288
0
    return 0;
7289
0
  if ((Subtarget->hasNEON())) {
7290
0
    return fastEmitInst_ri(ARM::VSHRsv8i8, &ARM::DPRRegClass, Op0, imm1);
7291
0
  }
7292
0
  return 0;
7293
0
}
7294
7295
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7296
0
  if (RetVT.SimpleTy != MVT::v16i8)
7297
0
    return 0;
7298
0
  if ((Subtarget->hasNEON())) {
7299
0
    return fastEmitInst_ri(ARM::VSHRsv16i8, &ARM::QPRRegClass, Op0, imm1);
7300
0
  }
7301
0
  return 0;
7302
0
}
7303
7304
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7305
0
  if (RetVT.SimpleTy != MVT::v4i16)
7306
0
    return 0;
7307
0
  if ((Subtarget->hasNEON())) {
7308
0
    return fastEmitInst_ri(ARM::VSHRsv4i16, &ARM::DPRRegClass, Op0, imm1);
7309
0
  }
7310
0
  return 0;
7311
0
}
7312
7313
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7314
0
  if (RetVT.SimpleTy != MVT::v8i16)
7315
0
    return 0;
7316
0
  if ((Subtarget->hasNEON())) {
7317
0
    return fastEmitInst_ri(ARM::VSHRsv8i16, &ARM::QPRRegClass, Op0, imm1);
7318
0
  }
7319
0
  return 0;
7320
0
}
7321
7322
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7323
0
  if (RetVT.SimpleTy != MVT::v2i32)
7324
0
    return 0;
7325
0
  if ((Subtarget->hasNEON())) {
7326
0
    return fastEmitInst_ri(ARM::VSHRsv2i32, &ARM::DPRRegClass, Op0, imm1);
7327
0
  }
7328
0
  return 0;
7329
0
}
7330
7331
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7332
0
  if (RetVT.SimpleTy != MVT::v4i32)
7333
0
    return 0;
7334
0
  if ((Subtarget->hasNEON())) {
7335
0
    return fastEmitInst_ri(ARM::VSHRsv4i32, &ARM::QPRRegClass, Op0, imm1);
7336
0
  }
7337
0
  return 0;
7338
0
}
7339
7340
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7341
0
  if (RetVT.SimpleTy != MVT::v1i64)
7342
0
    return 0;
7343
0
  if ((Subtarget->hasNEON())) {
7344
0
    return fastEmitInst_ri(ARM::VSHRsv1i64, &ARM::DPRRegClass, Op0, imm1);
7345
0
  }
7346
0
  return 0;
7347
0
}
7348
7349
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7350
0
  if (RetVT.SimpleTy != MVT::v2i64)
7351
0
    return 0;
7352
0
  if ((Subtarget->hasNEON())) {
7353
0
    return fastEmitInst_ri(ARM::VSHRsv2i64, &ARM::QPRRegClass, Op0, imm1);
7354
0
  }
7355
0
  return 0;
7356
0
}
7357
7358
0
unsigned fastEmit_ARMISD_VSHRsIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7359
0
  switch (VT.SimpleTy) {
7360
0
  case MVT::v8i8: return fastEmit_ARMISD_VSHRsIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7361
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHRsIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7362
0
  case MVT::v4i16: return fastEmit_ARMISD_VSHRsIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7363
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHRsIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7364
0
  case MVT::v2i32: return fastEmit_ARMISD_VSHRsIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7365
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHRsIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7366
0
  case MVT::v1i64: return fastEmit_ARMISD_VSHRsIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7367
0
  case MVT::v2i64: return fastEmit_ARMISD_VSHRsIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7368
0
  default: return 0;
7369
0
  }
7370
0
}
7371
7372
// FastEmit functions for ARMISD::VSHRuIMM.
7373
7374
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v8i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7375
0
  if (RetVT.SimpleTy != MVT::v8i8)
7376
0
    return 0;
7377
0
  if ((Subtarget->hasNEON())) {
7378
0
    return fastEmitInst_ri(ARM::VSHRuv8i8, &ARM::DPRRegClass, Op0, imm1);
7379
0
  }
7380
0
  return 0;
7381
0
}
7382
7383
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v16i8_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7384
0
  if (RetVT.SimpleTy != MVT::v16i8)
7385
0
    return 0;
7386
0
  if ((Subtarget->hasNEON())) {
7387
0
    return fastEmitInst_ri(ARM::VSHRuv16i8, &ARM::QPRRegClass, Op0, imm1);
7388
0
  }
7389
0
  return 0;
7390
0
}
7391
7392
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v4i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7393
0
  if (RetVT.SimpleTy != MVT::v4i16)
7394
0
    return 0;
7395
0
  if ((Subtarget->hasNEON())) {
7396
0
    return fastEmitInst_ri(ARM::VSHRuv4i16, &ARM::DPRRegClass, Op0, imm1);
7397
0
  }
7398
0
  return 0;
7399
0
}
7400
7401
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v8i16_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7402
0
  if (RetVT.SimpleTy != MVT::v8i16)
7403
0
    return 0;
7404
0
  if ((Subtarget->hasNEON())) {
7405
0
    return fastEmitInst_ri(ARM::VSHRuv8i16, &ARM::QPRRegClass, Op0, imm1);
7406
0
  }
7407
0
  return 0;
7408
0
}
7409
7410
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7411
0
  if (RetVT.SimpleTy != MVT::v2i32)
7412
0
    return 0;
7413
0
  if ((Subtarget->hasNEON())) {
7414
0
    return fastEmitInst_ri(ARM::VSHRuv2i32, &ARM::DPRRegClass, Op0, imm1);
7415
0
  }
7416
0
  return 0;
7417
0
}
7418
7419
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v4i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7420
0
  if (RetVT.SimpleTy != MVT::v4i32)
7421
0
    return 0;
7422
0
  if ((Subtarget->hasNEON())) {
7423
0
    return fastEmitInst_ri(ARM::VSHRuv4i32, &ARM::QPRRegClass, Op0, imm1);
7424
0
  }
7425
0
  return 0;
7426
0
}
7427
7428
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v1i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7429
0
  if (RetVT.SimpleTy != MVT::v1i64)
7430
0
    return 0;
7431
0
  if ((Subtarget->hasNEON())) {
7432
0
    return fastEmitInst_ri(ARM::VSHRuv1i64, &ARM::DPRRegClass, Op0, imm1);
7433
0
  }
7434
0
  return 0;
7435
0
}
7436
7437
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v2i64_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7438
0
  if (RetVT.SimpleTy != MVT::v2i64)
7439
0
    return 0;
7440
0
  if ((Subtarget->hasNEON())) {
7441
0
    return fastEmitInst_ri(ARM::VSHRuv2i64, &ARM::QPRRegClass, Op0, imm1);
7442
0
  }
7443
0
  return 0;
7444
0
}
7445
7446
0
unsigned fastEmit_ARMISD_VSHRuIMM_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7447
0
  switch (VT.SimpleTy) {
7448
0
  case MVT::v8i8: return fastEmit_ARMISD_VSHRuIMM_MVT_v8i8_ri(RetVT, Op0, imm1);
7449
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHRuIMM_MVT_v16i8_ri(RetVT, Op0, imm1);
7450
0
  case MVT::v4i16: return fastEmit_ARMISD_VSHRuIMM_MVT_v4i16_ri(RetVT, Op0, imm1);
7451
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHRuIMM_MVT_v8i16_ri(RetVT, Op0, imm1);
7452
0
  case MVT::v2i32: return fastEmit_ARMISD_VSHRuIMM_MVT_v2i32_ri(RetVT, Op0, imm1);
7453
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHRuIMM_MVT_v4i32_ri(RetVT, Op0, imm1);
7454
0
  case MVT::v1i64: return fastEmit_ARMISD_VSHRuIMM_MVT_v1i64_ri(RetVT, Op0, imm1);
7455
0
  case MVT::v2i64: return fastEmit_ARMISD_VSHRuIMM_MVT_v2i64_ri(RetVT, Op0, imm1);
7456
0
  default: return 0;
7457
0
  }
7458
0
}
7459
7460
// FastEmit functions for ISD::EXTRACT_VECTOR_ELT.
7461
7462
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v2i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7463
0
  if (RetVT.SimpleTy != MVT::i32)
7464
0
    return 0;
7465
0
  if ((Subtarget->hasFPRegs()) && (!Subtarget->hasSlowVGETLNi32())) {
7466
0
    return fastEmitInst_ri(ARM::VGETLNi32, &ARM::GPRRegClass, Op0, imm1);
7467
0
  }
7468
0
  return 0;
7469
0
}
7470
7471
0
unsigned fastEmit_ISD_EXTRACT_VECTOR_ELT_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7472
0
  switch (VT.SimpleTy) {
7473
0
  case MVT::v2i32: return fastEmit_ISD_EXTRACT_VECTOR_ELT_MVT_v2i32_ri(RetVT, Op0, imm1);
7474
0
  default: return 0;
7475
0
  }
7476
0
}
7477
7478
// FastEmit functions for ISD::SHL.
7479
7480
0
unsigned fastEmit_ISD_SHL_MVT_i32_ri(MVT RetVT, unsigned Op0, uint64_t imm1) {
7481
0
  if (RetVT.SimpleTy != MVT::i32)
7482
0
    return 0;
7483
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7484
0
    return fastEmitInst_ri(ARM::tLSLri, &ARM::tGPRRegClass, Op0, imm1);
7485
0
  }
7486
0
  return 0;
7487
0
}
7488
7489
0
unsigned fastEmit_ISD_SHL_ri(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7490
0
  switch (VT.SimpleTy) {
7491
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_ri(RetVT, Op0, imm1);
7492
0
  default: return 0;
7493
0
  }
7494
0
}
7495
7496
// Top-level FastEmit function.
7497
7498
0
unsigned fastEmit_ri(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) override {
7499
0
  if (VT == MVT::i32 && Predicate_mod_imm(imm1))
7500
0
    if (unsigned Reg = fastEmit_ri_Predicate_mod_imm(VT, RetVT, Opcode, Op0, imm1))
7501
0
      return Reg;
7502
7503
0
  if (VT == MVT::i32 && Predicate_imm0_7(imm1))
7504
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_7(VT, RetVT, Opcode, Op0, imm1))
7505
0
      return Reg;
7506
7507
0
  if (VT == MVT::i32 && Predicate_imm0_255_expr(imm1))
7508
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_255_expr(VT, RetVT, Opcode, Op0, imm1))
7509
0
      return Reg;
7510
7511
0
  if (VT == MVT::i32 && Predicate_imm0_255(imm1))
7512
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_255(VT, RetVT, Opcode, Op0, imm1))
7513
0
      return Reg;
7514
7515
0
  if (VT == MVT::i32 && Predicate_t2_so_imm(imm1))
7516
0
    if (unsigned Reg = fastEmit_ri_Predicate_t2_so_imm(VT, RetVT, Opcode, Op0, imm1))
7517
0
      return Reg;
7518
7519
0
  if (VT == MVT::i32 && Predicate_imm0_4095(imm1))
7520
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_4095(VT, RetVT, Opcode, Op0, imm1))
7521
0
      return Reg;
7522
7523
0
  if (VT == MVT::i32 && Predicate_imm1_31(imm1))
7524
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm1_31(VT, RetVT, Opcode, Op0, imm1))
7525
0
      return Reg;
7526
7527
0
  if (VT == MVT::i32 && Predicate_shr_imm8(imm1))
7528
0
    if (unsigned Reg = fastEmit_ri_Predicate_shr_imm8(VT, RetVT, Opcode, Op0, imm1))
7529
0
      return Reg;
7530
7531
0
  if (VT == MVT::i32 && Predicate_shr_imm16(imm1))
7532
0
    if (unsigned Reg = fastEmit_ri_Predicate_shr_imm16(VT, RetVT, Opcode, Op0, imm1))
7533
0
      return Reg;
7534
7535
0
  if (VT == MVT::i32 && Predicate_shr_imm32(imm1))
7536
0
    if (unsigned Reg = fastEmit_ri_Predicate_shr_imm32(VT, RetVT, Opcode, Op0, imm1))
7537
0
      return Reg;
7538
7539
0
  if (VT == MVT::i32 && Predicate_VectorIndex32(imm1))
7540
0
    if (unsigned Reg = fastEmit_ri_Predicate_VectorIndex32(VT, RetVT, Opcode, Op0, imm1))
7541
0
      return Reg;
7542
7543
0
  if (VT == MVT::i32 && Predicate_imm0_31(imm1))
7544
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_31(VT, RetVT, Opcode, Op0, imm1))
7545
0
      return Reg;
7546
7547
0
  if (VT == MVT::i32 && Predicate_imm0_15(imm1))
7548
0
    if (unsigned Reg = fastEmit_ri_Predicate_imm0_15(VT, RetVT, Opcode, Op0, imm1))
7549
0
      return Reg;
7550
7551
0
  switch (Opcode) {
7552
0
  case ARMISD::PIC_ADD: return fastEmit_ARMISD_PIC_ADD_ri(VT, RetVT, Op0, imm1);
7553
0
  case ARMISD::VDUPLANE: return fastEmit_ARMISD_VDUPLANE_ri(VT, RetVT, Op0, imm1);
7554
0
  case ARMISD::VGETLANEs: return fastEmit_ARMISD_VGETLANEs_ri(VT, RetVT, Op0, imm1);
7555
0
  case ARMISD::VGETLANEu: return fastEmit_ARMISD_VGETLANEu_ri(VT, RetVT, Op0, imm1);
7556
0
  case ARMISD::VQSHLsIMM: return fastEmit_ARMISD_VQSHLsIMM_ri(VT, RetVT, Op0, imm1);
7557
0
  case ARMISD::VQSHLsuIMM: return fastEmit_ARMISD_VQSHLsuIMM_ri(VT, RetVT, Op0, imm1);
7558
0
  case ARMISD::VQSHLuIMM: return fastEmit_ARMISD_VQSHLuIMM_ri(VT, RetVT, Op0, imm1);
7559
0
  case ARMISD::VRSHRsIMM: return fastEmit_ARMISD_VRSHRsIMM_ri(VT, RetVT, Op0, imm1);
7560
0
  case ARMISD::VRSHRuIMM: return fastEmit_ARMISD_VRSHRuIMM_ri(VT, RetVT, Op0, imm1);
7561
0
  case ARMISD::VSHLIMM: return fastEmit_ARMISD_VSHLIMM_ri(VT, RetVT, Op0, imm1);
7562
0
  case ARMISD::VSHRsIMM: return fastEmit_ARMISD_VSHRsIMM_ri(VT, RetVT, Op0, imm1);
7563
0
  case ARMISD::VSHRuIMM: return fastEmit_ARMISD_VSHRuIMM_ri(VT, RetVT, Op0, imm1);
7564
0
  case ISD::EXTRACT_VECTOR_ELT: return fastEmit_ISD_EXTRACT_VECTOR_ELT_ri(VT, RetVT, Op0, imm1);
7565
0
  case ISD::SHL: return fastEmit_ISD_SHL_ri(VT, RetVT, Op0, imm1);
7566
0
  default: return 0;
7567
0
  }
7568
0
}
7569
7570
// FastEmit functions for ARMISD::CMN.
7571
7572
0
unsigned fastEmit_ARMISD_CMN_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7573
0
  if (RetVT.SimpleTy != MVT::isVoid)
7574
0
    return 0;
7575
0
  if ((!Subtarget->isThumb())) {
7576
0
    return fastEmitInst_ri(ARM::CMNri, &ARM::GPRRegClass, Op0, imm1);
7577
0
  }
7578
0
  return 0;
7579
0
}
7580
7581
0
unsigned fastEmit_ARMISD_CMN_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7582
0
  switch (VT.SimpleTy) {
7583
0
  case MVT::i32: return fastEmit_ARMISD_CMN_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7584
0
  default: return 0;
7585
0
  }
7586
0
}
7587
7588
// FastEmit functions for ARMISD::CMP.
7589
7590
0
unsigned fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7591
0
  if (RetVT.SimpleTy != MVT::isVoid)
7592
0
    return 0;
7593
0
  if ((!Subtarget->isThumb())) {
7594
0
    return fastEmitInst_ri(ARM::CMPri, &ARM::GPRRegClass, Op0, imm1);
7595
0
  }
7596
0
  return 0;
7597
0
}
7598
7599
0
unsigned fastEmit_ARMISD_CMP_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7600
0
  switch (VT.SimpleTy) {
7601
0
  case MVT::i32: return fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7602
0
  default: return 0;
7603
0
  }
7604
0
}
7605
7606
// FastEmit functions for ARMISD::CMPZ.
7607
7608
0
unsigned fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7609
0
  if (RetVT.SimpleTy != MVT::isVoid)
7610
0
    return 0;
7611
0
  if ((!Subtarget->isThumb())) {
7612
0
    return fastEmitInst_ri(ARM::CMPri, &ARM::GPRRegClass, Op0, imm1);
7613
0
  }
7614
0
  return 0;
7615
0
}
7616
7617
0
unsigned fastEmit_ARMISD_CMPZ_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7618
0
  switch (VT.SimpleTy) {
7619
0
  case MVT::i32: return fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7620
0
  default: return 0;
7621
0
  }
7622
0
}
7623
7624
// FastEmit functions for ARMISD::SUBS.
7625
7626
0
unsigned fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7627
0
  if (RetVT.SimpleTy != MVT::i32)
7628
0
    return 0;
7629
0
  if ((!Subtarget->isThumb())) {
7630
0
    return fastEmitInst_ri(ARM::SUBSri, &ARM::GPRRegClass, Op0, imm1);
7631
0
  }
7632
0
  return 0;
7633
0
}
7634
7635
0
unsigned fastEmit_ARMISD_SUBS_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7636
0
  switch (VT.SimpleTy) {
7637
0
  case MVT::i32: return fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7638
0
  default: return 0;
7639
0
  }
7640
0
}
7641
7642
// FastEmit functions for ISD::ADD.
7643
7644
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7645
0
  if (RetVT.SimpleTy != MVT::i32)
7646
0
    return 0;
7647
0
  if ((!Subtarget->isThumb())) {
7648
0
    return fastEmitInst_ri(ARM::ADDri, &ARM::GPRRegClass, Op0, imm1);
7649
0
  }
7650
0
  return 0;
7651
0
}
7652
7653
0
unsigned fastEmit_ISD_ADD_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7654
0
  switch (VT.SimpleTy) {
7655
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7656
0
  default: return 0;
7657
0
  }
7658
0
}
7659
7660
// FastEmit functions for ISD::AND.
7661
7662
0
unsigned fastEmit_ISD_AND_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7663
0
  if (RetVT.SimpleTy != MVT::i32)
7664
0
    return 0;
7665
0
  if ((!Subtarget->isThumb())) {
7666
0
    return fastEmitInst_ri(ARM::ANDri, &ARM::GPRRegClass, Op0, imm1);
7667
0
  }
7668
0
  return 0;
7669
0
}
7670
7671
0
unsigned fastEmit_ISD_AND_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7672
0
  switch (VT.SimpleTy) {
7673
0
  case MVT::i32: return fastEmit_ISD_AND_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7674
0
  default: return 0;
7675
0
  }
7676
0
}
7677
7678
// FastEmit functions for ISD::OR.
7679
7680
0
unsigned fastEmit_ISD_OR_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7681
0
  if (RetVT.SimpleTy != MVT::i32)
7682
0
    return 0;
7683
0
  if ((!Subtarget->isThumb())) {
7684
0
    return fastEmitInst_ri(ARM::ORRri, &ARM::GPRRegClass, Op0, imm1);
7685
0
  }
7686
0
  return 0;
7687
0
}
7688
7689
0
unsigned fastEmit_ISD_OR_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7690
0
  switch (VT.SimpleTy) {
7691
0
  case MVT::i32: return fastEmit_ISD_OR_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7692
0
  default: return 0;
7693
0
  }
7694
0
}
7695
7696
// FastEmit functions for ISD::SUB.
7697
7698
0
unsigned fastEmit_ISD_SUB_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7699
0
  if (RetVT.SimpleTy != MVT::i32)
7700
0
    return 0;
7701
0
  if ((!Subtarget->isThumb())) {
7702
0
    return fastEmitInst_ri(ARM::SUBri, &ARM::GPRRegClass, Op0, imm1);
7703
0
  }
7704
0
  return 0;
7705
0
}
7706
7707
0
unsigned fastEmit_ISD_SUB_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7708
0
  switch (VT.SimpleTy) {
7709
0
  case MVT::i32: return fastEmit_ISD_SUB_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7710
0
  default: return 0;
7711
0
  }
7712
0
}
7713
7714
// FastEmit functions for ISD::XOR.
7715
7716
0
unsigned fastEmit_ISD_XOR_MVT_i32_ri_Predicate_mod_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7717
0
  if (RetVT.SimpleTy != MVT::i32)
7718
0
    return 0;
7719
0
  if ((!Subtarget->isThumb())) {
7720
0
    return fastEmitInst_ri(ARM::EORri, &ARM::GPRRegClass, Op0, imm1);
7721
0
  }
7722
0
  return 0;
7723
0
}
7724
7725
0
unsigned fastEmit_ISD_XOR_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7726
0
  switch (VT.SimpleTy) {
7727
0
  case MVT::i32: return fastEmit_ISD_XOR_MVT_i32_ri_Predicate_mod_imm(RetVT, Op0, imm1);
7728
0
  default: return 0;
7729
0
  }
7730
0
}
7731
7732
// Top-level FastEmit function.
7733
7734
0
unsigned fastEmit_ri_Predicate_mod_imm(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
7735
0
  switch (Opcode) {
7736
0
  case ARMISD::CMN: return fastEmit_ARMISD_CMN_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7737
0
  case ARMISD::CMP: return fastEmit_ARMISD_CMP_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7738
0
  case ARMISD::CMPZ: return fastEmit_ARMISD_CMPZ_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7739
0
  case ARMISD::SUBS: return fastEmit_ARMISD_SUBS_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7740
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7741
0
  case ISD::AND: return fastEmit_ISD_AND_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7742
0
  case ISD::OR: return fastEmit_ISD_OR_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7743
0
  case ISD::SUB: return fastEmit_ISD_SUB_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7744
0
  case ISD::XOR: return fastEmit_ISD_XOR_ri_Predicate_mod_imm(VT, RetVT, Op0, imm1);
7745
0
  default: return 0;
7746
0
  }
7747
0
}
7748
7749
// FastEmit functions for ARMISD::SUBS.
7750
7751
0
unsigned fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_imm0_7(MVT RetVT, unsigned Op0, uint64_t imm1) {
7752
0
  if (RetVT.SimpleTy != MVT::i32)
7753
0
    return 0;
7754
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7755
0
    return fastEmitInst_ri(ARM::tSUBSi3, &ARM::tGPRRegClass, Op0, imm1);
7756
0
  }
7757
0
  return 0;
7758
0
}
7759
7760
0
unsigned fastEmit_ARMISD_SUBS_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7761
0
  switch (VT.SimpleTy) {
7762
0
  case MVT::i32: return fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_imm0_7(RetVT, Op0, imm1);
7763
0
  default: return 0;
7764
0
  }
7765
0
}
7766
7767
// FastEmit functions for ARMISD::VSHLIMM.
7768
7769
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v16i8_ri_Predicate_imm0_7(MVT RetVT, unsigned Op0, uint64_t imm1) {
7770
0
  if (RetVT.SimpleTy != MVT::v16i8)
7771
0
    return 0;
7772
0
  if ((Subtarget->hasMVEIntegerOps())) {
7773
0
    return fastEmitInst_ri(ARM::MVE_VSHL_immi8, &ARM::MQPRRegClass, Op0, imm1);
7774
0
  }
7775
0
  return 0;
7776
0
}
7777
7778
0
unsigned fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7779
0
  switch (VT.SimpleTy) {
7780
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHLIMM_MVT_v16i8_ri_Predicate_imm0_7(RetVT, Op0, imm1);
7781
0
  default: return 0;
7782
0
  }
7783
0
}
7784
7785
// FastEmit functions for ARMISD::VSHRsIMM.
7786
7787
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v16i8_ri_Predicate_imm0_7(MVT RetVT, unsigned Op0, uint64_t imm1) {
7788
0
  if (RetVT.SimpleTy != MVT::v16i8)
7789
0
    return 0;
7790
0
  if ((Subtarget->hasMVEIntegerOps())) {
7791
0
    return fastEmitInst_ri(ARM::MVE_VSHR_imms8, &ARM::MQPRRegClass, Op0, imm1);
7792
0
  }
7793
0
  return 0;
7794
0
}
7795
7796
0
unsigned fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7797
0
  switch (VT.SimpleTy) {
7798
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHRsIMM_MVT_v16i8_ri_Predicate_imm0_7(RetVT, Op0, imm1);
7799
0
  default: return 0;
7800
0
  }
7801
0
}
7802
7803
// FastEmit functions for ARMISD::VSHRuIMM.
7804
7805
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v16i8_ri_Predicate_imm0_7(MVT RetVT, unsigned Op0, uint64_t imm1) {
7806
0
  if (RetVT.SimpleTy != MVT::v16i8)
7807
0
    return 0;
7808
0
  if ((Subtarget->hasMVEIntegerOps())) {
7809
0
    return fastEmitInst_ri(ARM::MVE_VSHR_immu8, &ARM::MQPRRegClass, Op0, imm1);
7810
0
  }
7811
0
  return 0;
7812
0
}
7813
7814
0
unsigned fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7815
0
  switch (VT.SimpleTy) {
7816
0
  case MVT::v16i8: return fastEmit_ARMISD_VSHRuIMM_MVT_v16i8_ri_Predicate_imm0_7(RetVT, Op0, imm1);
7817
0
  default: return 0;
7818
0
  }
7819
0
}
7820
7821
// FastEmit functions for ISD::ADD.
7822
7823
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_7(MVT RetVT, unsigned Op0, uint64_t imm1) {
7824
0
  if (RetVT.SimpleTy != MVT::i32)
7825
0
    return 0;
7826
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7827
0
    return fastEmitInst_ri(ARM::tADDi3, &ARM::tGPRRegClass, Op0, imm1);
7828
0
  }
7829
0
  return 0;
7830
0
}
7831
7832
0
unsigned fastEmit_ISD_ADD_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7833
0
  switch (VT.SimpleTy) {
7834
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_7(RetVT, Op0, imm1);
7835
0
  default: return 0;
7836
0
  }
7837
0
}
7838
7839
// Top-level FastEmit function.
7840
7841
0
unsigned fastEmit_ri_Predicate_imm0_7(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
7842
0
  switch (Opcode) {
7843
0
  case ARMISD::SUBS: return fastEmit_ARMISD_SUBS_ri_Predicate_imm0_7(VT, RetVT, Op0, imm1);
7844
0
  case ARMISD::VSHLIMM: return fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_7(VT, RetVT, Op0, imm1);
7845
0
  case ARMISD::VSHRsIMM: return fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_7(VT, RetVT, Op0, imm1);
7846
0
  case ARMISD::VSHRuIMM: return fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_7(VT, RetVT, Op0, imm1);
7847
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_imm0_7(VT, RetVT, Op0, imm1);
7848
0
  default: return 0;
7849
0
  }
7850
0
}
7851
7852
// FastEmit functions for ISD::ADD.
7853
7854
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_255_expr(MVT RetVT, unsigned Op0, uint64_t imm1) {
7855
0
  if (RetVT.SimpleTy != MVT::i32)
7856
0
    return 0;
7857
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7858
0
    return fastEmitInst_ri(ARM::tADDi8, &ARM::tGPRRegClass, Op0, imm1);
7859
0
  }
7860
0
  return 0;
7861
0
}
7862
7863
0
unsigned fastEmit_ISD_ADD_ri_Predicate_imm0_255_expr(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7864
0
  switch (VT.SimpleTy) {
7865
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_255_expr(RetVT, Op0, imm1);
7866
0
  default: return 0;
7867
0
  }
7868
0
}
7869
7870
// Top-level FastEmit function.
7871
7872
0
unsigned fastEmit_ri_Predicate_imm0_255_expr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
7873
0
  switch (Opcode) {
7874
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_imm0_255_expr(VT, RetVT, Op0, imm1);
7875
0
  default: return 0;
7876
0
  }
7877
0
}
7878
7879
// FastEmit functions for ARMISD::CMP.
7880
7881
0
unsigned fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_imm0_255(MVT RetVT, unsigned Op0, uint64_t imm1) {
7882
0
  if (RetVT.SimpleTy != MVT::isVoid)
7883
0
    return 0;
7884
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7885
0
    return fastEmitInst_ri(ARM::tCMPi8, &ARM::tGPRRegClass, Op0, imm1);
7886
0
  }
7887
0
  return 0;
7888
0
}
7889
7890
0
unsigned fastEmit_ARMISD_CMP_ri_Predicate_imm0_255(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7891
0
  switch (VT.SimpleTy) {
7892
0
  case MVT::i32: return fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_imm0_255(RetVT, Op0, imm1);
7893
0
  default: return 0;
7894
0
  }
7895
0
}
7896
7897
// FastEmit functions for ARMISD::CMPZ.
7898
7899
0
unsigned fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_imm0_255(MVT RetVT, unsigned Op0, uint64_t imm1) {
7900
0
  if (RetVT.SimpleTy != MVT::isVoid)
7901
0
    return 0;
7902
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7903
0
    return fastEmitInst_ri(ARM::tCMPi8, &ARM::tGPRRegClass, Op0, imm1);
7904
0
  }
7905
0
  return 0;
7906
0
}
7907
7908
0
unsigned fastEmit_ARMISD_CMPZ_ri_Predicate_imm0_255(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7909
0
  switch (VT.SimpleTy) {
7910
0
  case MVT::i32: return fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_imm0_255(RetVT, Op0, imm1);
7911
0
  default: return 0;
7912
0
  }
7913
0
}
7914
7915
// FastEmit functions for ARMISD::SUBS.
7916
7917
0
unsigned fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_imm0_255(MVT RetVT, unsigned Op0, uint64_t imm1) {
7918
0
  if (RetVT.SimpleTy != MVT::i32)
7919
0
    return 0;
7920
0
  if ((Subtarget->isThumb()) && (Subtarget->isThumb1Only())) {
7921
0
    return fastEmitInst_ri(ARM::tSUBSi8, &ARM::tGPRRegClass, Op0, imm1);
7922
0
  }
7923
0
  return 0;
7924
0
}
7925
7926
0
unsigned fastEmit_ARMISD_SUBS_ri_Predicate_imm0_255(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7927
0
  switch (VT.SimpleTy) {
7928
0
  case MVT::i32: return fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_imm0_255(RetVT, Op0, imm1);
7929
0
  default: return 0;
7930
0
  }
7931
0
}
7932
7933
// Top-level FastEmit function.
7934
7935
0
unsigned fastEmit_ri_Predicate_imm0_255(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
7936
0
  switch (Opcode) {
7937
0
  case ARMISD::CMP: return fastEmit_ARMISD_CMP_ri_Predicate_imm0_255(VT, RetVT, Op0, imm1);
7938
0
  case ARMISD::CMPZ: return fastEmit_ARMISD_CMPZ_ri_Predicate_imm0_255(VT, RetVT, Op0, imm1);
7939
0
  case ARMISD::SUBS: return fastEmit_ARMISD_SUBS_ri_Predicate_imm0_255(VT, RetVT, Op0, imm1);
7940
0
  default: return 0;
7941
0
  }
7942
0
}
7943
7944
// FastEmit functions for ARMISD::CMP.
7945
7946
0
unsigned fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7947
0
  if (RetVT.SimpleTy != MVT::isVoid)
7948
0
    return 0;
7949
0
  if ((Subtarget->isThumb2())) {
7950
0
    return fastEmitInst_ri(ARM::t2CMPri, &ARM::GPRnopcRegClass, Op0, imm1);
7951
0
  }
7952
0
  return 0;
7953
0
}
7954
7955
0
unsigned fastEmit_ARMISD_CMP_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7956
0
  switch (VT.SimpleTy) {
7957
0
  case MVT::i32: return fastEmit_ARMISD_CMP_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
7958
0
  default: return 0;
7959
0
  }
7960
0
}
7961
7962
// FastEmit functions for ARMISD::CMPZ.
7963
7964
0
unsigned fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7965
0
  if (RetVT.SimpleTy != MVT::isVoid)
7966
0
    return 0;
7967
0
  if ((Subtarget->isThumb2())) {
7968
0
    return fastEmitInst_ri(ARM::t2CMPri, &ARM::GPRnopcRegClass, Op0, imm1);
7969
0
  }
7970
0
  return 0;
7971
0
}
7972
7973
0
unsigned fastEmit_ARMISD_CMPZ_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7974
0
  switch (VT.SimpleTy) {
7975
0
  case MVT::i32: return fastEmit_ARMISD_CMPZ_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
7976
0
  default: return 0;
7977
0
  }
7978
0
}
7979
7980
// FastEmit functions for ARMISD::SUBS.
7981
7982
0
unsigned fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
7983
0
  if (RetVT.SimpleTy != MVT::i32)
7984
0
    return 0;
7985
0
  if ((Subtarget->isThumb2())) {
7986
0
    return fastEmitInst_ri(ARM::t2SUBSri, &ARM::rGPRRegClass, Op0, imm1);
7987
0
  }
7988
0
  return 0;
7989
0
}
7990
7991
0
unsigned fastEmit_ARMISD_SUBS_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
7992
0
  switch (VT.SimpleTy) {
7993
0
  case MVT::i32: return fastEmit_ARMISD_SUBS_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
7994
0
  default: return 0;
7995
0
  }
7996
0
}
7997
7998
// FastEmit functions for ISD::ADD.
7999
8000
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
8001
0
  if (RetVT.SimpleTy != MVT::i32)
8002
0
    return 0;
8003
0
  if ((Subtarget->isThumb2())) {
8004
0
    return fastEmitInst_ri(ARM::t2ADDri, &ARM::rGPRRegClass, Op0, imm1);
8005
0
  }
8006
0
  return 0;
8007
0
}
8008
8009
0
unsigned fastEmit_ISD_ADD_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8010
0
  switch (VT.SimpleTy) {
8011
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
8012
0
  default: return 0;
8013
0
  }
8014
0
}
8015
8016
// FastEmit functions for ISD::AND.
8017
8018
0
unsigned fastEmit_ISD_AND_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
8019
0
  if (RetVT.SimpleTy != MVT::i32)
8020
0
    return 0;
8021
0
  if ((Subtarget->isThumb2())) {
8022
0
    return fastEmitInst_ri(ARM::t2ANDri, &ARM::rGPRRegClass, Op0, imm1);
8023
0
  }
8024
0
  return 0;
8025
0
}
8026
8027
0
unsigned fastEmit_ISD_AND_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8028
0
  switch (VT.SimpleTy) {
8029
0
  case MVT::i32: return fastEmit_ISD_AND_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
8030
0
  default: return 0;
8031
0
  }
8032
0
}
8033
8034
// FastEmit functions for ISD::OR.
8035
8036
0
unsigned fastEmit_ISD_OR_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
8037
0
  if (RetVT.SimpleTy != MVT::i32)
8038
0
    return 0;
8039
0
  if ((Subtarget->isThumb2())) {
8040
0
    return fastEmitInst_ri(ARM::t2ORRri, &ARM::rGPRRegClass, Op0, imm1);
8041
0
  }
8042
0
  return 0;
8043
0
}
8044
8045
0
unsigned fastEmit_ISD_OR_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8046
0
  switch (VT.SimpleTy) {
8047
0
  case MVT::i32: return fastEmit_ISD_OR_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
8048
0
  default: return 0;
8049
0
  }
8050
0
}
8051
8052
// FastEmit functions for ISD::SUB.
8053
8054
0
unsigned fastEmit_ISD_SUB_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
8055
0
  if (RetVT.SimpleTy != MVT::i32)
8056
0
    return 0;
8057
0
  if ((Subtarget->isThumb2())) {
8058
0
    return fastEmitInst_ri(ARM::t2SUBri, &ARM::rGPRRegClass, Op0, imm1);
8059
0
  }
8060
0
  return 0;
8061
0
}
8062
8063
0
unsigned fastEmit_ISD_SUB_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8064
0
  switch (VT.SimpleTy) {
8065
0
  case MVT::i32: return fastEmit_ISD_SUB_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
8066
0
  default: return 0;
8067
0
  }
8068
0
}
8069
8070
// FastEmit functions for ISD::XOR.
8071
8072
0
unsigned fastEmit_ISD_XOR_MVT_i32_ri_Predicate_t2_so_imm(MVT RetVT, unsigned Op0, uint64_t imm1) {
8073
0
  if (RetVT.SimpleTy != MVT::i32)
8074
0
    return 0;
8075
0
  if ((Subtarget->isThumb2())) {
8076
0
    return fastEmitInst_ri(ARM::t2EORri, &ARM::rGPRRegClass, Op0, imm1);
8077
0
  }
8078
0
  return 0;
8079
0
}
8080
8081
0
unsigned fastEmit_ISD_XOR_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8082
0
  switch (VT.SimpleTy) {
8083
0
  case MVT::i32: return fastEmit_ISD_XOR_MVT_i32_ri_Predicate_t2_so_imm(RetVT, Op0, imm1);
8084
0
  default: return 0;
8085
0
  }
8086
0
}
8087
8088
// Top-level FastEmit function.
8089
8090
0
unsigned fastEmit_ri_Predicate_t2_so_imm(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8091
0
  switch (Opcode) {
8092
0
  case ARMISD::CMP: return fastEmit_ARMISD_CMP_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8093
0
  case ARMISD::CMPZ: return fastEmit_ARMISD_CMPZ_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8094
0
  case ARMISD::SUBS: return fastEmit_ARMISD_SUBS_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8095
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8096
0
  case ISD::AND: return fastEmit_ISD_AND_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8097
0
  case ISD::OR: return fastEmit_ISD_OR_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8098
0
  case ISD::SUB: return fastEmit_ISD_SUB_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8099
0
  case ISD::XOR: return fastEmit_ISD_XOR_ri_Predicate_t2_so_imm(VT, RetVT, Op0, imm1);
8100
0
  default: return 0;
8101
0
  }
8102
0
}
8103
8104
// FastEmit functions for ISD::ADD.
8105
8106
0
unsigned fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_4095(MVT RetVT, unsigned Op0, uint64_t imm1) {
8107
0
  if (RetVT.SimpleTy != MVT::i32)
8108
0
    return 0;
8109
0
  if ((Subtarget->isThumb2())) {
8110
0
    return fastEmitInst_ri(ARM::t2ADDri12, &ARM::rGPRRegClass, Op0, imm1);
8111
0
  }
8112
0
  return 0;
8113
0
}
8114
8115
0
unsigned fastEmit_ISD_ADD_ri_Predicate_imm0_4095(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8116
0
  switch (VT.SimpleTy) {
8117
0
  case MVT::i32: return fastEmit_ISD_ADD_MVT_i32_ri_Predicate_imm0_4095(RetVT, Op0, imm1);
8118
0
  default: return 0;
8119
0
  }
8120
0
}
8121
8122
// FastEmit functions for ISD::SUB.
8123
8124
0
unsigned fastEmit_ISD_SUB_MVT_i32_ri_Predicate_imm0_4095(MVT RetVT, unsigned Op0, uint64_t imm1) {
8125
0
  if (RetVT.SimpleTy != MVT::i32)
8126
0
    return 0;
8127
0
  if ((Subtarget->isThumb2())) {
8128
0
    return fastEmitInst_ri(ARM::t2SUBri12, &ARM::rGPRRegClass, Op0, imm1);
8129
0
  }
8130
0
  return 0;
8131
0
}
8132
8133
0
unsigned fastEmit_ISD_SUB_ri_Predicate_imm0_4095(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8134
0
  switch (VT.SimpleTy) {
8135
0
  case MVT::i32: return fastEmit_ISD_SUB_MVT_i32_ri_Predicate_imm0_4095(RetVT, Op0, imm1);
8136
0
  default: return 0;
8137
0
  }
8138
0
}
8139
8140
// Top-level FastEmit function.
8141
8142
0
unsigned fastEmit_ri_Predicate_imm0_4095(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8143
0
  switch (Opcode) {
8144
0
  case ISD::ADD: return fastEmit_ISD_ADD_ri_Predicate_imm0_4095(VT, RetVT, Op0, imm1);
8145
0
  case ISD::SUB: return fastEmit_ISD_SUB_ri_Predicate_imm0_4095(VT, RetVT, Op0, imm1);
8146
0
  default: return 0;
8147
0
  }
8148
0
}
8149
8150
// FastEmit functions for ISD::ROTR.
8151
8152
0
unsigned fastEmit_ISD_ROTR_MVT_i32_ri_Predicate_imm1_31(MVT RetVT, unsigned Op0, uint64_t imm1) {
8153
0
  if (RetVT.SimpleTy != MVT::i32)
8154
0
    return 0;
8155
0
  if ((Subtarget->isThumb2())) {
8156
0
    return fastEmitInst_ri(ARM::t2RORri, &ARM::rGPRRegClass, Op0, imm1);
8157
0
  }
8158
0
  return 0;
8159
0
}
8160
8161
0
unsigned fastEmit_ISD_ROTR_ri_Predicate_imm1_31(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8162
0
  switch (VT.SimpleTy) {
8163
0
  case MVT::i32: return fastEmit_ISD_ROTR_MVT_i32_ri_Predicate_imm1_31(RetVT, Op0, imm1);
8164
0
  default: return 0;
8165
0
  }
8166
0
}
8167
8168
// FastEmit functions for ISD::SHL.
8169
8170
0
unsigned fastEmit_ISD_SHL_MVT_i32_ri_Predicate_imm1_31(MVT RetVT, unsigned Op0, uint64_t imm1) {
8171
0
  if (RetVT.SimpleTy != MVT::i32)
8172
0
    return 0;
8173
0
  if ((Subtarget->isThumb2())) {
8174
0
    return fastEmitInst_ri(ARM::t2LSLri, &ARM::rGPRRegClass, Op0, imm1);
8175
0
  }
8176
0
  return 0;
8177
0
}
8178
8179
0
unsigned fastEmit_ISD_SHL_ri_Predicate_imm1_31(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8180
0
  switch (VT.SimpleTy) {
8181
0
  case MVT::i32: return fastEmit_ISD_SHL_MVT_i32_ri_Predicate_imm1_31(RetVT, Op0, imm1);
8182
0
  default: return 0;
8183
0
  }
8184
0
}
8185
8186
// Top-level FastEmit function.
8187
8188
0
unsigned fastEmit_ri_Predicate_imm1_31(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8189
0
  switch (Opcode) {
8190
0
  case ISD::ROTR: return fastEmit_ISD_ROTR_ri_Predicate_imm1_31(VT, RetVT, Op0, imm1);
8191
0
  case ISD::SHL: return fastEmit_ISD_SHL_ri_Predicate_imm1_31(VT, RetVT, Op0, imm1);
8192
0
  default: return 0;
8193
0
  }
8194
0
}
8195
8196
// FastEmit functions for ARMISD::VQRSHRNsIMM.
8197
8198
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8199
0
  if (RetVT.SimpleTy != MVT::v8i8)
8200
0
    return 0;
8201
0
  if ((Subtarget->hasNEON())) {
8202
0
    return fastEmitInst_ri(ARM::VQRSHRNsv8i8, &ARM::DPRRegClass, Op0, imm1);
8203
0
  }
8204
0
  return 0;
8205
0
}
8206
8207
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8208
0
  switch (VT.SimpleTy) {
8209
0
  case MVT::v8i16: return fastEmit_ARMISD_VQRSHRNsIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8210
0
  default: return 0;
8211
0
  }
8212
0
}
8213
8214
// FastEmit functions for ARMISD::VQRSHRNsuIMM.
8215
8216
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8217
0
  if (RetVT.SimpleTy != MVT::v8i8)
8218
0
    return 0;
8219
0
  if ((Subtarget->hasNEON())) {
8220
0
    return fastEmitInst_ri(ARM::VQRSHRUNv8i8, &ARM::DPRRegClass, Op0, imm1);
8221
0
  }
8222
0
  return 0;
8223
0
}
8224
8225
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8226
0
  switch (VT.SimpleTy) {
8227
0
  case MVT::v8i16: return fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8228
0
  default: return 0;
8229
0
  }
8230
0
}
8231
8232
// FastEmit functions for ARMISD::VQRSHRNuIMM.
8233
8234
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8235
0
  if (RetVT.SimpleTy != MVT::v8i8)
8236
0
    return 0;
8237
0
  if ((Subtarget->hasNEON())) {
8238
0
    return fastEmitInst_ri(ARM::VQRSHRNuv8i8, &ARM::DPRRegClass, Op0, imm1);
8239
0
  }
8240
0
  return 0;
8241
0
}
8242
8243
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8244
0
  switch (VT.SimpleTy) {
8245
0
  case MVT::v8i16: return fastEmit_ARMISD_VQRSHRNuIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8246
0
  default: return 0;
8247
0
  }
8248
0
}
8249
8250
// FastEmit functions for ARMISD::VQSHRNsIMM.
8251
8252
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8253
0
  if (RetVT.SimpleTy != MVT::v8i8)
8254
0
    return 0;
8255
0
  if ((Subtarget->hasNEON())) {
8256
0
    return fastEmitInst_ri(ARM::VQSHRNsv8i8, &ARM::DPRRegClass, Op0, imm1);
8257
0
  }
8258
0
  return 0;
8259
0
}
8260
8261
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8262
0
  switch (VT.SimpleTy) {
8263
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHRNsIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8264
0
  default: return 0;
8265
0
  }
8266
0
}
8267
8268
// FastEmit functions for ARMISD::VQSHRNsuIMM.
8269
8270
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8271
0
  if (RetVT.SimpleTy != MVT::v8i8)
8272
0
    return 0;
8273
0
  if ((Subtarget->hasNEON())) {
8274
0
    return fastEmitInst_ri(ARM::VQSHRUNv8i8, &ARM::DPRRegClass, Op0, imm1);
8275
0
  }
8276
0
  return 0;
8277
0
}
8278
8279
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8280
0
  switch (VT.SimpleTy) {
8281
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHRNsuIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8282
0
  default: return 0;
8283
0
  }
8284
0
}
8285
8286
// FastEmit functions for ARMISD::VQSHRNuIMM.
8287
8288
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8289
0
  if (RetVT.SimpleTy != MVT::v8i8)
8290
0
    return 0;
8291
0
  if ((Subtarget->hasNEON())) {
8292
0
    return fastEmitInst_ri(ARM::VQSHRNuv8i8, &ARM::DPRRegClass, Op0, imm1);
8293
0
  }
8294
0
  return 0;
8295
0
}
8296
8297
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8298
0
  switch (VT.SimpleTy) {
8299
0
  case MVT::v8i16: return fastEmit_ARMISD_VQSHRNuIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8300
0
  default: return 0;
8301
0
  }
8302
0
}
8303
8304
// FastEmit functions for ARMISD::VRSHRNIMM.
8305
8306
0
unsigned fastEmit_ARMISD_VRSHRNIMM_MVT_v8i16_ri_Predicate_shr_imm8(MVT RetVT, unsigned Op0, uint64_t imm1) {
8307
0
  if (RetVT.SimpleTy != MVT::v8i8)
8308
0
    return 0;
8309
0
  if ((Subtarget->hasNEON())) {
8310
0
    return fastEmitInst_ri(ARM::VRSHRNv8i8, &ARM::DPRRegClass, Op0, imm1);
8311
0
  }
8312
0
  return 0;
8313
0
}
8314
8315
0
unsigned fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8316
0
  switch (VT.SimpleTy) {
8317
0
  case MVT::v8i16: return fastEmit_ARMISD_VRSHRNIMM_MVT_v8i16_ri_Predicate_shr_imm8(RetVT, Op0, imm1);
8318
0
  default: return 0;
8319
0
  }
8320
0
}
8321
8322
// Top-level FastEmit function.
8323
8324
0
unsigned fastEmit_ri_Predicate_shr_imm8(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8325
0
  switch (Opcode) {
8326
0
  case ARMISD::VQRSHRNsIMM: return fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8327
0
  case ARMISD::VQRSHRNsuIMM: return fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8328
0
  case ARMISD::VQRSHRNuIMM: return fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8329
0
  case ARMISD::VQSHRNsIMM: return fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8330
0
  case ARMISD::VQSHRNsuIMM: return fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8331
0
  case ARMISD::VQSHRNuIMM: return fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8332
0
  case ARMISD::VRSHRNIMM: return fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm8(VT, RetVT, Op0, imm1);
8333
0
  default: return 0;
8334
0
  }
8335
0
}
8336
8337
// FastEmit functions for ARMISD::VQRSHRNsIMM.
8338
8339
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8340
0
  if (RetVT.SimpleTy != MVT::v4i16)
8341
0
    return 0;
8342
0
  if ((Subtarget->hasNEON())) {
8343
0
    return fastEmitInst_ri(ARM::VQRSHRNsv4i16, &ARM::DPRRegClass, Op0, imm1);
8344
0
  }
8345
0
  return 0;
8346
0
}
8347
8348
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8349
0
  switch (VT.SimpleTy) {
8350
0
  case MVT::v4i32: return fastEmit_ARMISD_VQRSHRNsIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8351
0
  default: return 0;
8352
0
  }
8353
0
}
8354
8355
// FastEmit functions for ARMISD::VQRSHRNsuIMM.
8356
8357
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8358
0
  if (RetVT.SimpleTy != MVT::v4i16)
8359
0
    return 0;
8360
0
  if ((Subtarget->hasNEON())) {
8361
0
    return fastEmitInst_ri(ARM::VQRSHRUNv4i16, &ARM::DPRRegClass, Op0, imm1);
8362
0
  }
8363
0
  return 0;
8364
0
}
8365
8366
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8367
0
  switch (VT.SimpleTy) {
8368
0
  case MVT::v4i32: return fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8369
0
  default: return 0;
8370
0
  }
8371
0
}
8372
8373
// FastEmit functions for ARMISD::VQRSHRNuIMM.
8374
8375
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8376
0
  if (RetVT.SimpleTy != MVT::v4i16)
8377
0
    return 0;
8378
0
  if ((Subtarget->hasNEON())) {
8379
0
    return fastEmitInst_ri(ARM::VQRSHRNuv4i16, &ARM::DPRRegClass, Op0, imm1);
8380
0
  }
8381
0
  return 0;
8382
0
}
8383
8384
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8385
0
  switch (VT.SimpleTy) {
8386
0
  case MVT::v4i32: return fastEmit_ARMISD_VQRSHRNuIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8387
0
  default: return 0;
8388
0
  }
8389
0
}
8390
8391
// FastEmit functions for ARMISD::VQSHRNsIMM.
8392
8393
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8394
0
  if (RetVT.SimpleTy != MVT::v4i16)
8395
0
    return 0;
8396
0
  if ((Subtarget->hasNEON())) {
8397
0
    return fastEmitInst_ri(ARM::VQSHRNsv4i16, &ARM::DPRRegClass, Op0, imm1);
8398
0
  }
8399
0
  return 0;
8400
0
}
8401
8402
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8403
0
  switch (VT.SimpleTy) {
8404
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHRNsIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8405
0
  default: return 0;
8406
0
  }
8407
0
}
8408
8409
// FastEmit functions for ARMISD::VQSHRNsuIMM.
8410
8411
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8412
0
  if (RetVT.SimpleTy != MVT::v4i16)
8413
0
    return 0;
8414
0
  if ((Subtarget->hasNEON())) {
8415
0
    return fastEmitInst_ri(ARM::VQSHRUNv4i16, &ARM::DPRRegClass, Op0, imm1);
8416
0
  }
8417
0
  return 0;
8418
0
}
8419
8420
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8421
0
  switch (VT.SimpleTy) {
8422
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHRNsuIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8423
0
  default: return 0;
8424
0
  }
8425
0
}
8426
8427
// FastEmit functions for ARMISD::VQSHRNuIMM.
8428
8429
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8430
0
  if (RetVT.SimpleTy != MVT::v4i16)
8431
0
    return 0;
8432
0
  if ((Subtarget->hasNEON())) {
8433
0
    return fastEmitInst_ri(ARM::VQSHRNuv4i16, &ARM::DPRRegClass, Op0, imm1);
8434
0
  }
8435
0
  return 0;
8436
0
}
8437
8438
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8439
0
  switch (VT.SimpleTy) {
8440
0
  case MVT::v4i32: return fastEmit_ARMISD_VQSHRNuIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8441
0
  default: return 0;
8442
0
  }
8443
0
}
8444
8445
// FastEmit functions for ARMISD::VRSHRNIMM.
8446
8447
0
unsigned fastEmit_ARMISD_VRSHRNIMM_MVT_v4i32_ri_Predicate_shr_imm16(MVT RetVT, unsigned Op0, uint64_t imm1) {
8448
0
  if (RetVT.SimpleTy != MVT::v4i16)
8449
0
    return 0;
8450
0
  if ((Subtarget->hasNEON())) {
8451
0
    return fastEmitInst_ri(ARM::VRSHRNv4i16, &ARM::DPRRegClass, Op0, imm1);
8452
0
  }
8453
0
  return 0;
8454
0
}
8455
8456
0
unsigned fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8457
0
  switch (VT.SimpleTy) {
8458
0
  case MVT::v4i32: return fastEmit_ARMISD_VRSHRNIMM_MVT_v4i32_ri_Predicate_shr_imm16(RetVT, Op0, imm1);
8459
0
  default: return 0;
8460
0
  }
8461
0
}
8462
8463
// Top-level FastEmit function.
8464
8465
0
unsigned fastEmit_ri_Predicate_shr_imm16(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8466
0
  switch (Opcode) {
8467
0
  case ARMISD::VQRSHRNsIMM: return fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8468
0
  case ARMISD::VQRSHRNsuIMM: return fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8469
0
  case ARMISD::VQRSHRNuIMM: return fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8470
0
  case ARMISD::VQSHRNsIMM: return fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8471
0
  case ARMISD::VQSHRNsuIMM: return fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8472
0
  case ARMISD::VQSHRNuIMM: return fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8473
0
  case ARMISD::VRSHRNIMM: return fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm16(VT, RetVT, Op0, imm1);
8474
0
  default: return 0;
8475
0
  }
8476
0
}
8477
8478
// FastEmit functions for ARMISD::VQRSHRNsIMM.
8479
8480
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8481
0
  if (RetVT.SimpleTy != MVT::v2i32)
8482
0
    return 0;
8483
0
  if ((Subtarget->hasNEON())) {
8484
0
    return fastEmitInst_ri(ARM::VQRSHRNsv2i32, &ARM::DPRRegClass, Op0, imm1);
8485
0
  }
8486
0
  return 0;
8487
0
}
8488
8489
0
unsigned fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8490
0
  switch (VT.SimpleTy) {
8491
0
  case MVT::v2i64: return fastEmit_ARMISD_VQRSHRNsIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8492
0
  default: return 0;
8493
0
  }
8494
0
}
8495
8496
// FastEmit functions for ARMISD::VQRSHRNsuIMM.
8497
8498
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8499
0
  if (RetVT.SimpleTy != MVT::v2i32)
8500
0
    return 0;
8501
0
  if ((Subtarget->hasNEON())) {
8502
0
    return fastEmitInst_ri(ARM::VQRSHRUNv2i32, &ARM::DPRRegClass, Op0, imm1);
8503
0
  }
8504
0
  return 0;
8505
0
}
8506
8507
0
unsigned fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8508
0
  switch (VT.SimpleTy) {
8509
0
  case MVT::v2i64: return fastEmit_ARMISD_VQRSHRNsuIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8510
0
  default: return 0;
8511
0
  }
8512
0
}
8513
8514
// FastEmit functions for ARMISD::VQRSHRNuIMM.
8515
8516
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8517
0
  if (RetVT.SimpleTy != MVT::v2i32)
8518
0
    return 0;
8519
0
  if ((Subtarget->hasNEON())) {
8520
0
    return fastEmitInst_ri(ARM::VQRSHRNuv2i32, &ARM::DPRRegClass, Op0, imm1);
8521
0
  }
8522
0
  return 0;
8523
0
}
8524
8525
0
unsigned fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8526
0
  switch (VT.SimpleTy) {
8527
0
  case MVT::v2i64: return fastEmit_ARMISD_VQRSHRNuIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8528
0
  default: return 0;
8529
0
  }
8530
0
}
8531
8532
// FastEmit functions for ARMISD::VQSHRNsIMM.
8533
8534
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8535
0
  if (RetVT.SimpleTy != MVT::v2i32)
8536
0
    return 0;
8537
0
  if ((Subtarget->hasNEON())) {
8538
0
    return fastEmitInst_ri(ARM::VQSHRNsv2i32, &ARM::DPRRegClass, Op0, imm1);
8539
0
  }
8540
0
  return 0;
8541
0
}
8542
8543
0
unsigned fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8544
0
  switch (VT.SimpleTy) {
8545
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHRNsIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8546
0
  default: return 0;
8547
0
  }
8548
0
}
8549
8550
// FastEmit functions for ARMISD::VQSHRNsuIMM.
8551
8552
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8553
0
  if (RetVT.SimpleTy != MVT::v2i32)
8554
0
    return 0;
8555
0
  if ((Subtarget->hasNEON())) {
8556
0
    return fastEmitInst_ri(ARM::VQSHRUNv2i32, &ARM::DPRRegClass, Op0, imm1);
8557
0
  }
8558
0
  return 0;
8559
0
}
8560
8561
0
unsigned fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8562
0
  switch (VT.SimpleTy) {
8563
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHRNsuIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8564
0
  default: return 0;
8565
0
  }
8566
0
}
8567
8568
// FastEmit functions for ARMISD::VQSHRNuIMM.
8569
8570
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8571
0
  if (RetVT.SimpleTy != MVT::v2i32)
8572
0
    return 0;
8573
0
  if ((Subtarget->hasNEON())) {
8574
0
    return fastEmitInst_ri(ARM::VQSHRNuv2i32, &ARM::DPRRegClass, Op0, imm1);
8575
0
  }
8576
0
  return 0;
8577
0
}
8578
8579
0
unsigned fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8580
0
  switch (VT.SimpleTy) {
8581
0
  case MVT::v2i64: return fastEmit_ARMISD_VQSHRNuIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8582
0
  default: return 0;
8583
0
  }
8584
0
}
8585
8586
// FastEmit functions for ARMISD::VRSHRNIMM.
8587
8588
0
unsigned fastEmit_ARMISD_VRSHRNIMM_MVT_v2i64_ri_Predicate_shr_imm32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8589
0
  if (RetVT.SimpleTy != MVT::v2i32)
8590
0
    return 0;
8591
0
  if ((Subtarget->hasNEON())) {
8592
0
    return fastEmitInst_ri(ARM::VRSHRNv2i32, &ARM::DPRRegClass, Op0, imm1);
8593
0
  }
8594
0
  return 0;
8595
0
}
8596
8597
0
unsigned fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8598
0
  switch (VT.SimpleTy) {
8599
0
  case MVT::v2i64: return fastEmit_ARMISD_VRSHRNIMM_MVT_v2i64_ri_Predicate_shr_imm32(RetVT, Op0, imm1);
8600
0
  default: return 0;
8601
0
  }
8602
0
}
8603
8604
// Top-level FastEmit function.
8605
8606
0
unsigned fastEmit_ri_Predicate_shr_imm32(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8607
0
  switch (Opcode) {
8608
0
  case ARMISD::VQRSHRNsIMM: return fastEmit_ARMISD_VQRSHRNsIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8609
0
  case ARMISD::VQRSHRNsuIMM: return fastEmit_ARMISD_VQRSHRNsuIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8610
0
  case ARMISD::VQRSHRNuIMM: return fastEmit_ARMISD_VQRSHRNuIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8611
0
  case ARMISD::VQSHRNsIMM: return fastEmit_ARMISD_VQSHRNsIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8612
0
  case ARMISD::VQSHRNsuIMM: return fastEmit_ARMISD_VQSHRNsuIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8613
0
  case ARMISD::VQSHRNuIMM: return fastEmit_ARMISD_VQSHRNuIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8614
0
  case ARMISD::VRSHRNIMM: return fastEmit_ARMISD_VRSHRNIMM_ri_Predicate_shr_imm32(VT, RetVT, Op0, imm1);
8615
0
  default: return 0;
8616
0
  }
8617
0
}
8618
8619
// FastEmit functions for ARMISD::VDUPLANE.
8620
8621
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v8i8_ri_Predicate_VectorIndex32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8622
0
  if (RetVT.SimpleTy != MVT::v16i8)
8623
0
    return 0;
8624
0
  if ((Subtarget->hasNEON())) {
8625
0
    return fastEmitInst_ri(ARM::VDUPLN8q, &ARM::QPRRegClass, Op0, imm1);
8626
0
  }
8627
0
  return 0;
8628
0
}
8629
8630
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v4i16_ri_Predicate_VectorIndex32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8631
0
  if (RetVT.SimpleTy != MVT::v8i16)
8632
0
    return 0;
8633
0
  if ((Subtarget->hasNEON())) {
8634
0
    return fastEmitInst_ri(ARM::VDUPLN16q, &ARM::QPRRegClass, Op0, imm1);
8635
0
  }
8636
0
  return 0;
8637
0
}
8638
8639
0
unsigned fastEmit_ARMISD_VDUPLANE_MVT_v2i32_ri_Predicate_VectorIndex32(MVT RetVT, unsigned Op0, uint64_t imm1) {
8640
0
  if (RetVT.SimpleTy != MVT::v4i32)
8641
0
    return 0;
8642
0
  if ((Subtarget->hasNEON())) {
8643
0
    return fastEmitInst_ri(ARM::VDUPLN32q, &ARM::QPRRegClass, Op0, imm1);
8644
0
  }
8645
0
  return 0;
8646
0
}
8647
8648
0
unsigned fastEmit_ARMISD_VDUPLANE_ri_Predicate_VectorIndex32(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8649
0
  switch (VT.SimpleTy) {
8650
0
  case MVT::v8i8: return fastEmit_ARMISD_VDUPLANE_MVT_v8i8_ri_Predicate_VectorIndex32(RetVT, Op0, imm1);
8651
0
  case MVT::v4i16: return fastEmit_ARMISD_VDUPLANE_MVT_v4i16_ri_Predicate_VectorIndex32(RetVT, Op0, imm1);
8652
0
  case MVT::v2i32: return fastEmit_ARMISD_VDUPLANE_MVT_v2i32_ri_Predicate_VectorIndex32(RetVT, Op0, imm1);
8653
0
  default: return 0;
8654
0
  }
8655
0
}
8656
8657
// Top-level FastEmit function.
8658
8659
0
unsigned fastEmit_ri_Predicate_VectorIndex32(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8660
0
  switch (Opcode) {
8661
0
  case ARMISD::VDUPLANE: return fastEmit_ARMISD_VDUPLANE_ri_Predicate_VectorIndex32(VT, RetVT, Op0, imm1);
8662
0
  default: return 0;
8663
0
  }
8664
0
}
8665
8666
// FastEmit functions for ARMISD::VSHLIMM.
8667
8668
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v4i32_ri_Predicate_imm0_31(MVT RetVT, unsigned Op0, uint64_t imm1) {
8669
0
  if (RetVT.SimpleTy != MVT::v4i32)
8670
0
    return 0;
8671
0
  if ((Subtarget->hasMVEIntegerOps())) {
8672
0
    return fastEmitInst_ri(ARM::MVE_VSHL_immi32, &ARM::MQPRRegClass, Op0, imm1);
8673
0
  }
8674
0
  return 0;
8675
0
}
8676
8677
0
unsigned fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_31(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8678
0
  switch (VT.SimpleTy) {
8679
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHLIMM_MVT_v4i32_ri_Predicate_imm0_31(RetVT, Op0, imm1);
8680
0
  default: return 0;
8681
0
  }
8682
0
}
8683
8684
// FastEmit functions for ARMISD::VSHRsIMM.
8685
8686
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v4i32_ri_Predicate_imm0_31(MVT RetVT, unsigned Op0, uint64_t imm1) {
8687
0
  if (RetVT.SimpleTy != MVT::v4i32)
8688
0
    return 0;
8689
0
  if ((Subtarget->hasMVEIntegerOps())) {
8690
0
    return fastEmitInst_ri(ARM::MVE_VSHR_imms32, &ARM::MQPRRegClass, Op0, imm1);
8691
0
  }
8692
0
  return 0;
8693
0
}
8694
8695
0
unsigned fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_31(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8696
0
  switch (VT.SimpleTy) {
8697
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHRsIMM_MVT_v4i32_ri_Predicate_imm0_31(RetVT, Op0, imm1);
8698
0
  default: return 0;
8699
0
  }
8700
0
}
8701
8702
// FastEmit functions for ARMISD::VSHRuIMM.
8703
8704
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v4i32_ri_Predicate_imm0_31(MVT RetVT, unsigned Op0, uint64_t imm1) {
8705
0
  if (RetVT.SimpleTy != MVT::v4i32)
8706
0
    return 0;
8707
0
  if ((Subtarget->hasMVEIntegerOps())) {
8708
0
    return fastEmitInst_ri(ARM::MVE_VSHR_immu32, &ARM::MQPRRegClass, Op0, imm1);
8709
0
  }
8710
0
  return 0;
8711
0
}
8712
8713
0
unsigned fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_31(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8714
0
  switch (VT.SimpleTy) {
8715
0
  case MVT::v4i32: return fastEmit_ARMISD_VSHRuIMM_MVT_v4i32_ri_Predicate_imm0_31(RetVT, Op0, imm1);
8716
0
  default: return 0;
8717
0
  }
8718
0
}
8719
8720
// Top-level FastEmit function.
8721
8722
0
unsigned fastEmit_ri_Predicate_imm0_31(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8723
0
  switch (Opcode) {
8724
0
  case ARMISD::VSHLIMM: return fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_31(VT, RetVT, Op0, imm1);
8725
0
  case ARMISD::VSHRsIMM: return fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_31(VT, RetVT, Op0, imm1);
8726
0
  case ARMISD::VSHRuIMM: return fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_31(VT, RetVT, Op0, imm1);
8727
0
  default: return 0;
8728
0
  }
8729
0
}
8730
8731
// FastEmit functions for ARMISD::VSHLIMM.
8732
8733
0
unsigned fastEmit_ARMISD_VSHLIMM_MVT_v8i16_ri_Predicate_imm0_15(MVT RetVT, unsigned Op0, uint64_t imm1) {
8734
0
  if (RetVT.SimpleTy != MVT::v8i16)
8735
0
    return 0;
8736
0
  if ((Subtarget->hasMVEIntegerOps())) {
8737
0
    return fastEmitInst_ri(ARM::MVE_VSHL_immi16, &ARM::MQPRRegClass, Op0, imm1);
8738
0
  }
8739
0
  return 0;
8740
0
}
8741
8742
0
unsigned fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_15(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8743
0
  switch (VT.SimpleTy) {
8744
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHLIMM_MVT_v8i16_ri_Predicate_imm0_15(RetVT, Op0, imm1);
8745
0
  default: return 0;
8746
0
  }
8747
0
}
8748
8749
// FastEmit functions for ARMISD::VSHRsIMM.
8750
8751
0
unsigned fastEmit_ARMISD_VSHRsIMM_MVT_v8i16_ri_Predicate_imm0_15(MVT RetVT, unsigned Op0, uint64_t imm1) {
8752
0
  if (RetVT.SimpleTy != MVT::v8i16)
8753
0
    return 0;
8754
0
  if ((Subtarget->hasMVEIntegerOps())) {
8755
0
    return fastEmitInst_ri(ARM::MVE_VSHR_imms16, &ARM::MQPRRegClass, Op0, imm1);
8756
0
  }
8757
0
  return 0;
8758
0
}
8759
8760
0
unsigned fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_15(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8761
0
  switch (VT.SimpleTy) {
8762
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHRsIMM_MVT_v8i16_ri_Predicate_imm0_15(RetVT, Op0, imm1);
8763
0
  default: return 0;
8764
0
  }
8765
0
}
8766
8767
// FastEmit functions for ARMISD::VSHRuIMM.
8768
8769
0
unsigned fastEmit_ARMISD_VSHRuIMM_MVT_v8i16_ri_Predicate_imm0_15(MVT RetVT, unsigned Op0, uint64_t imm1) {
8770
0
  if (RetVT.SimpleTy != MVT::v8i16)
8771
0
    return 0;
8772
0
  if ((Subtarget->hasMVEIntegerOps())) {
8773
0
    return fastEmitInst_ri(ARM::MVE_VSHR_immu16, &ARM::MQPRRegClass, Op0, imm1);
8774
0
  }
8775
0
  return 0;
8776
0
}
8777
8778
0
unsigned fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_15(MVT VT, MVT RetVT, unsigned Op0, uint64_t imm1) {
8779
0
  switch (VT.SimpleTy) {
8780
0
  case MVT::v8i16: return fastEmit_ARMISD_VSHRuIMM_MVT_v8i16_ri_Predicate_imm0_15(RetVT, Op0, imm1);
8781
0
  default: return 0;
8782
0
  }
8783
0
}
8784
8785
// Top-level FastEmit function.
8786
8787
0
unsigned fastEmit_ri_Predicate_imm0_15(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0, uint64_t imm1) {
8788
0
  switch (Opcode) {
8789
0
  case ARMISD::VSHLIMM: return fastEmit_ARMISD_VSHLIMM_ri_Predicate_imm0_15(VT, RetVT, Op0, imm1);
8790
0
  case ARMISD::VSHRsIMM: return fastEmit_ARMISD_VSHRsIMM_ri_Predicate_imm0_15(VT, RetVT, Op0, imm1);
8791
0
  case ARMISD::VSHRuIMM: return fastEmit_ARMISD_VSHRuIMM_ri_Predicate_imm0_15(VT, RetVT, Op0, imm1);
8792
0
  default: return 0;
8793
0
  }
8794
0
}
8795
8796
// FastEmit functions for ISD::Constant.
8797
8798
0
unsigned fastEmit_ISD_Constant_MVT_i32_i(MVT RetVT, uint64_t imm0) {
8799
0
  if (RetVT.SimpleTy != MVT::i32)
8800
0
    return 0;
8801
0
  if ((Subtarget->isThumb()) && (Subtarget->useMovt())) {
8802
0
    return fastEmitInst_i(ARM::t2MOVi32imm, &ARM::rGPRRegClass, imm0);
8803
0
  }
8804
0
  if ((!Subtarget->useMovt()) && (Subtarget->genExecuteOnly()) && (Subtarget->isThumb1Only())) {
8805
0
    return fastEmitInst_i(ARM::tMOVi32imm, &ARM::rGPRRegClass, imm0);
8806
0
  }
8807
0
  return 0;
8808
0
}
8809
8810
0
unsigned fastEmit_ISD_Constant_i(MVT VT, MVT RetVT, uint64_t imm0) {
8811
0
  switch (VT.SimpleTy) {
8812
0
  case MVT::i32: return fastEmit_ISD_Constant_MVT_i32_i(RetVT, imm0);
8813
0
  default: return 0;
8814
0
  }
8815
0
}
8816
8817
// Top-level FastEmit function.
8818
8819
0
unsigned fastEmit_i(MVT VT, MVT RetVT, unsigned Opcode, uint64_t imm0) override {
8820
0
  switch (Opcode) {
8821
0
  case ISD::Constant: return fastEmit_ISD_Constant_i(VT, RetVT, imm0);
8822
0
  default: return 0;
8823
0
  }
8824
0
}
8825