Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/LoongArch/LoongArchGenRegisterInfo.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Target Register Enum Values                                                *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
10
#ifdef GET_REGINFO_ENUM
11
#undef GET_REGINFO_ENUM
12
13
namespace llvm {
14
15
class MCRegisterClass;
16
extern const MCRegisterClass LoongArchMCRegisterClasses[];
17
18
namespace LoongArch {
19
enum {
20
  NoRegister,
21
  F0 = 1,
22
  F1 = 2,
23
  F2 = 3,
24
  F3 = 4,
25
  F4 = 5,
26
  F5 = 6,
27
  F6 = 7,
28
  F7 = 8,
29
  F8 = 9,
30
  F9 = 10,
31
  F10 = 11,
32
  F11 = 12,
33
  F12 = 13,
34
  F13 = 14,
35
  F14 = 15,
36
  F15 = 16,
37
  F16 = 17,
38
  F17 = 18,
39
  F18 = 19,
40
  F19 = 20,
41
  F20 = 21,
42
  F21 = 22,
43
  F22 = 23,
44
  F23 = 24,
45
  F24 = 25,
46
  F25 = 26,
47
  F26 = 27,
48
  F27 = 28,
49
  F28 = 29,
50
  F29 = 30,
51
  F30 = 31,
52
  F31 = 32,
53
  FCC0 = 33,
54
  FCC1 = 34,
55
  FCC2 = 35,
56
  FCC3 = 36,
57
  FCC4 = 37,
58
  FCC5 = 38,
59
  FCC6 = 39,
60
  FCC7 = 40,
61
  FCSR0 = 41,
62
  FCSR1 = 42,
63
  FCSR2 = 43,
64
  FCSR3 = 44,
65
  R0 = 45,
66
  R1 = 46,
67
  R2 = 47,
68
  R3 = 48,
69
  R4 = 49,
70
  R5 = 50,
71
  R6 = 51,
72
  R7 = 52,
73
  R8 = 53,
74
  R9 = 54,
75
  R10 = 55,
76
  R11 = 56,
77
  R12 = 57,
78
  R13 = 58,
79
  R14 = 59,
80
  R15 = 60,
81
  R16 = 61,
82
  R17 = 62,
83
  R18 = 63,
84
  R19 = 64,
85
  R20 = 65,
86
  R21 = 66,
87
  R22 = 67,
88
  R23 = 68,
89
  R24 = 69,
90
  R25 = 70,
91
  R26 = 71,
92
  R27 = 72,
93
  R28 = 73,
94
  R29 = 74,
95
  R30 = 75,
96
  R31 = 76,
97
  SCR0 = 77,
98
  SCR1 = 78,
99
  SCR2 = 79,
100
  SCR3 = 80,
101
  VR0 = 81,
102
  VR1 = 82,
103
  VR2 = 83,
104
  VR3 = 84,
105
  VR4 = 85,
106
  VR5 = 86,
107
  VR6 = 87,
108
  VR7 = 88,
109
  VR8 = 89,
110
  VR9 = 90,
111
  VR10 = 91,
112
  VR11 = 92,
113
  VR12 = 93,
114
  VR13 = 94,
115
  VR14 = 95,
116
  VR15 = 96,
117
  VR16 = 97,
118
  VR17 = 98,
119
  VR18 = 99,
120
  VR19 = 100,
121
  VR20 = 101,
122
  VR21 = 102,
123
  VR22 = 103,
124
  VR23 = 104,
125
  VR24 = 105,
126
  VR25 = 106,
127
  VR26 = 107,
128
  VR27 = 108,
129
  VR28 = 109,
130
  VR29 = 110,
131
  VR30 = 111,
132
  VR31 = 112,
133
  XR0 = 113,
134
  XR1 = 114,
135
  XR2 = 115,
136
  XR3 = 116,
137
  XR4 = 117,
138
  XR5 = 118,
139
  XR6 = 119,
140
  XR7 = 120,
141
  XR8 = 121,
142
  XR9 = 122,
143
  XR10 = 123,
144
  XR11 = 124,
145
  XR12 = 125,
146
  XR13 = 126,
147
  XR14 = 127,
148
  XR15 = 128,
149
  XR16 = 129,
150
  XR17 = 130,
151
  XR18 = 131,
152
  XR19 = 132,
153
  XR20 = 133,
154
  XR21 = 134,
155
  XR22 = 135,
156
  XR23 = 136,
157
  XR24 = 137,
158
  XR25 = 138,
159
  XR26 = 139,
160
  XR27 = 140,
161
  XR28 = 141,
162
  XR29 = 142,
163
  XR30 = 143,
164
  XR31 = 144,
165
  F0_64 = 145,
166
  F1_64 = 146,
167
  F2_64 = 147,
168
  F3_64 = 148,
169
  F4_64 = 149,
170
  F5_64 = 150,
171
  F6_64 = 151,
172
  F7_64 = 152,
173
  F8_64 = 153,
174
  F9_64 = 154,
175
  F10_64 = 155,
176
  F11_64 = 156,
177
  F12_64 = 157,
178
  F13_64 = 158,
179
  F14_64 = 159,
180
  F15_64 = 160,
181
  F16_64 = 161,
182
  F17_64 = 162,
183
  F18_64 = 163,
184
  F19_64 = 164,
185
  F20_64 = 165,
186
  F21_64 = 166,
187
  F22_64 = 167,
188
  F23_64 = 168,
189
  F24_64 = 169,
190
  F25_64 = 170,
191
  F26_64 = 171,
192
  F27_64 = 172,
193
  F28_64 = 173,
194
  F29_64 = 174,
195
  F30_64 = 175,
196
  F31_64 = 176,
197
  NUM_TARGET_REGS // 177
198
};
199
} // end namespace LoongArch
200
201
// Register classes
202
203
namespace LoongArch {
204
enum {
205
  FPR32RegClassID = 0,
206
  GPRRegClassID = 1,
207
  GPRTRegClassID = 2,
208
  CFRRegClassID = 3,
209
  FCSRRegClassID = 4,
210
  SCRRegClassID = 5,
211
  FPR64RegClassID = 6,
212
  LSX128RegClassID = 7,
213
  LASX256RegClassID = 8,
214
215
};
216
} // end namespace LoongArch
217
218
219
// Register alternate name indices
220
221
namespace LoongArch {
222
enum {
223
  NoRegAltName, // 0
224
  RegAliasName, // 1
225
  NUM_TARGET_REG_ALT_NAMES = 2
226
};
227
} // end namespace LoongArch
228
229
230
// Subregister indices
231
232
namespace LoongArch {
233
enum : uint16_t {
234
  NoSubRegister,
235
  sub_32, // 1
236
  sub_64, // 2
237
  sub_128,  // 3
238
  NUM_TARGET_SUBREGS
239
};
240
} // end namespace LoongArch
241
242
// Register pressure sets enum.
243
namespace LoongArch {
244
enum RegisterPressureSets {
245
  CFR = 0,
246
  GPRT = 1,
247
  FPR32 = 2,
248
  GPR = 3,
249
};
250
} // end namespace LoongArch
251
252
} // end namespace llvm
253
254
#endif // GET_REGINFO_ENUM
255
256
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
257
|*                                                                            *|
258
|* MC Register Information                                                    *|
259
|*                                                                            *|
260
|* Automatically generated file, do not edit!                                 *|
261
|*                                                                            *|
262
\*===----------------------------------------------------------------------===*/
263
264
265
#ifdef GET_REGINFO_MC_DESC
266
#undef GET_REGINFO_MC_DESC
267
268
namespace llvm {
269
270
extern const int16_t LoongArchRegDiffLists[] = {
271
  /* 0 */ -32, 64, -144, 0,
272
  /* 4 */ 144, -64, 32, 0,
273
};
274
275
extern const LaneBitmask LoongArchLaneMaskLists[] = {
276
  /* 0 */ LaneBitmask(0x0000000000000001), LaneBitmask::getAll(),
277
  /* 2 */ LaneBitmask(0xFFFFFFFFFFFFFFFF), LaneBitmask::getAll(),
278
};
279
280
extern const uint16_t LoongArchSubRegIdxLists[] = {
281
  /* 0 */ 3, 2, 1, 0,
282
};
283
284
extern const MCRegisterInfo::SubRegCoveredBits LoongArchSubRegIdxRanges[] = {
285
  { 65535, 65535 },
286
  { 0, 32 },  // sub_32
287
  { 0, 64 },  // sub_64
288
  { 0, 128 }, // sub_128
289
};
290
291
292
#ifdef __GNUC__
293
#pragma GCC diagnostic push
294
#pragma GCC diagnostic ignored "-Woverlength-strings"
295
#endif
296
extern const char LoongArchRegStrings[] = {
297
  /* 0 */ "F10\0"
298
  /* 4 */ "VR10\0"
299
  /* 9 */ "XR10\0"
300
  /* 14 */ "F20\0"
301
  /* 18 */ "VR20\0"
302
  /* 23 */ "XR20\0"
303
  /* 28 */ "F30\0"
304
  /* 32 */ "VR30\0"
305
  /* 37 */ "XR30\0"
306
  /* 42 */ "FCC0\0"
307
  /* 47 */ "F0\0"
308
  /* 50 */ "SCR0\0"
309
  /* 55 */ "FCSR0\0"
310
  /* 61 */ "VR0\0"
311
  /* 65 */ "XR0\0"
312
  /* 69 */ "F11\0"
313
  /* 73 */ "VR11\0"
314
  /* 78 */ "XR11\0"
315
  /* 83 */ "F21\0"
316
  /* 87 */ "VR21\0"
317
  /* 92 */ "XR21\0"
318
  /* 97 */ "F31\0"
319
  /* 101 */ "VR31\0"
320
  /* 106 */ "XR31\0"
321
  /* 111 */ "FCC1\0"
322
  /* 116 */ "F1\0"
323
  /* 119 */ "SCR1\0"
324
  /* 124 */ "FCSR1\0"
325
  /* 130 */ "VR1\0"
326
  /* 134 */ "XR1\0"
327
  /* 138 */ "F12\0"
328
  /* 142 */ "VR12\0"
329
  /* 147 */ "XR12\0"
330
  /* 152 */ "F22\0"
331
  /* 156 */ "VR22\0"
332
  /* 161 */ "XR22\0"
333
  /* 166 */ "FCC2\0"
334
  /* 171 */ "F2\0"
335
  /* 174 */ "SCR2\0"
336
  /* 179 */ "FCSR2\0"
337
  /* 185 */ "VR2\0"
338
  /* 189 */ "XR2\0"
339
  /* 193 */ "F13\0"
340
  /* 197 */ "VR13\0"
341
  /* 202 */ "XR13\0"
342
  /* 207 */ "F23\0"
343
  /* 211 */ "VR23\0"
344
  /* 216 */ "XR23\0"
345
  /* 221 */ "FCC3\0"
346
  /* 226 */ "F3\0"
347
  /* 229 */ "SCR3\0"
348
  /* 234 */ "FCSR3\0"
349
  /* 240 */ "VR3\0"
350
  /* 244 */ "XR3\0"
351
  /* 248 */ "F14\0"
352
  /* 252 */ "VR14\0"
353
  /* 257 */ "XR14\0"
354
  /* 262 */ "F24\0"
355
  /* 266 */ "VR24\0"
356
  /* 271 */ "XR24\0"
357
  /* 276 */ "F10_64\0"
358
  /* 283 */ "F20_64\0"
359
  /* 290 */ "F30_64\0"
360
  /* 297 */ "F0_64\0"
361
  /* 303 */ "F11_64\0"
362
  /* 310 */ "F21_64\0"
363
  /* 317 */ "F31_64\0"
364
  /* 324 */ "F1_64\0"
365
  /* 330 */ "F12_64\0"
366
  /* 337 */ "F22_64\0"
367
  /* 344 */ "F2_64\0"
368
  /* 350 */ "F13_64\0"
369
  /* 357 */ "F23_64\0"
370
  /* 364 */ "F3_64\0"
371
  /* 370 */ "F14_64\0"
372
  /* 377 */ "F24_64\0"
373
  /* 384 */ "F4_64\0"
374
  /* 390 */ "F15_64\0"
375
  /* 397 */ "F25_64\0"
376
  /* 404 */ "F5_64\0"
377
  /* 410 */ "F16_64\0"
378
  /* 417 */ "F26_64\0"
379
  /* 424 */ "F6_64\0"
380
  /* 430 */ "F17_64\0"
381
  /* 437 */ "F27_64\0"
382
  /* 444 */ "F7_64\0"
383
  /* 450 */ "F18_64\0"
384
  /* 457 */ "F28_64\0"
385
  /* 464 */ "F8_64\0"
386
  /* 470 */ "F19_64\0"
387
  /* 477 */ "F29_64\0"
388
  /* 484 */ "F9_64\0"
389
  /* 490 */ "FCC4\0"
390
  /* 495 */ "F4\0"
391
  /* 498 */ "VR4\0"
392
  /* 502 */ "XR4\0"
393
  /* 506 */ "F15\0"
394
  /* 510 */ "VR15\0"
395
  /* 515 */ "XR15\0"
396
  /* 520 */ "F25\0"
397
  /* 524 */ "VR25\0"
398
  /* 529 */ "XR25\0"
399
  /* 534 */ "FCC5\0"
400
  /* 539 */ "F5\0"
401
  /* 542 */ "VR5\0"
402
  /* 546 */ "XR5\0"
403
  /* 550 */ "F16\0"
404
  /* 554 */ "VR16\0"
405
  /* 559 */ "XR16\0"
406
  /* 564 */ "F26\0"
407
  /* 568 */ "VR26\0"
408
  /* 573 */ "XR26\0"
409
  /* 578 */ "FCC6\0"
410
  /* 583 */ "F6\0"
411
  /* 586 */ "VR6\0"
412
  /* 590 */ "XR6\0"
413
  /* 594 */ "F17\0"
414
  /* 598 */ "VR17\0"
415
  /* 603 */ "XR17\0"
416
  /* 608 */ "F27\0"
417
  /* 612 */ "VR27\0"
418
  /* 617 */ "XR27\0"
419
  /* 622 */ "FCC7\0"
420
  /* 627 */ "F7\0"
421
  /* 630 */ "VR7\0"
422
  /* 634 */ "XR7\0"
423
  /* 638 */ "F18\0"
424
  /* 642 */ "VR18\0"
425
  /* 647 */ "XR18\0"
426
  /* 652 */ "F28\0"
427
  /* 656 */ "VR28\0"
428
  /* 661 */ "XR28\0"
429
  /* 666 */ "F8\0"
430
  /* 669 */ "VR8\0"
431
  /* 673 */ "XR8\0"
432
  /* 677 */ "F19\0"
433
  /* 681 */ "VR19\0"
434
  /* 686 */ "XR19\0"
435
  /* 691 */ "F29\0"
436
  /* 695 */ "VR29\0"
437
  /* 700 */ "XR29\0"
438
  /* 705 */ "F9\0"
439
  /* 708 */ "VR9\0"
440
  /* 712 */ "XR9\0"
441
};
442
#ifdef __GNUC__
443
#pragma GCC diagnostic pop
444
#endif
445
446
extern const MCRegisterDesc LoongArchRegDesc[] = { // Descriptors
447
  { 3, 0, 0, 0, 0, 0 },
448
  { 47, 3, 4, 3, 12288, 2 },
449
  { 116, 3, 4, 3, 12289, 2 },
450
  { 171, 3, 4, 3, 12290, 2 },
451
  { 226, 3, 4, 3, 12291, 2 },
452
  { 495, 3, 4, 3, 12292, 2 },
453
  { 539, 3, 4, 3, 12293, 2 },
454
  { 583, 3, 4, 3, 12294, 2 },
455
  { 627, 3, 4, 3, 12295, 2 },
456
  { 666, 3, 4, 3, 12296, 2 },
457
  { 705, 3, 4, 3, 12297, 2 },
458
  { 0, 3, 4, 3, 12298, 2 },
459
  { 69, 3, 4, 3, 12299, 2 },
460
  { 138, 3, 4, 3, 12300, 2 },
461
  { 193, 3, 4, 3, 12301, 2 },
462
  { 248, 3, 4, 3, 12302, 2 },
463
  { 506, 3, 4, 3, 12303, 2 },
464
  { 550, 3, 4, 3, 12304, 2 },
465
  { 594, 3, 4, 3, 12305, 2 },
466
  { 638, 3, 4, 3, 12306, 2 },
467
  { 677, 3, 4, 3, 12307, 2 },
468
  { 14, 3, 4, 3, 12308, 2 },
469
  { 83, 3, 4, 3, 12309, 2 },
470
  { 152, 3, 4, 3, 12310, 2 },
471
  { 207, 3, 4, 3, 12311, 2 },
472
  { 262, 3, 4, 3, 12312, 2 },
473
  { 520, 3, 4, 3, 12313, 2 },
474
  { 564, 3, 4, 3, 12314, 2 },
475
  { 608, 3, 4, 3, 12315, 2 },
476
  { 652, 3, 4, 3, 12316, 2 },
477
  { 691, 3, 4, 3, 12317, 2 },
478
  { 28, 3, 4, 3, 12318, 2 },
479
  { 97, 3, 4, 3, 12319, 2 },
480
  { 42, 3, 3, 3, 12320, 2 },
481
  { 111, 3, 3, 3, 12321, 2 },
482
  { 166, 3, 3, 3, 12322, 2 },
483
  { 221, 3, 3, 3, 12323, 2 },
484
  { 490, 3, 3, 3, 12324, 2 },
485
  { 534, 3, 3, 3, 12325, 2 },
486
  { 578, 3, 3, 3, 12326, 2 },
487
  { 622, 3, 3, 3, 12327, 2 },
488
  { 55, 3, 3, 3, 12328, 2 },
489
  { 124, 3, 3, 3, 12329, 2 },
490
  { 179, 3, 3, 3, 12330, 2 },
491
  { 234, 3, 3, 3, 12331, 2 },
492
  { 52, 3, 3, 3, 12332, 2 },
493
  { 121, 3, 3, 3, 12333, 2 },
494
  { 176, 3, 3, 3, 12334, 2 },
495
  { 231, 3, 3, 3, 12335, 2 },
496
  { 499, 3, 3, 3, 12336, 2 },
497
  { 543, 3, 3, 3, 12337, 2 },
498
  { 587, 3, 3, 3, 12338, 2 },
499
  { 631, 3, 3, 3, 12339, 2 },
500
  { 670, 3, 3, 3, 12340, 2 },
501
  { 709, 3, 3, 3, 12341, 2 },
502
  { 5, 3, 3, 3, 12342, 2 },
503
  { 74, 3, 3, 3, 12343, 2 },
504
  { 143, 3, 3, 3, 12344, 2 },
505
  { 198, 3, 3, 3, 12345, 2 },
506
  { 253, 3, 3, 3, 12346, 2 },
507
  { 511, 3, 3, 3, 12347, 2 },
508
  { 555, 3, 3, 3, 12348, 2 },
509
  { 599, 3, 3, 3, 12349, 2 },
510
  { 643, 3, 3, 3, 12350, 2 },
511
  { 682, 3, 3, 3, 12351, 2 },
512
  { 19, 3, 3, 3, 12352, 2 },
513
  { 88, 3, 3, 3, 12353, 2 },
514
  { 157, 3, 3, 3, 12354, 2 },
515
  { 212, 3, 3, 3, 12355, 2 },
516
  { 267, 3, 3, 3, 12356, 2 },
517
  { 525, 3, 3, 3, 12357, 2 },
518
  { 569, 3, 3, 3, 12358, 2 },
519
  { 613, 3, 3, 3, 12359, 2 },
520
  { 657, 3, 3, 3, 12360, 2 },
521
  { 696, 3, 3, 3, 12361, 2 },
522
  { 33, 3, 3, 3, 12362, 2 },
523
  { 102, 3, 3, 3, 12363, 2 },
524
  { 50, 3, 3, 3, 12364, 2 },
525
  { 119, 3, 3, 3, 12365, 2 },
526
  { 174, 3, 3, 3, 12366, 2 },
527
  { 229, 3, 3, 3, 12367, 2 },
528
  { 61, 1, 6, 1, 12288, 0 },
529
  { 130, 1, 6, 1, 12289, 0 },
530
  { 185, 1, 6, 1, 12290, 0 },
531
  { 240, 1, 6, 1, 12291, 0 },
532
  { 498, 1, 6, 1, 12292, 0 },
533
  { 542, 1, 6, 1, 12293, 0 },
534
  { 586, 1, 6, 1, 12294, 0 },
535
  { 630, 1, 6, 1, 12295, 0 },
536
  { 669, 1, 6, 1, 12296, 0 },
537
  { 708, 1, 6, 1, 12297, 0 },
538
  { 4, 1, 6, 1, 12298, 0 },
539
  { 73, 1, 6, 1, 12299, 0 },
540
  { 142, 1, 6, 1, 12300, 0 },
541
  { 197, 1, 6, 1, 12301, 0 },
542
  { 252, 1, 6, 1, 12302, 0 },
543
  { 510, 1, 6, 1, 12303, 0 },
544
  { 554, 1, 6, 1, 12304, 0 },
545
  { 598, 1, 6, 1, 12305, 0 },
546
  { 642, 1, 6, 1, 12306, 0 },
547
  { 681, 1, 6, 1, 12307, 0 },
548
  { 18, 1, 6, 1, 12308, 0 },
549
  { 87, 1, 6, 1, 12309, 0 },
550
  { 156, 1, 6, 1, 12310, 0 },
551
  { 211, 1, 6, 1, 12311, 0 },
552
  { 266, 1, 6, 1, 12312, 0 },
553
  { 524, 1, 6, 1, 12313, 0 },
554
  { 568, 1, 6, 1, 12314, 0 },
555
  { 612, 1, 6, 1, 12315, 0 },
556
  { 656, 1, 6, 1, 12316, 0 },
557
  { 695, 1, 6, 1, 12317, 0 },
558
  { 32, 1, 6, 1, 12318, 0 },
559
  { 101, 1, 6, 1, 12319, 0 },
560
  { 65, 0, 3, 0, 12288, 0 },
561
  { 134, 0, 3, 0, 12289, 0 },
562
  { 189, 0, 3, 0, 12290, 0 },
563
  { 244, 0, 3, 0, 12291, 0 },
564
  { 502, 0, 3, 0, 12292, 0 },
565
  { 546, 0, 3, 0, 12293, 0 },
566
  { 590, 0, 3, 0, 12294, 0 },
567
  { 634, 0, 3, 0, 12295, 0 },
568
  { 673, 0, 3, 0, 12296, 0 },
569
  { 712, 0, 3, 0, 12297, 0 },
570
  { 9, 0, 3, 0, 12298, 0 },
571
  { 78, 0, 3, 0, 12299, 0 },
572
  { 147, 0, 3, 0, 12300, 0 },
573
  { 202, 0, 3, 0, 12301, 0 },
574
  { 257, 0, 3, 0, 12302, 0 },
575
  { 515, 0, 3, 0, 12303, 0 },
576
  { 559, 0, 3, 0, 12304, 0 },
577
  { 603, 0, 3, 0, 12305, 0 },
578
  { 647, 0, 3, 0, 12306, 0 },
579
  { 686, 0, 3, 0, 12307, 0 },
580
  { 23, 0, 3, 0, 12308, 0 },
581
  { 92, 0, 3, 0, 12309, 0 },
582
  { 161, 0, 3, 0, 12310, 0 },
583
  { 216, 0, 3, 0, 12311, 0 },
584
  { 271, 0, 3, 0, 12312, 0 },
585
  { 529, 0, 3, 0, 12313, 0 },
586
  { 573, 0, 3, 0, 12314, 0 },
587
  { 617, 0, 3, 0, 12315, 0 },
588
  { 661, 0, 3, 0, 12316, 0 },
589
  { 700, 0, 3, 0, 12317, 0 },
590
  { 37, 0, 3, 0, 12318, 0 },
591
  { 106, 0, 3, 0, 12319, 0 },
592
  { 297, 2, 5, 2, 12288, 0 },
593
  { 324, 2, 5, 2, 12289, 0 },
594
  { 344, 2, 5, 2, 12290, 0 },
595
  { 364, 2, 5, 2, 12291, 0 },
596
  { 384, 2, 5, 2, 12292, 0 },
597
  { 404, 2, 5, 2, 12293, 0 },
598
  { 424, 2, 5, 2, 12294, 0 },
599
  { 444, 2, 5, 2, 12295, 0 },
600
  { 464, 2, 5, 2, 12296, 0 },
601
  { 484, 2, 5, 2, 12297, 0 },
602
  { 276, 2, 5, 2, 12298, 0 },
603
  { 303, 2, 5, 2, 12299, 0 },
604
  { 330, 2, 5, 2, 12300, 0 },
605
  { 350, 2, 5, 2, 12301, 0 },
606
  { 370, 2, 5, 2, 12302, 0 },
607
  { 390, 2, 5, 2, 12303, 0 },
608
  { 410, 2, 5, 2, 12304, 0 },
609
  { 430, 2, 5, 2, 12305, 0 },
610
  { 450, 2, 5, 2, 12306, 0 },
611
  { 470, 2, 5, 2, 12307, 0 },
612
  { 283, 2, 5, 2, 12308, 0 },
613
  { 310, 2, 5, 2, 12309, 0 },
614
  { 337, 2, 5, 2, 12310, 0 },
615
  { 357, 2, 5, 2, 12311, 0 },
616
  { 377, 2, 5, 2, 12312, 0 },
617
  { 397, 2, 5, 2, 12313, 0 },
618
  { 417, 2, 5, 2, 12314, 0 },
619
  { 437, 2, 5, 2, 12315, 0 },
620
  { 457, 2, 5, 2, 12316, 0 },
621
  { 477, 2, 5, 2, 12317, 0 },
622
  { 290, 2, 5, 2, 12318, 0 },
623
  { 317, 2, 5, 2, 12319, 0 },
624
};
625
626
extern const MCPhysReg LoongArchRegUnitRoots[][2] = {
627
  { LoongArch::F0 },
628
  { LoongArch::F1 },
629
  { LoongArch::F2 },
630
  { LoongArch::F3 },
631
  { LoongArch::F4 },
632
  { LoongArch::F5 },
633
  { LoongArch::F6 },
634
  { LoongArch::F7 },
635
  { LoongArch::F8 },
636
  { LoongArch::F9 },
637
  { LoongArch::F10 },
638
  { LoongArch::F11 },
639
  { LoongArch::F12 },
640
  { LoongArch::F13 },
641
  { LoongArch::F14 },
642
  { LoongArch::F15 },
643
  { LoongArch::F16 },
644
  { LoongArch::F17 },
645
  { LoongArch::F18 },
646
  { LoongArch::F19 },
647
  { LoongArch::F20 },
648
  { LoongArch::F21 },
649
  { LoongArch::F22 },
650
  { LoongArch::F23 },
651
  { LoongArch::F24 },
652
  { LoongArch::F25 },
653
  { LoongArch::F26 },
654
  { LoongArch::F27 },
655
  { LoongArch::F28 },
656
  { LoongArch::F29 },
657
  { LoongArch::F30 },
658
  { LoongArch::F31 },
659
  { LoongArch::FCC0 },
660
  { LoongArch::FCC1 },
661
  { LoongArch::FCC2 },
662
  { LoongArch::FCC3 },
663
  { LoongArch::FCC4 },
664
  { LoongArch::FCC5 },
665
  { LoongArch::FCC6 },
666
  { LoongArch::FCC7 },
667
  { LoongArch::FCSR0 },
668
  { LoongArch::FCSR1 },
669
  { LoongArch::FCSR2 },
670
  { LoongArch::FCSR3 },
671
  { LoongArch::R0 },
672
  { LoongArch::R1 },
673
  { LoongArch::R2 },
674
  { LoongArch::R3 },
675
  { LoongArch::R4 },
676
  { LoongArch::R5 },
677
  { LoongArch::R6 },
678
  { LoongArch::R7 },
679
  { LoongArch::R8 },
680
  { LoongArch::R9 },
681
  { LoongArch::R10 },
682
  { LoongArch::R11 },
683
  { LoongArch::R12 },
684
  { LoongArch::R13 },
685
  { LoongArch::R14 },
686
  { LoongArch::R15 },
687
  { LoongArch::R16 },
688
  { LoongArch::R17 },
689
  { LoongArch::R18 },
690
  { LoongArch::R19 },
691
  { LoongArch::R20 },
692
  { LoongArch::R21 },
693
  { LoongArch::R22 },
694
  { LoongArch::R23 },
695
  { LoongArch::R24 },
696
  { LoongArch::R25 },
697
  { LoongArch::R26 },
698
  { LoongArch::R27 },
699
  { LoongArch::R28 },
700
  { LoongArch::R29 },
701
  { LoongArch::R30 },
702
  { LoongArch::R31 },
703
  { LoongArch::SCR0 },
704
  { LoongArch::SCR1 },
705
  { LoongArch::SCR2 },
706
  { LoongArch::SCR3 },
707
};
708
709
namespace {     // Register classes...
710
  // FPR32 Register Class...
711
  const MCPhysReg FPR32[] = {
712
    LoongArch::F0, LoongArch::F1, LoongArch::F2, LoongArch::F3, LoongArch::F4, LoongArch::F5, LoongArch::F6, LoongArch::F7, LoongArch::F8, LoongArch::F9, LoongArch::F10, LoongArch::F11, LoongArch::F12, LoongArch::F13, LoongArch::F14, LoongArch::F15, LoongArch::F16, LoongArch::F17, LoongArch::F18, LoongArch::F19, LoongArch::F20, LoongArch::F21, LoongArch::F22, LoongArch::F23, LoongArch::F24, LoongArch::F25, LoongArch::F26, LoongArch::F27, LoongArch::F28, LoongArch::F29, LoongArch::F30, LoongArch::F31, 
713
  };
714
715
  // FPR32 Bit set.
716
  const uint8_t FPR32Bits[] = {
717
    0xfe, 0xff, 0xff, 0xff, 0x01, 
718
  };
719
720
  // GPR Register Class...
721
  const MCPhysReg GPR[] = {
722
    LoongArch::R4, LoongArch::R5, LoongArch::R6, LoongArch::R7, LoongArch::R8, LoongArch::R9, LoongArch::R10, LoongArch::R11, LoongArch::R12, LoongArch::R13, LoongArch::R14, LoongArch::R15, LoongArch::R16, LoongArch::R17, LoongArch::R18, LoongArch::R19, LoongArch::R20, LoongArch::R22, LoongArch::R23, LoongArch::R24, LoongArch::R25, LoongArch::R26, LoongArch::R27, LoongArch::R28, LoongArch::R29, LoongArch::R30, LoongArch::R31, LoongArch::R0, LoongArch::R1, LoongArch::R2, LoongArch::R3, LoongArch::R21, 
723
  };
724
725
  // GPR Bit set.
726
  const uint8_t GPRBits[] = {
727
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 
728
  };
729
730
  // GPRT Register Class...
731
  const MCPhysReg GPRT[] = {
732
    LoongArch::R4, LoongArch::R5, LoongArch::R6, LoongArch::R7, LoongArch::R8, LoongArch::R9, LoongArch::R10, LoongArch::R11, LoongArch::R12, LoongArch::R13, LoongArch::R14, LoongArch::R15, LoongArch::R16, LoongArch::R17, LoongArch::R18, LoongArch::R19, LoongArch::R20, 
733
  };
734
735
  // GPRT Bit set.
736
  const uint8_t GPRTBits[] = {
737
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 
738
  };
739
740
  // CFR Register Class...
741
  const MCPhysReg CFR[] = {
742
    LoongArch::FCC0, LoongArch::FCC1, LoongArch::FCC2, LoongArch::FCC3, LoongArch::FCC4, LoongArch::FCC5, LoongArch::FCC6, LoongArch::FCC7, 
743
  };
744
745
  // CFR Bit set.
746
  const uint8_t CFRBits[] = {
747
    0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 
748
  };
749
750
  // FCSR Register Class...
751
  const MCPhysReg FCSR[] = {
752
    LoongArch::FCSR0, LoongArch::FCSR1, LoongArch::FCSR2, LoongArch::FCSR3, 
753
  };
754
755
  // FCSR Bit set.
756
  const uint8_t FCSRBits[] = {
757
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 
758
  };
759
760
  // SCR Register Class...
761
  const MCPhysReg SCR[] = {
762
    LoongArch::SCR0, LoongArch::SCR1, LoongArch::SCR2, LoongArch::SCR3, 
763
  };
764
765
  // SCR Bit set.
766
  const uint8_t SCRBits[] = {
767
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 
768
  };
769
770
  // FPR64 Register Class...
771
  const MCPhysReg FPR64[] = {
772
    LoongArch::F0_64, LoongArch::F1_64, LoongArch::F2_64, LoongArch::F3_64, LoongArch::F4_64, LoongArch::F5_64, LoongArch::F6_64, LoongArch::F7_64, LoongArch::F8_64, LoongArch::F9_64, LoongArch::F10_64, LoongArch::F11_64, LoongArch::F12_64, LoongArch::F13_64, LoongArch::F14_64, LoongArch::F15_64, LoongArch::F16_64, LoongArch::F17_64, LoongArch::F18_64, LoongArch::F19_64, LoongArch::F20_64, LoongArch::F21_64, LoongArch::F22_64, LoongArch::F23_64, LoongArch::F24_64, LoongArch::F25_64, LoongArch::F26_64, LoongArch::F27_64, LoongArch::F28_64, LoongArch::F29_64, LoongArch::F30_64, LoongArch::F31_64, 
773
  };
774
775
  // FPR64 Bit set.
776
  const uint8_t FPR64Bits[] = {
777
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 
778
  };
779
780
  // LSX128 Register Class...
781
  const MCPhysReg LSX128[] = {
782
    LoongArch::VR0, LoongArch::VR1, LoongArch::VR2, LoongArch::VR3, LoongArch::VR4, LoongArch::VR5, LoongArch::VR6, LoongArch::VR7, LoongArch::VR8, LoongArch::VR9, LoongArch::VR10, LoongArch::VR11, LoongArch::VR12, LoongArch::VR13, LoongArch::VR14, LoongArch::VR15, LoongArch::VR16, LoongArch::VR17, LoongArch::VR18, LoongArch::VR19, LoongArch::VR20, LoongArch::VR21, LoongArch::VR22, LoongArch::VR23, LoongArch::VR24, LoongArch::VR25, LoongArch::VR26, LoongArch::VR27, LoongArch::VR28, LoongArch::VR29, LoongArch::VR30, LoongArch::VR31, 
783
  };
784
785
  // LSX128 Bit set.
786
  const uint8_t LSX128Bits[] = {
787
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 
788
  };
789
790
  // LASX256 Register Class...
791
  const MCPhysReg LASX256[] = {
792
    LoongArch::XR0, LoongArch::XR1, LoongArch::XR2, LoongArch::XR3, LoongArch::XR4, LoongArch::XR5, LoongArch::XR6, LoongArch::XR7, LoongArch::XR8, LoongArch::XR9, LoongArch::XR10, LoongArch::XR11, LoongArch::XR12, LoongArch::XR13, LoongArch::XR14, LoongArch::XR15, LoongArch::XR16, LoongArch::XR17, LoongArch::XR18, LoongArch::XR19, LoongArch::XR20, LoongArch::XR21, LoongArch::XR22, LoongArch::XR23, LoongArch::XR24, LoongArch::XR25, LoongArch::XR26, LoongArch::XR27, LoongArch::XR28, LoongArch::XR29, LoongArch::XR30, LoongArch::XR31, 
793
  };
794
795
  // LASX256 Bit set.
796
  const uint8_t LASX256Bits[] = {
797
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 
798
  };
799
800
} // end anonymous namespace
801
802
803
#ifdef __GNUC__
804
#pragma GCC diagnostic push
805
#pragma GCC diagnostic ignored "-Woverlength-strings"
806
#endif
807
extern const char LoongArchRegClassStrings[] = {
808
  /* 0 */ "FPR32\0"
809
  /* 6 */ "FPR64\0"
810
  /* 12 */ "LASX256\0"
811
  /* 20 */ "LSX128\0"
812
  /* 27 */ "SCR\0"
813
  /* 31 */ "CFR\0"
814
  /* 35 */ "GPR\0"
815
  /* 39 */ "FCSR\0"
816
  /* 44 */ "GPRT\0"
817
};
818
#ifdef __GNUC__
819
#pragma GCC diagnostic pop
820
#endif
821
822
extern const MCRegisterClass LoongArchMCRegisterClasses[] = {
823
  { FPR32, FPR32Bits, 0, 32, sizeof(FPR32Bits), LoongArch::FPR32RegClassID, 32, 1, true },
824
  { GPR, GPRBits, 35, 32, sizeof(GPRBits), LoongArch::GPRRegClassID, 0, 1, true },
825
  { GPRT, GPRTBits, 44, 17, sizeof(GPRTBits), LoongArch::GPRTRegClassID, 0, 1, true },
826
  { CFR, CFRBits, 31, 8, sizeof(CFRBits), LoongArch::CFRRegClassID, 0, 1, true },
827
  { FCSR, FCSRBits, 39, 4, sizeof(FCSRBits), LoongArch::FCSRRegClassID, 32, 1, false },
828
  { SCR, SCRBits, 27, 4, sizeof(SCRBits), LoongArch::SCRRegClassID, 0, 1, false },
829
  { FPR64, FPR64Bits, 6, 32, sizeof(FPR64Bits), LoongArch::FPR64RegClassID, 64, 1, true },
830
  { LSX128, LSX128Bits, 20, 32, sizeof(LSX128Bits), LoongArch::LSX128RegClassID, 128, 1, true },
831
  { LASX256, LASX256Bits, 12, 32, sizeof(LASX256Bits), LoongArch::LASX256RegClassID, 256, 1, true },
832
};
833
834
// LoongArch Dwarf<->LLVM register mappings.
835
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchDwarfFlavour0Dwarf2L[] = {
836
  { 0U, LoongArch::R0 },
837
  { 1U, LoongArch::R1 },
838
  { 2U, LoongArch::R2 },
839
  { 3U, LoongArch::R3 },
840
  { 4U, LoongArch::R4 },
841
  { 5U, LoongArch::R5 },
842
  { 6U, LoongArch::R6 },
843
  { 7U, LoongArch::R7 },
844
  { 8U, LoongArch::R8 },
845
  { 9U, LoongArch::R9 },
846
  { 10U, LoongArch::R10 },
847
  { 11U, LoongArch::R11 },
848
  { 12U, LoongArch::R12 },
849
  { 13U, LoongArch::R13 },
850
  { 14U, LoongArch::R14 },
851
  { 15U, LoongArch::R15 },
852
  { 16U, LoongArch::R16 },
853
  { 17U, LoongArch::R17 },
854
  { 18U, LoongArch::R18 },
855
  { 19U, LoongArch::R19 },
856
  { 20U, LoongArch::R20 },
857
  { 21U, LoongArch::R21 },
858
  { 22U, LoongArch::R22 },
859
  { 23U, LoongArch::R23 },
860
  { 24U, LoongArch::R24 },
861
  { 25U, LoongArch::R25 },
862
  { 26U, LoongArch::R26 },
863
  { 27U, LoongArch::R27 },
864
  { 28U, LoongArch::R28 },
865
  { 29U, LoongArch::R29 },
866
  { 30U, LoongArch::R30 },
867
  { 31U, LoongArch::R31 },
868
  { 32U, LoongArch::F0_64 },
869
  { 33U, LoongArch::F1_64 },
870
  { 34U, LoongArch::F2_64 },
871
  { 35U, LoongArch::F3_64 },
872
  { 36U, LoongArch::F4_64 },
873
  { 37U, LoongArch::F5_64 },
874
  { 38U, LoongArch::F6_64 },
875
  { 39U, LoongArch::F7_64 },
876
  { 40U, LoongArch::F8_64 },
877
  { 41U, LoongArch::F9_64 },
878
  { 42U, LoongArch::F10_64 },
879
  { 43U, LoongArch::F11_64 },
880
  { 44U, LoongArch::F12_64 },
881
  { 45U, LoongArch::F13_64 },
882
  { 46U, LoongArch::F14_64 },
883
  { 47U, LoongArch::F15_64 },
884
  { 48U, LoongArch::F16_64 },
885
  { 49U, LoongArch::F17_64 },
886
  { 50U, LoongArch::F18_64 },
887
  { 51U, LoongArch::F19_64 },
888
  { 52U, LoongArch::F20_64 },
889
  { 53U, LoongArch::F21_64 },
890
  { 54U, LoongArch::F22_64 },
891
  { 55U, LoongArch::F23_64 },
892
  { 56U, LoongArch::F24_64 },
893
  { 57U, LoongArch::F25_64 },
894
  { 58U, LoongArch::F26_64 },
895
  { 59U, LoongArch::F27_64 },
896
  { 60U, LoongArch::F28_64 },
897
  { 61U, LoongArch::F29_64 },
898
  { 62U, LoongArch::F30_64 },
899
  { 63U, LoongArch::F31_64 },
900
};
901
extern const unsigned LoongArchDwarfFlavour0Dwarf2LSize = std::size(LoongArchDwarfFlavour0Dwarf2L);
902
903
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchEHFlavour0Dwarf2L[] = {
904
  { 0U, LoongArch::R0 },
905
  { 1U, LoongArch::R1 },
906
  { 2U, LoongArch::R2 },
907
  { 3U, LoongArch::R3 },
908
  { 4U, LoongArch::R4 },
909
  { 5U, LoongArch::R5 },
910
  { 6U, LoongArch::R6 },
911
  { 7U, LoongArch::R7 },
912
  { 8U, LoongArch::R8 },
913
  { 9U, LoongArch::R9 },
914
  { 10U, LoongArch::R10 },
915
  { 11U, LoongArch::R11 },
916
  { 12U, LoongArch::R12 },
917
  { 13U, LoongArch::R13 },
918
  { 14U, LoongArch::R14 },
919
  { 15U, LoongArch::R15 },
920
  { 16U, LoongArch::R16 },
921
  { 17U, LoongArch::R17 },
922
  { 18U, LoongArch::R18 },
923
  { 19U, LoongArch::R19 },
924
  { 20U, LoongArch::R20 },
925
  { 21U, LoongArch::R21 },
926
  { 22U, LoongArch::R22 },
927
  { 23U, LoongArch::R23 },
928
  { 24U, LoongArch::R24 },
929
  { 25U, LoongArch::R25 },
930
  { 26U, LoongArch::R26 },
931
  { 27U, LoongArch::R27 },
932
  { 28U, LoongArch::R28 },
933
  { 29U, LoongArch::R29 },
934
  { 30U, LoongArch::R30 },
935
  { 31U, LoongArch::R31 },
936
  { 32U, LoongArch::F0_64 },
937
  { 33U, LoongArch::F1_64 },
938
  { 34U, LoongArch::F2_64 },
939
  { 35U, LoongArch::F3_64 },
940
  { 36U, LoongArch::F4_64 },
941
  { 37U, LoongArch::F5_64 },
942
  { 38U, LoongArch::F6_64 },
943
  { 39U, LoongArch::F7_64 },
944
  { 40U, LoongArch::F8_64 },
945
  { 41U, LoongArch::F9_64 },
946
  { 42U, LoongArch::F10_64 },
947
  { 43U, LoongArch::F11_64 },
948
  { 44U, LoongArch::F12_64 },
949
  { 45U, LoongArch::F13_64 },
950
  { 46U, LoongArch::F14_64 },
951
  { 47U, LoongArch::F15_64 },
952
  { 48U, LoongArch::F16_64 },
953
  { 49U, LoongArch::F17_64 },
954
  { 50U, LoongArch::F18_64 },
955
  { 51U, LoongArch::F19_64 },
956
  { 52U, LoongArch::F20_64 },
957
  { 53U, LoongArch::F21_64 },
958
  { 54U, LoongArch::F22_64 },
959
  { 55U, LoongArch::F23_64 },
960
  { 56U, LoongArch::F24_64 },
961
  { 57U, LoongArch::F25_64 },
962
  { 58U, LoongArch::F26_64 },
963
  { 59U, LoongArch::F27_64 },
964
  { 60U, LoongArch::F28_64 },
965
  { 61U, LoongArch::F29_64 },
966
  { 62U, LoongArch::F30_64 },
967
  { 63U, LoongArch::F31_64 },
968
};
969
extern const unsigned LoongArchEHFlavour0Dwarf2LSize = std::size(LoongArchEHFlavour0Dwarf2L);
970
971
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchDwarfFlavour0L2Dwarf[] = {
972
  { LoongArch::F0, 32U },
973
  { LoongArch::F1, 33U },
974
  { LoongArch::F2, 34U },
975
  { LoongArch::F3, 35U },
976
  { LoongArch::F4, 36U },
977
  { LoongArch::F5, 37U },
978
  { LoongArch::F6, 38U },
979
  { LoongArch::F7, 39U },
980
  { LoongArch::F8, 40U },
981
  { LoongArch::F9, 41U },
982
  { LoongArch::F10, 42U },
983
  { LoongArch::F11, 43U },
984
  { LoongArch::F12, 44U },
985
  { LoongArch::F13, 45U },
986
  { LoongArch::F14, 46U },
987
  { LoongArch::F15, 47U },
988
  { LoongArch::F16, 48U },
989
  { LoongArch::F17, 49U },
990
  { LoongArch::F18, 50U },
991
  { LoongArch::F19, 51U },
992
  { LoongArch::F20, 52U },
993
  { LoongArch::F21, 53U },
994
  { LoongArch::F22, 54U },
995
  { LoongArch::F23, 55U },
996
  { LoongArch::F24, 56U },
997
  { LoongArch::F25, 57U },
998
  { LoongArch::F26, 58U },
999
  { LoongArch::F27, 59U },
1000
  { LoongArch::F28, 60U },
1001
  { LoongArch::F29, 61U },
1002
  { LoongArch::F30, 62U },
1003
  { LoongArch::F31, 63U },
1004
  { LoongArch::R0, 0U },
1005
  { LoongArch::R1, 1U },
1006
  { LoongArch::R2, 2U },
1007
  { LoongArch::R3, 3U },
1008
  { LoongArch::R4, 4U },
1009
  { LoongArch::R5, 5U },
1010
  { LoongArch::R6, 6U },
1011
  { LoongArch::R7, 7U },
1012
  { LoongArch::R8, 8U },
1013
  { LoongArch::R9, 9U },
1014
  { LoongArch::R10, 10U },
1015
  { LoongArch::R11, 11U },
1016
  { LoongArch::R12, 12U },
1017
  { LoongArch::R13, 13U },
1018
  { LoongArch::R14, 14U },
1019
  { LoongArch::R15, 15U },
1020
  { LoongArch::R16, 16U },
1021
  { LoongArch::R17, 17U },
1022
  { LoongArch::R18, 18U },
1023
  { LoongArch::R19, 19U },
1024
  { LoongArch::R20, 20U },
1025
  { LoongArch::R21, 21U },
1026
  { LoongArch::R22, 22U },
1027
  { LoongArch::R23, 23U },
1028
  { LoongArch::R24, 24U },
1029
  { LoongArch::R25, 25U },
1030
  { LoongArch::R26, 26U },
1031
  { LoongArch::R27, 27U },
1032
  { LoongArch::R28, 28U },
1033
  { LoongArch::R29, 29U },
1034
  { LoongArch::R30, 30U },
1035
  { LoongArch::R31, 31U },
1036
  { LoongArch::VR0, 32U },
1037
  { LoongArch::VR1, 33U },
1038
  { LoongArch::VR2, 34U },
1039
  { LoongArch::VR3, 35U },
1040
  { LoongArch::VR4, 36U },
1041
  { LoongArch::VR5, 37U },
1042
  { LoongArch::VR6, 38U },
1043
  { LoongArch::VR7, 39U },
1044
  { LoongArch::VR8, 40U },
1045
  { LoongArch::VR9, 41U },
1046
  { LoongArch::VR10, 42U },
1047
  { LoongArch::VR11, 43U },
1048
  { LoongArch::VR12, 44U },
1049
  { LoongArch::VR13, 45U },
1050
  { LoongArch::VR14, 46U },
1051
  { LoongArch::VR15, 47U },
1052
  { LoongArch::VR16, 48U },
1053
  { LoongArch::VR17, 49U },
1054
  { LoongArch::VR18, 50U },
1055
  { LoongArch::VR19, 51U },
1056
  { LoongArch::VR20, 52U },
1057
  { LoongArch::VR21, 53U },
1058
  { LoongArch::VR22, 54U },
1059
  { LoongArch::VR23, 55U },
1060
  { LoongArch::VR24, 56U },
1061
  { LoongArch::VR25, 57U },
1062
  { LoongArch::VR26, 58U },
1063
  { LoongArch::VR27, 59U },
1064
  { LoongArch::VR28, 60U },
1065
  { LoongArch::VR29, 61U },
1066
  { LoongArch::VR30, 62U },
1067
  { LoongArch::VR31, 63U },
1068
  { LoongArch::XR0, 32U },
1069
  { LoongArch::XR1, 33U },
1070
  { LoongArch::XR2, 34U },
1071
  { LoongArch::XR3, 35U },
1072
  { LoongArch::XR4, 36U },
1073
  { LoongArch::XR5, 37U },
1074
  { LoongArch::XR6, 38U },
1075
  { LoongArch::XR7, 39U },
1076
  { LoongArch::XR8, 40U },
1077
  { LoongArch::XR9, 41U },
1078
  { LoongArch::XR10, 42U },
1079
  { LoongArch::XR11, 43U },
1080
  { LoongArch::XR12, 44U },
1081
  { LoongArch::XR13, 45U },
1082
  { LoongArch::XR14, 46U },
1083
  { LoongArch::XR15, 47U },
1084
  { LoongArch::XR16, 48U },
1085
  { LoongArch::XR17, 49U },
1086
  { LoongArch::XR18, 50U },
1087
  { LoongArch::XR19, 51U },
1088
  { LoongArch::XR20, 52U },
1089
  { LoongArch::XR21, 53U },
1090
  { LoongArch::XR22, 54U },
1091
  { LoongArch::XR23, 55U },
1092
  { LoongArch::XR24, 56U },
1093
  { LoongArch::XR25, 57U },
1094
  { LoongArch::XR26, 58U },
1095
  { LoongArch::XR27, 59U },
1096
  { LoongArch::XR28, 60U },
1097
  { LoongArch::XR29, 61U },
1098
  { LoongArch::XR30, 62U },
1099
  { LoongArch::XR31, 63U },
1100
  { LoongArch::F0_64, 32U },
1101
  { LoongArch::F1_64, 33U },
1102
  { LoongArch::F2_64, 34U },
1103
  { LoongArch::F3_64, 35U },
1104
  { LoongArch::F4_64, 36U },
1105
  { LoongArch::F5_64, 37U },
1106
  { LoongArch::F6_64, 38U },
1107
  { LoongArch::F7_64, 39U },
1108
  { LoongArch::F8_64, 40U },
1109
  { LoongArch::F9_64, 41U },
1110
  { LoongArch::F10_64, 42U },
1111
  { LoongArch::F11_64, 43U },
1112
  { LoongArch::F12_64, 44U },
1113
  { LoongArch::F13_64, 45U },
1114
  { LoongArch::F14_64, 46U },
1115
  { LoongArch::F15_64, 47U },
1116
  { LoongArch::F16_64, 48U },
1117
  { LoongArch::F17_64, 49U },
1118
  { LoongArch::F18_64, 50U },
1119
  { LoongArch::F19_64, 51U },
1120
  { LoongArch::F20_64, 52U },
1121
  { LoongArch::F21_64, 53U },
1122
  { LoongArch::F22_64, 54U },
1123
  { LoongArch::F23_64, 55U },
1124
  { LoongArch::F24_64, 56U },
1125
  { LoongArch::F25_64, 57U },
1126
  { LoongArch::F26_64, 58U },
1127
  { LoongArch::F27_64, 59U },
1128
  { LoongArch::F28_64, 60U },
1129
  { LoongArch::F29_64, 61U },
1130
  { LoongArch::F30_64, 62U },
1131
  { LoongArch::F31_64, 63U },
1132
};
1133
extern const unsigned LoongArchDwarfFlavour0L2DwarfSize = std::size(LoongArchDwarfFlavour0L2Dwarf);
1134
1135
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchEHFlavour0L2Dwarf[] = {
1136
  { LoongArch::F0, 32U },
1137
  { LoongArch::F1, 33U },
1138
  { LoongArch::F2, 34U },
1139
  { LoongArch::F3, 35U },
1140
  { LoongArch::F4, 36U },
1141
  { LoongArch::F5, 37U },
1142
  { LoongArch::F6, 38U },
1143
  { LoongArch::F7, 39U },
1144
  { LoongArch::F8, 40U },
1145
  { LoongArch::F9, 41U },
1146
  { LoongArch::F10, 42U },
1147
  { LoongArch::F11, 43U },
1148
  { LoongArch::F12, 44U },
1149
  { LoongArch::F13, 45U },
1150
  { LoongArch::F14, 46U },
1151
  { LoongArch::F15, 47U },
1152
  { LoongArch::F16, 48U },
1153
  { LoongArch::F17, 49U },
1154
  { LoongArch::F18, 50U },
1155
  { LoongArch::F19, 51U },
1156
  { LoongArch::F20, 52U },
1157
  { LoongArch::F21, 53U },
1158
  { LoongArch::F22, 54U },
1159
  { LoongArch::F23, 55U },
1160
  { LoongArch::F24, 56U },
1161
  { LoongArch::F25, 57U },
1162
  { LoongArch::F26, 58U },
1163
  { LoongArch::F27, 59U },
1164
  { LoongArch::F28, 60U },
1165
  { LoongArch::F29, 61U },
1166
  { LoongArch::F30, 62U },
1167
  { LoongArch::F31, 63U },
1168
  { LoongArch::R0, 0U },
1169
  { LoongArch::R1, 1U },
1170
  { LoongArch::R2, 2U },
1171
  { LoongArch::R3, 3U },
1172
  { LoongArch::R4, 4U },
1173
  { LoongArch::R5, 5U },
1174
  { LoongArch::R6, 6U },
1175
  { LoongArch::R7, 7U },
1176
  { LoongArch::R8, 8U },
1177
  { LoongArch::R9, 9U },
1178
  { LoongArch::R10, 10U },
1179
  { LoongArch::R11, 11U },
1180
  { LoongArch::R12, 12U },
1181
  { LoongArch::R13, 13U },
1182
  { LoongArch::R14, 14U },
1183
  { LoongArch::R15, 15U },
1184
  { LoongArch::R16, 16U },
1185
  { LoongArch::R17, 17U },
1186
  { LoongArch::R18, 18U },
1187
  { LoongArch::R19, 19U },
1188
  { LoongArch::R20, 20U },
1189
  { LoongArch::R21, 21U },
1190
  { LoongArch::R22, 22U },
1191
  { LoongArch::R23, 23U },
1192
  { LoongArch::R24, 24U },
1193
  { LoongArch::R25, 25U },
1194
  { LoongArch::R26, 26U },
1195
  { LoongArch::R27, 27U },
1196
  { LoongArch::R28, 28U },
1197
  { LoongArch::R29, 29U },
1198
  { LoongArch::R30, 30U },
1199
  { LoongArch::R31, 31U },
1200
  { LoongArch::VR0, 32U },
1201
  { LoongArch::VR1, 33U },
1202
  { LoongArch::VR2, 34U },
1203
  { LoongArch::VR3, 35U },
1204
  { LoongArch::VR4, 36U },
1205
  { LoongArch::VR5, 37U },
1206
  { LoongArch::VR6, 38U },
1207
  { LoongArch::VR7, 39U },
1208
  { LoongArch::VR8, 40U },
1209
  { LoongArch::VR9, 41U },
1210
  { LoongArch::VR10, 42U },
1211
  { LoongArch::VR11, 43U },
1212
  { LoongArch::VR12, 44U },
1213
  { LoongArch::VR13, 45U },
1214
  { LoongArch::VR14, 46U },
1215
  { LoongArch::VR15, 47U },
1216
  { LoongArch::VR16, 48U },
1217
  { LoongArch::VR17, 49U },
1218
  { LoongArch::VR18, 50U },
1219
  { LoongArch::VR19, 51U },
1220
  { LoongArch::VR20, 52U },
1221
  { LoongArch::VR21, 53U },
1222
  { LoongArch::VR22, 54U },
1223
  { LoongArch::VR23, 55U },
1224
  { LoongArch::VR24, 56U },
1225
  { LoongArch::VR25, 57U },
1226
  { LoongArch::VR26, 58U },
1227
  { LoongArch::VR27, 59U },
1228
  { LoongArch::VR28, 60U },
1229
  { LoongArch::VR29, 61U },
1230
  { LoongArch::VR30, 62U },
1231
  { LoongArch::VR31, 63U },
1232
  { LoongArch::XR0, 32U },
1233
  { LoongArch::XR1, 33U },
1234
  { LoongArch::XR2, 34U },
1235
  { LoongArch::XR3, 35U },
1236
  { LoongArch::XR4, 36U },
1237
  { LoongArch::XR5, 37U },
1238
  { LoongArch::XR6, 38U },
1239
  { LoongArch::XR7, 39U },
1240
  { LoongArch::XR8, 40U },
1241
  { LoongArch::XR9, 41U },
1242
  { LoongArch::XR10, 42U },
1243
  { LoongArch::XR11, 43U },
1244
  { LoongArch::XR12, 44U },
1245
  { LoongArch::XR13, 45U },
1246
  { LoongArch::XR14, 46U },
1247
  { LoongArch::XR15, 47U },
1248
  { LoongArch::XR16, 48U },
1249
  { LoongArch::XR17, 49U },
1250
  { LoongArch::XR18, 50U },
1251
  { LoongArch::XR19, 51U },
1252
  { LoongArch::XR20, 52U },
1253
  { LoongArch::XR21, 53U },
1254
  { LoongArch::XR22, 54U },
1255
  { LoongArch::XR23, 55U },
1256
  { LoongArch::XR24, 56U },
1257
  { LoongArch::XR25, 57U },
1258
  { LoongArch::XR26, 58U },
1259
  { LoongArch::XR27, 59U },
1260
  { LoongArch::XR28, 60U },
1261
  { LoongArch::XR29, 61U },
1262
  { LoongArch::XR30, 62U },
1263
  { LoongArch::XR31, 63U },
1264
  { LoongArch::F0_64, 32U },
1265
  { LoongArch::F1_64, 33U },
1266
  { LoongArch::F2_64, 34U },
1267
  { LoongArch::F3_64, 35U },
1268
  { LoongArch::F4_64, 36U },
1269
  { LoongArch::F5_64, 37U },
1270
  { LoongArch::F6_64, 38U },
1271
  { LoongArch::F7_64, 39U },
1272
  { LoongArch::F8_64, 40U },
1273
  { LoongArch::F9_64, 41U },
1274
  { LoongArch::F10_64, 42U },
1275
  { LoongArch::F11_64, 43U },
1276
  { LoongArch::F12_64, 44U },
1277
  { LoongArch::F13_64, 45U },
1278
  { LoongArch::F14_64, 46U },
1279
  { LoongArch::F15_64, 47U },
1280
  { LoongArch::F16_64, 48U },
1281
  { LoongArch::F17_64, 49U },
1282
  { LoongArch::F18_64, 50U },
1283
  { LoongArch::F19_64, 51U },
1284
  { LoongArch::F20_64, 52U },
1285
  { LoongArch::F21_64, 53U },
1286
  { LoongArch::F22_64, 54U },
1287
  { LoongArch::F23_64, 55U },
1288
  { LoongArch::F24_64, 56U },
1289
  { LoongArch::F25_64, 57U },
1290
  { LoongArch::F26_64, 58U },
1291
  { LoongArch::F27_64, 59U },
1292
  { LoongArch::F28_64, 60U },
1293
  { LoongArch::F29_64, 61U },
1294
  { LoongArch::F30_64, 62U },
1295
  { LoongArch::F31_64, 63U },
1296
};
1297
extern const unsigned LoongArchEHFlavour0L2DwarfSize = std::size(LoongArchEHFlavour0L2Dwarf);
1298
1299
extern const uint16_t LoongArchRegEncodingTable[] = {
1300
  0,
1301
  0,
1302
  1,
1303
  2,
1304
  3,
1305
  4,
1306
  5,
1307
  6,
1308
  7,
1309
  8,
1310
  9,
1311
  10,
1312
  11,
1313
  12,
1314
  13,
1315
  14,
1316
  15,
1317
  16,
1318
  17,
1319
  18,
1320
  19,
1321
  20,
1322
  21,
1323
  22,
1324
  23,
1325
  24,
1326
  25,
1327
  26,
1328
  27,
1329
  28,
1330
  29,
1331
  30,
1332
  31,
1333
  0,
1334
  1,
1335
  2,
1336
  3,
1337
  4,
1338
  5,
1339
  6,
1340
  7,
1341
  0,
1342
  1,
1343
  2,
1344
  3,
1345
  0,
1346
  1,
1347
  2,
1348
  3,
1349
  4,
1350
  5,
1351
  6,
1352
  7,
1353
  8,
1354
  9,
1355
  10,
1356
  11,
1357
  12,
1358
  13,
1359
  14,
1360
  15,
1361
  16,
1362
  17,
1363
  18,
1364
  19,
1365
  20,
1366
  21,
1367
  22,
1368
  23,
1369
  24,
1370
  25,
1371
  26,
1372
  27,
1373
  28,
1374
  29,
1375
  30,
1376
  31,
1377
  0,
1378
  1,
1379
  2,
1380
  3,
1381
  0,
1382
  1,
1383
  2,
1384
  3,
1385
  4,
1386
  5,
1387
  6,
1388
  7,
1389
  8,
1390
  9,
1391
  10,
1392
  11,
1393
  12,
1394
  13,
1395
  14,
1396
  15,
1397
  16,
1398
  17,
1399
  18,
1400
  19,
1401
  20,
1402
  21,
1403
  22,
1404
  23,
1405
  24,
1406
  25,
1407
  26,
1408
  27,
1409
  28,
1410
  29,
1411
  30,
1412
  31,
1413
  0,
1414
  1,
1415
  2,
1416
  3,
1417
  4,
1418
  5,
1419
  6,
1420
  7,
1421
  8,
1422
  9,
1423
  10,
1424
  11,
1425
  12,
1426
  13,
1427
  14,
1428
  15,
1429
  16,
1430
  17,
1431
  18,
1432
  19,
1433
  20,
1434
  21,
1435
  22,
1436
  23,
1437
  24,
1438
  25,
1439
  26,
1440
  27,
1441
  28,
1442
  29,
1443
  30,
1444
  31,
1445
  0,
1446
  1,
1447
  2,
1448
  3,
1449
  4,
1450
  5,
1451
  6,
1452
  7,
1453
  8,
1454
  9,
1455
  10,
1456
  11,
1457
  12,
1458
  13,
1459
  14,
1460
  15,
1461
  16,
1462
  17,
1463
  18,
1464
  19,
1465
  20,
1466
  21,
1467
  22,
1468
  23,
1469
  24,
1470
  25,
1471
  26,
1472
  27,
1473
  28,
1474
  29,
1475
  30,
1476
  31,
1477
};
1478
0
static inline void InitLoongArchMCRegisterInfo(MCRegisterInfo *RI, unsigned RA, unsigned DwarfFlavour = 0, unsigned EHFlavour = 0, unsigned PC = 0) {
1479
0
  RI->InitMCRegisterInfo(LoongArchRegDesc, 177, RA, PC, LoongArchMCRegisterClasses, 9, LoongArchRegUnitRoots, 80, LoongArchRegDiffLists, LoongArchLaneMaskLists, LoongArchRegStrings, LoongArchRegClassStrings, LoongArchSubRegIdxLists, 4,
1480
0
LoongArchSubRegIdxRanges, LoongArchRegEncodingTable);
1481
1482
0
  switch (DwarfFlavour) {
1483
0
  default:
1484
0
    llvm_unreachable("Unknown DWARF flavour");
1485
0
  case 0:
1486
0
    RI->mapDwarfRegsToLLVMRegs(LoongArchDwarfFlavour0Dwarf2L, LoongArchDwarfFlavour0Dwarf2LSize, false);
1487
0
    break;
1488
0
  }
1489
0
  switch (EHFlavour) {
1490
0
  default:
1491
0
    llvm_unreachable("Unknown DWARF flavour");
1492
0
  case 0:
1493
0
    RI->mapDwarfRegsToLLVMRegs(LoongArchEHFlavour0Dwarf2L, LoongArchEHFlavour0Dwarf2LSize, true);
1494
0
    break;
1495
0
  }
1496
0
  switch (DwarfFlavour) {
1497
0
  default:
1498
0
    llvm_unreachable("Unknown DWARF flavour");
1499
0
  case 0:
1500
0
    RI->mapLLVMRegsToDwarfRegs(LoongArchDwarfFlavour0L2Dwarf, LoongArchDwarfFlavour0L2DwarfSize, false);
1501
0
    break;
1502
0
  }
1503
0
  switch (EHFlavour) {
1504
0
  default:
1505
0
    llvm_unreachable("Unknown DWARF flavour");
1506
0
  case 0:
1507
0
    RI->mapLLVMRegsToDwarfRegs(LoongArchEHFlavour0L2Dwarf, LoongArchEHFlavour0L2DwarfSize, true);
1508
0
    break;
1509
0
  }
1510
0
}
1511
1512
} // end namespace llvm
1513
1514
#endif // GET_REGINFO_MC_DESC
1515
1516
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
1517
|*                                                                            *|
1518
|* Register Information Header Fragment                                       *|
1519
|*                                                                            *|
1520
|* Automatically generated file, do not edit!                                 *|
1521
|*                                                                            *|
1522
\*===----------------------------------------------------------------------===*/
1523
1524
1525
#ifdef GET_REGINFO_HEADER
1526
#undef GET_REGINFO_HEADER
1527
1528
#include "llvm/CodeGen/TargetRegisterInfo.h"
1529
1530
namespace llvm {
1531
1532
class LoongArchFrameLowering;
1533
1534
struct LoongArchGenRegisterInfo : public TargetRegisterInfo {
1535
  explicit LoongArchGenRegisterInfo(unsigned RA, unsigned D = 0, unsigned E = 0,
1536
      unsigned PC = 0, unsigned HwMode = 0);
1537
  unsigned composeSubRegIndicesImpl(unsigned, unsigned) const override;
1538
  LaneBitmask composeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
1539
  LaneBitmask reverseComposeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
1540
  const TargetRegisterClass *getSubClassWithSubReg(const TargetRegisterClass *, unsigned) const override;
1541
  const TargetRegisterClass *getSubRegisterClass(const TargetRegisterClass *, unsigned) const override;
1542
  const RegClassWeight &getRegClassWeight(const TargetRegisterClass *RC) const override;
1543
  unsigned getRegUnitWeight(unsigned RegUnit) const override;
1544
  unsigned getNumRegPressureSets() const override;
1545
  const char *getRegPressureSetName(unsigned Idx) const override;
1546
  unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const override;
1547
  const int *getRegClassPressureSets(const TargetRegisterClass *RC) const override;
1548
  const int *getRegUnitPressureSets(unsigned RegUnit) const override;
1549
  ArrayRef<const char *> getRegMaskNames() const override;
1550
  ArrayRef<const uint32_t *> getRegMasks() const override;
1551
  bool isGeneralPurposeRegister(const MachineFunction &, MCRegister) const override;
1552
  bool isFixedRegister(const MachineFunction &, MCRegister) const override;
1553
  bool isArgumentRegister(const MachineFunction &, MCRegister) const override;
1554
  bool isConstantPhysReg(MCRegister PhysReg) const override final;
1555
  /// Devirtualized TargetFrameLowering.
1556
  static const LoongArchFrameLowering *getFrameLowering(
1557
      const MachineFunction &MF);
1558
};
1559
1560
namespace LoongArch { // Register classes
1561
  extern const TargetRegisterClass FPR32RegClass;
1562
  extern const TargetRegisterClass GPRRegClass;
1563
  extern const TargetRegisterClass GPRTRegClass;
1564
  extern const TargetRegisterClass CFRRegClass;
1565
  extern const TargetRegisterClass FCSRRegClass;
1566
  extern const TargetRegisterClass SCRRegClass;
1567
  extern const TargetRegisterClass FPR64RegClass;
1568
  extern const TargetRegisterClass LSX128RegClass;
1569
  extern const TargetRegisterClass LASX256RegClass;
1570
} // end namespace LoongArch
1571
1572
} // end namespace llvm
1573
1574
#endif // GET_REGINFO_HEADER
1575
1576
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
1577
|*                                                                            *|
1578
|* Target Register and Register Classes Information                           *|
1579
|*                                                                            *|
1580
|* Automatically generated file, do not edit!                                 *|
1581
|*                                                                            *|
1582
\*===----------------------------------------------------------------------===*/
1583
1584
1585
#ifdef GET_REGINFO_TARGET_DESC
1586
#undef GET_REGINFO_TARGET_DESC
1587
1588
namespace llvm {
1589
1590
extern const MCRegisterClass LoongArchMCRegisterClasses[];
1591
1592
static const MVT::SimpleValueType VTLists[] = {
1593
  /* 0 */ MVT::i32, MVT::Other,
1594
  /* 2 */ MVT::i64, MVT::Other,
1595
  /* 4 */ MVT::f32, MVT::Other,
1596
  /* 6 */ MVT::f64, MVT::Other,
1597
  /* 8 */ MVT::v4f32, MVT::v2f64, MVT::v16i8, MVT::v8i16, MVT::v4i32, MVT::v2i64, MVT::Other,
1598
  /* 15 */ MVT::v8f32, MVT::v4f64, MVT::v32i8, MVT::v16i16, MVT::v8i32, MVT::v4i64, MVT::Other,
1599
};
1600
1601
static const char *SubRegIndexNameTable[] = { "sub_32", "sub_64", "sub_128", "" };
1602
1603
1604
static const LaneBitmask SubRegIndexLaneMaskTable[] = {
1605
  LaneBitmask::getAll(),
1606
  LaneBitmask(0x0000000000000001), // sub_32
1607
  LaneBitmask(0x0000000000000001), // sub_64
1608
  LaneBitmask(0x0000000000000001), // sub_128
1609
 };
1610
1611
1612
1613
static const TargetRegisterInfo::RegClassInfo RegClassInfos[] = {
1614
  // Mode = 0 (Default)
1615
  { 32, 32, 32, /*VTLists+*/4 },    // FPR32
1616
  { 32, 32, 32, /*VTLists+*/0 },    // GPR
1617
  { 32, 32, 32, /*VTLists+*/0 },    // GPRT
1618
  { 32, 32, 32, /*VTLists+*/0 },    // CFR
1619
  { 32, 32, 32, /*VTLists+*/0 },    // FCSR
1620
  { 32, 32, 32, /*VTLists+*/0 },    // SCR
1621
  { 64, 64, 64, /*VTLists+*/6 },    // FPR64
1622
  { 128, 128, 128, /*VTLists+*/8 },    // LSX128
1623
  { 256, 256, 256, /*VTLists+*/15 },    // LASX256
1624
  // Mode = 1 (LA64)
1625
  { 32, 32, 32, /*VTLists+*/4 },    // FPR32
1626
  { 64, 64, 64, /*VTLists+*/2 },    // GPR
1627
  { 64, 64, 64, /*VTLists+*/2 },    // GPRT
1628
  { 64, 64, 64, /*VTLists+*/2 },    // CFR
1629
  { 32, 32, 32, /*VTLists+*/0 },    // FCSR
1630
  { 64, 64, 64, /*VTLists+*/2 },    // SCR
1631
  { 64, 64, 64, /*VTLists+*/6 },    // FPR64
1632
  { 128, 128, 128, /*VTLists+*/8 },    // LSX128
1633
  { 256, 256, 256, /*VTLists+*/15 },    // LASX256
1634
};
1635
1636
static const TargetRegisterClass *const NullRegClasses[] = { nullptr };
1637
1638
static const uint32_t FPR32SubClassMask[] = {
1639
  0x00000001, 
1640
  0x000001c0, // sub_32
1641
};
1642
1643
static const uint32_t GPRSubClassMask[] = {
1644
  0x00000006, 
1645
};
1646
1647
static const uint32_t GPRTSubClassMask[] = {
1648
  0x00000004, 
1649
};
1650
1651
static const uint32_t CFRSubClassMask[] = {
1652
  0x00000008, 
1653
};
1654
1655
static const uint32_t FCSRSubClassMask[] = {
1656
  0x00000010, 
1657
};
1658
1659
static const uint32_t SCRSubClassMask[] = {
1660
  0x00000020, 
1661
};
1662
1663
static const uint32_t FPR64SubClassMask[] = {
1664
  0x00000040, 
1665
  0x00000180, // sub_64
1666
};
1667
1668
static const uint32_t LSX128SubClassMask[] = {
1669
  0x00000080, 
1670
  0x00000100, // sub_128
1671
};
1672
1673
static const uint32_t LASX256SubClassMask[] = {
1674
  0x00000100, 
1675
};
1676
1677
static const uint16_t SuperRegIdxSeqs[] = {
1678
  /* 0 */ 1, 0,
1679
  /* 2 */ 2, 0,
1680
  /* 4 */ 3, 0,
1681
};
1682
1683
static const TargetRegisterClass *const GPRTSuperclasses[] = {
1684
  &LoongArch::GPRRegClass,
1685
  nullptr
1686
};
1687
1688
1689
namespace LoongArch {   // Register class instances
1690
  extern const TargetRegisterClass FPR32RegClass = {
1691
    &LoongArchMCRegisterClasses[FPR32RegClassID],
1692
    FPR32SubClassMask,
1693
    SuperRegIdxSeqs + 0,
1694
    LaneBitmask(0x0000000000000001),
1695
    0,
1696
    false,
1697
    0x00, /* TSFlags */
1698
    false, /* HasDisjunctSubRegs */
1699
    false, /* CoveredBySubRegs */
1700
    NullRegClasses,
1701
    nullptr
1702
  };
1703
1704
  extern const TargetRegisterClass GPRRegClass = {
1705
    &LoongArchMCRegisterClasses[GPRRegClassID],
1706
    GPRSubClassMask,
1707
    SuperRegIdxSeqs + 1,
1708
    LaneBitmask(0x0000000000000001),
1709
    0,
1710
    false,
1711
    0x00, /* TSFlags */
1712
    false, /* HasDisjunctSubRegs */
1713
    false, /* CoveredBySubRegs */
1714
    NullRegClasses,
1715
    nullptr
1716
  };
1717
1718
  extern const TargetRegisterClass GPRTRegClass = {
1719
    &LoongArchMCRegisterClasses[GPRTRegClassID],
1720
    GPRTSubClassMask,
1721
    SuperRegIdxSeqs + 1,
1722
    LaneBitmask(0x0000000000000001),
1723
    0,
1724
    false,
1725
    0x00, /* TSFlags */
1726
    false, /* HasDisjunctSubRegs */
1727
    false, /* CoveredBySubRegs */
1728
    GPRTSuperclasses,
1729
    nullptr
1730
  };
1731
1732
  extern const TargetRegisterClass CFRRegClass = {
1733
    &LoongArchMCRegisterClasses[CFRRegClassID],
1734
    CFRSubClassMask,
1735
    SuperRegIdxSeqs + 1,
1736
    LaneBitmask(0x0000000000000001),
1737
    0,
1738
    false,
1739
    0x00, /* TSFlags */
1740
    false, /* HasDisjunctSubRegs */
1741
    false, /* CoveredBySubRegs */
1742
    NullRegClasses,
1743
    nullptr
1744
  };
1745
1746
  extern const TargetRegisterClass FCSRRegClass = {
1747
    &LoongArchMCRegisterClasses[FCSRRegClassID],
1748
    FCSRSubClassMask,
1749
    SuperRegIdxSeqs + 1,
1750
    LaneBitmask(0x0000000000000001),
1751
    0,
1752
    false,
1753
    0x00, /* TSFlags */
1754
    false, /* HasDisjunctSubRegs */
1755
    false, /* CoveredBySubRegs */
1756
    NullRegClasses,
1757
    nullptr
1758
  };
1759
1760
  extern const TargetRegisterClass SCRRegClass = {
1761
    &LoongArchMCRegisterClasses[SCRRegClassID],
1762
    SCRSubClassMask,
1763
    SuperRegIdxSeqs + 1,
1764
    LaneBitmask(0x0000000000000001),
1765
    0,
1766
    false,
1767
    0x00, /* TSFlags */
1768
    false, /* HasDisjunctSubRegs */
1769
    false, /* CoveredBySubRegs */
1770
    NullRegClasses,
1771
    nullptr
1772
  };
1773
1774
  extern const TargetRegisterClass FPR64RegClass = {
1775
    &LoongArchMCRegisterClasses[FPR64RegClassID],
1776
    FPR64SubClassMask,
1777
    SuperRegIdxSeqs + 2,
1778
    LaneBitmask(0x0000000000000001),
1779
    0,
1780
    false,
1781
    0x00, /* TSFlags */
1782
    false, /* HasDisjunctSubRegs */
1783
    false, /* CoveredBySubRegs */
1784
    NullRegClasses,
1785
    nullptr
1786
  };
1787
1788
  extern const TargetRegisterClass LSX128RegClass = {
1789
    &LoongArchMCRegisterClasses[LSX128RegClassID],
1790
    LSX128SubClassMask,
1791
    SuperRegIdxSeqs + 4,
1792
    LaneBitmask(0x0000000000000001),
1793
    0,
1794
    false,
1795
    0x00, /* TSFlags */
1796
    false, /* HasDisjunctSubRegs */
1797
    false, /* CoveredBySubRegs */
1798
    NullRegClasses,
1799
    nullptr
1800
  };
1801
1802
  extern const TargetRegisterClass LASX256RegClass = {
1803
    &LoongArchMCRegisterClasses[LASX256RegClassID],
1804
    LASX256SubClassMask,
1805
    SuperRegIdxSeqs + 1,
1806
    LaneBitmask(0x0000000000000001),
1807
    0,
1808
    false,
1809
    0x00, /* TSFlags */
1810
    false, /* HasDisjunctSubRegs */
1811
    false, /* CoveredBySubRegs */
1812
    NullRegClasses,
1813
    nullptr
1814
  };
1815
1816
} // end namespace LoongArch
1817
1818
namespace {
1819
  const TargetRegisterClass *const RegisterClasses[] = {
1820
    &LoongArch::FPR32RegClass,
1821
    &LoongArch::GPRRegClass,
1822
    &LoongArch::GPRTRegClass,
1823
    &LoongArch::CFRRegClass,
1824
    &LoongArch::FCSRRegClass,
1825
    &LoongArch::SCRRegClass,
1826
    &LoongArch::FPR64RegClass,
1827
    &LoongArch::LSX128RegClass,
1828
    &LoongArch::LASX256RegClass,
1829
  };
1830
} // end anonymous namespace
1831
1832
static const uint8_t CostPerUseTable[] = { 
1833
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
1834
1835
1836
static const bool InAllocatableClassTable[] = { 
1837
false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, };
1838
1839
1840
static const TargetRegisterInfoDesc LoongArchRegInfoDesc = { // Extra Descriptors
1841
CostPerUseTable, 1, InAllocatableClassTable};
1842
1843
0
unsigned LoongArchGenRegisterInfo::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
1844
0
  static const uint8_t Rows[1][3] = {
1845
0
    { LoongArch::sub_32, LoongArch::sub_64, 0, },
1846
0
  };
1847
1848
0
  --IdxA; assert(IdxA < 3); (void) IdxA;
1849
0
  --IdxB; assert(IdxB < 3);
1850
0
  return Rows[0][IdxB];
1851
0
}
1852
1853
  struct MaskRolOp {
1854
    LaneBitmask Mask;
1855
    uint8_t  RotateLeft;
1856
  };
1857
  static const MaskRolOp LaneMaskComposeSequences[] = {
1858
    { LaneBitmask(0xFFFFFFFFFFFFFFFF),  0 }, { LaneBitmask::getNone(), 0 }  // Sequence 0
1859
  };
1860
  static const uint8_t CompositeSequences[] = {
1861
    0, // to sub_32
1862
    0, // to sub_64
1863
    0 // to sub_128
1864
  };
1865
1866
0
LaneBitmask LoongArchGenRegisterInfo::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
1867
0
  --IdxA; assert(IdxA < 3 && "Subregister index out of bounds");
1868
0
  LaneBitmask Result;
1869
0
  for (const MaskRolOp *Ops =
1870
0
       &LaneMaskComposeSequences[CompositeSequences[IdxA]];
1871
0
       Ops->Mask.any(); ++Ops) {
1872
0
    LaneBitmask::Type M = LaneMask.getAsInteger() & Ops->Mask.getAsInteger();
1873
0
    if (unsigned S = Ops->RotateLeft)
1874
0
      Result |= LaneBitmask((M << S) | (M >> (LaneBitmask::BitWidth - S)));
1875
0
    else
1876
0
      Result |= LaneBitmask(M);
1877
0
  }
1878
0
  return Result;
1879
0
}
1880
1881
0
LaneBitmask LoongArchGenRegisterInfo::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA,  LaneBitmask LaneMask) const {
1882
0
  LaneMask &= getSubRegIndexLaneMask(IdxA);
1883
0
  --IdxA; assert(IdxA < 3 && "Subregister index out of bounds");
1884
0
  LaneBitmask Result;
1885
0
  for (const MaskRolOp *Ops =
1886
0
       &LaneMaskComposeSequences[CompositeSequences[IdxA]];
1887
0
       Ops->Mask.any(); ++Ops) {
1888
0
    LaneBitmask::Type M = LaneMask.getAsInteger();
1889
0
    if (unsigned S = Ops->RotateLeft)
1890
0
      Result |= LaneBitmask((M >> S) | (M << (LaneBitmask::BitWidth - S)));
1891
0
    else
1892
0
      Result |= LaneBitmask(M);
1893
0
  }
1894
0
  return Result;
1895
0
}
1896
1897
0
const TargetRegisterClass *LoongArchGenRegisterInfo::getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const {
1898
0
  static const uint8_t Table[9][3] = {
1899
0
    { // FPR32
1900
0
      0,  // sub_32
1901
0
      0,  // sub_64
1902
0
      0,  // sub_128
1903
0
    },
1904
0
    { // GPR
1905
0
      0,  // sub_32
1906
0
      0,  // sub_64
1907
0
      0,  // sub_128
1908
0
    },
1909
0
    { // GPRT
1910
0
      0,  // sub_32
1911
0
      0,  // sub_64
1912
0
      0,  // sub_128
1913
0
    },
1914
0
    { // CFR
1915
0
      0,  // sub_32
1916
0
      0,  // sub_64
1917
0
      0,  // sub_128
1918
0
    },
1919
0
    { // FCSR
1920
0
      0,  // sub_32
1921
0
      0,  // sub_64
1922
0
      0,  // sub_128
1923
0
    },
1924
0
    { // SCR
1925
0
      0,  // sub_32
1926
0
      0,  // sub_64
1927
0
      0,  // sub_128
1928
0
    },
1929
0
    { // FPR64
1930
0
      7,  // sub_32 -> FPR64
1931
0
      0,  // sub_64
1932
0
      0,  // sub_128
1933
0
    },
1934
0
    { // LSX128
1935
0
      8,  // sub_32 -> LSX128
1936
0
      8,  // sub_64 -> LSX128
1937
0
      0,  // sub_128
1938
0
    },
1939
0
    { // LASX256
1940
0
      9,  // sub_32 -> LASX256
1941
0
      9,  // sub_64 -> LASX256
1942
0
      9,  // sub_128 -> LASX256
1943
0
    },
1944
0
  };
1945
0
  assert(RC && "Missing regclass");
1946
0
  if (!Idx) return RC;
1947
0
  --Idx;
1948
0
  assert(Idx < 3 && "Bad subreg");
1949
0
  unsigned TV = Table[RC->getID()][Idx];
1950
0
  return TV ? getRegClass(TV - 1) : nullptr;
1951
0
}
1952
1953
0
const TargetRegisterClass *LoongArchGenRegisterInfo::getSubRegisterClass(const TargetRegisterClass *RC, unsigned Idx) const {
1954
0
  static const uint8_t Table[9][3] = {
1955
0
    { // FPR32
1956
0
      0,  // FPR32:sub_32
1957
0
      0,  // FPR32:sub_64
1958
0
      0,  // FPR32:sub_128
1959
0
    },
1960
0
    { // GPR
1961
0
      0,  // GPR:sub_32
1962
0
      0,  // GPR:sub_64
1963
0
      0,  // GPR:sub_128
1964
0
    },
1965
0
    { // GPRT
1966
0
      0,  // GPRT:sub_32
1967
0
      0,  // GPRT:sub_64
1968
0
      0,  // GPRT:sub_128
1969
0
    },
1970
0
    { // CFR
1971
0
      0,  // CFR:sub_32
1972
0
      0,  // CFR:sub_64
1973
0
      0,  // CFR:sub_128
1974
0
    },
1975
0
    { // FCSR
1976
0
      0,  // FCSR:sub_32
1977
0
      0,  // FCSR:sub_64
1978
0
      0,  // FCSR:sub_128
1979
0
    },
1980
0
    { // SCR
1981
0
      0,  // SCR:sub_32
1982
0
      0,  // SCR:sub_64
1983
0
      0,  // SCR:sub_128
1984
0
    },
1985
0
    { // FPR64
1986
0
      1,  // FPR64:sub_32 -> FPR32
1987
0
      0,  // FPR64:sub_64
1988
0
      0,  // FPR64:sub_128
1989
0
    },
1990
0
    { // LSX128
1991
0
      1,  // LSX128:sub_32 -> FPR32
1992
0
      7,  // LSX128:sub_64 -> FPR64
1993
0
      0,  // LSX128:sub_128
1994
0
    },
1995
0
    { // LASX256
1996
0
      1,  // LASX256:sub_32 -> FPR32
1997
0
      7,  // LASX256:sub_64 -> FPR64
1998
0
      8,  // LASX256:sub_128 -> LSX128
1999
0
    },
2000
0
  };
2001
0
  assert(RC && "Missing regclass");
2002
0
  if (!Idx) return RC;
2003
0
  --Idx;
2004
0
  assert(Idx < 3 && "Bad subreg");
2005
0
  unsigned TV = Table[RC->getID()][Idx];
2006
0
  return TV ? getRegClass(TV - 1) : nullptr;
2007
0
}
2008
2009
/// Get the weight in units of pressure for this register class.
2010
const RegClassWeight &LoongArchGenRegisterInfo::
2011
0
getRegClassWeight(const TargetRegisterClass *RC) const {
2012
0
  static const RegClassWeight RCWeightTable[] = {
2013
0
    {1, 32},    // FPR32
2014
0
    {1, 32},    // GPR
2015
0
    {1, 17},    // GPRT
2016
0
    {1, 8},   // CFR
2017
0
    {0, 0},   // FCSR
2018
0
    {0, 0},   // SCR
2019
0
    {1, 32},    // FPR64
2020
0
    {1, 32},    // LSX128
2021
0
    {1, 32},    // LASX256
2022
0
  };
2023
0
  return RCWeightTable[RC->getID()];
2024
0
}
2025
2026
/// Get the weight in units of pressure for this register unit.
2027
unsigned LoongArchGenRegisterInfo::
2028
0
getRegUnitWeight(unsigned RegUnit) const {
2029
0
  assert(RegUnit < 80 && "invalid register unit");
2030
  // All register units have unit weight.
2031
0
  return 1;
2032
0
}
2033
2034
2035
// Get the number of dimensions of register pressure.
2036
0
unsigned LoongArchGenRegisterInfo::getNumRegPressureSets() const {
2037
0
  return 4;
2038
0
}
2039
2040
// Get the name of this register unit pressure set.
2041
const char *LoongArchGenRegisterInfo::
2042
0
getRegPressureSetName(unsigned Idx) const {
2043
0
  static const char *PressureNameTable[] = {
2044
0
    "CFR",
2045
0
    "GPRT",
2046
0
    "FPR32",
2047
0
    "GPR",
2048
0
  };
2049
0
  return PressureNameTable[Idx];
2050
0
}
2051
2052
// Get the register unit pressure limit for this dimension.
2053
// This limit must be adjusted dynamically for reserved registers.
2054
unsigned LoongArchGenRegisterInfo::
2055
0
getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {
2056
0
  static const uint8_t PressureLimitTable[] = {
2057
0
    8,    // 0: CFR
2058
0
    17,   // 1: GPRT
2059
0
    32,   // 2: FPR32
2060
0
    32,   // 3: GPR
2061
0
  };
2062
0
  return PressureLimitTable[Idx];
2063
0
}
2064
2065
/// Table of pressure sets per register class or unit.
2066
static const int RCSetsTable[] = {
2067
  /* 0 */ 0, -1,
2068
  /* 2 */ 2, -1,
2069
  /* 4 */ 1, 3, -1,
2070
};
2071
2072
/// Get the dimensions of register pressure impacted by this register class.
2073
/// Returns a -1 terminated array of pressure set IDs
2074
const int *LoongArchGenRegisterInfo::
2075
0
getRegClassPressureSets(const TargetRegisterClass *RC) const {
2076
0
  static const uint8_t RCSetStartTable[] = {
2077
0
    2,5,4,0,1,1,2,2,2,};
2078
0
  return &RCSetsTable[RCSetStartTable[RC->getID()]];
2079
0
}
2080
2081
/// Get the dimensions of register pressure impacted by this register unit.
2082
/// Returns a -1 terminated array of pressure set IDs
2083
const int *LoongArchGenRegisterInfo::
2084
0
getRegUnitPressureSets(unsigned RegUnit) const {
2085
0
  assert(RegUnit < 80 && "invalid register unit");
2086
0
  static const uint8_t RUSetStartTable[] = {
2087
0
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,1,1,1,1,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,};
2088
0
  return &RCSetsTable[RUSetStartTable[RegUnit]];
2089
0
}
2090
2091
extern const MCRegisterDesc LoongArchRegDesc[];
2092
extern const int16_t LoongArchRegDiffLists[];
2093
extern const LaneBitmask LoongArchLaneMaskLists[];
2094
extern const char LoongArchRegStrings[];
2095
extern const char LoongArchRegClassStrings[];
2096
extern const MCPhysReg LoongArchRegUnitRoots[][2];
2097
extern const uint16_t LoongArchSubRegIdxLists[];
2098
extern const MCRegisterInfo::SubRegCoveredBits LoongArchSubRegIdxRanges[];
2099
extern const uint16_t LoongArchRegEncodingTable[];
2100
// LoongArch Dwarf<->LLVM register mappings.
2101
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchDwarfFlavour0Dwarf2L[];
2102
extern const unsigned LoongArchDwarfFlavour0Dwarf2LSize;
2103
2104
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchEHFlavour0Dwarf2L[];
2105
extern const unsigned LoongArchEHFlavour0Dwarf2LSize;
2106
2107
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchDwarfFlavour0L2Dwarf[];
2108
extern const unsigned LoongArchDwarfFlavour0L2DwarfSize;
2109
2110
extern const MCRegisterInfo::DwarfLLVMRegPair LoongArchEHFlavour0L2Dwarf[];
2111
extern const unsigned LoongArchEHFlavour0L2DwarfSize;
2112
2113
LoongArchGenRegisterInfo::
2114
LoongArchGenRegisterInfo(unsigned RA, unsigned DwarfFlavour, unsigned EHFlavour,
2115
      unsigned PC, unsigned HwMode)
2116
  : TargetRegisterInfo(&LoongArchRegInfoDesc, RegisterClasses, RegisterClasses+9,
2117
             SubRegIndexNameTable, SubRegIndexLaneMaskTable,
2118
0
             LaneBitmask(0xFFFFFFFFFFFFFFFE), RegClassInfos, VTLists, HwMode) {
2119
0
  InitMCRegisterInfo(LoongArchRegDesc, 177, RA, PC,
2120
0
                     LoongArchMCRegisterClasses, 9,
2121
0
                     LoongArchRegUnitRoots,
2122
0
                     80,
2123
0
                     LoongArchRegDiffLists,
2124
0
                     LoongArchLaneMaskLists,
2125
0
                     LoongArchRegStrings,
2126
0
                     LoongArchRegClassStrings,
2127
0
                     LoongArchSubRegIdxLists,
2128
0
                     4,
2129
0
                     LoongArchSubRegIdxRanges,
2130
0
                     LoongArchRegEncodingTable);
2131
2132
0
  switch (DwarfFlavour) {
2133
0
  default:
2134
0
    llvm_unreachable("Unknown DWARF flavour");
2135
0
  case 0:
2136
0
    mapDwarfRegsToLLVMRegs(LoongArchDwarfFlavour0Dwarf2L, LoongArchDwarfFlavour0Dwarf2LSize, false);
2137
0
    break;
2138
0
  }
2139
0
  switch (EHFlavour) {
2140
0
  default:
2141
0
    llvm_unreachable("Unknown DWARF flavour");
2142
0
  case 0:
2143
0
    mapDwarfRegsToLLVMRegs(LoongArchEHFlavour0Dwarf2L, LoongArchEHFlavour0Dwarf2LSize, true);
2144
0
    break;
2145
0
  }
2146
0
  switch (DwarfFlavour) {
2147
0
  default:
2148
0
    llvm_unreachable("Unknown DWARF flavour");
2149
0
  case 0:
2150
0
    mapLLVMRegsToDwarfRegs(LoongArchDwarfFlavour0L2Dwarf, LoongArchDwarfFlavour0L2DwarfSize, false);
2151
0
    break;
2152
0
  }
2153
0
  switch (EHFlavour) {
2154
0
  default:
2155
0
    llvm_unreachable("Unknown DWARF flavour");
2156
0
  case 0:
2157
0
    mapLLVMRegsToDwarfRegs(LoongArchEHFlavour0L2Dwarf, LoongArchEHFlavour0L2DwarfSize, true);
2158
0
    break;
2159
0
  }
2160
0
}
2161
2162
static const MCPhysReg CSR_ILP32D_LP64D_SaveList[] = { LoongArch::R1, LoongArch::R22, LoongArch::R23, LoongArch::R24, LoongArch::R25, LoongArch::R26, LoongArch::R27, LoongArch::R28, LoongArch::R29, LoongArch::R30, LoongArch::R31, LoongArch::F24_64, LoongArch::F25_64, LoongArch::F26_64, LoongArch::F27_64, LoongArch::F28_64, LoongArch::F29_64, LoongArch::F30_64, LoongArch::F31_64, 0 };
2163
static const uint32_t CSR_ILP32D_LP64D_RegMask[] = { 0xfe000000, 0x00006001, 0x00001ff8, 0x00000000, 0x00000000, 0x0001fe00, };
2164
static const MCPhysReg CSR_ILP32F_LP64F_SaveList[] = { LoongArch::R1, LoongArch::R22, LoongArch::R23, LoongArch::R24, LoongArch::R25, LoongArch::R26, LoongArch::R27, LoongArch::R28, LoongArch::R29, LoongArch::R30, LoongArch::R31, LoongArch::F24, LoongArch::F25, LoongArch::F26, LoongArch::F27, LoongArch::F28, LoongArch::F29, LoongArch::F30, LoongArch::F31, 0 };
2165
static const uint32_t CSR_ILP32F_LP64F_RegMask[] = { 0xfe000000, 0x00006001, 0x00001ff8, 0x00000000, 0x00000000, 0x00000000, };
2166
static const MCPhysReg CSR_ILP32S_LP64S_SaveList[] = { LoongArch::R1, LoongArch::R22, LoongArch::R23, LoongArch::R24, LoongArch::R25, LoongArch::R26, LoongArch::R27, LoongArch::R28, LoongArch::R29, LoongArch::R30, LoongArch::R31, 0 };
2167
static const uint32_t CSR_ILP32S_LP64S_RegMask[] = { 0x00000000, 0x00006000, 0x00001ff8, 0x00000000, 0x00000000, 0x00000000, };
2168
static const MCPhysReg CSR_NoRegs_SaveList[] = { 0 };
2169
static const uint32_t CSR_NoRegs_RegMask[] = { 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, };
2170
2171
2172
0
ArrayRef<const uint32_t *> LoongArchGenRegisterInfo::getRegMasks() const {
2173
0
  static const uint32_t *const Masks[] = {
2174
0
    CSR_ILP32D_LP64D_RegMask,
2175
0
    CSR_ILP32F_LP64F_RegMask,
2176
0
    CSR_ILP32S_LP64S_RegMask,
2177
0
    CSR_NoRegs_RegMask,
2178
0
  };
2179
0
  return ArrayRef(Masks);
2180
0
}
2181
2182
bool LoongArchGenRegisterInfo::
2183
0
isGeneralPurposeRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2184
0
  return
2185
0
      false;
2186
0
}
2187
2188
bool LoongArchGenRegisterInfo::
2189
0
isFixedRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2190
0
  return
2191
0
      false;
2192
0
}
2193
2194
bool LoongArchGenRegisterInfo::
2195
0
isArgumentRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2196
0
  return
2197
0
      false;
2198
0
}
2199
2200
bool LoongArchGenRegisterInfo::
2201
0
isConstantPhysReg(MCRegister PhysReg) const {
2202
0
  return
2203
0
      PhysReg == LoongArch::R0 ||
2204
0
      false;
2205
0
}
2206
2207
0
ArrayRef<const char *> LoongArchGenRegisterInfo::getRegMaskNames() const {
2208
0
  static const char *Names[] = {
2209
0
    "CSR_ILP32D_LP64D",
2210
0
    "CSR_ILP32F_LP64F",
2211
0
    "CSR_ILP32S_LP64S",
2212
0
    "CSR_NoRegs",
2213
0
  };
2214
0
  return ArrayRef(Names);
2215
0
}
2216
2217
const LoongArchFrameLowering *
2218
0
LoongArchGenRegisterInfo::getFrameLowering(const MachineFunction &MF) {
2219
0
  return static_cast<const LoongArchFrameLowering *>(
2220
0
      MF.getSubtarget().getFrameLowering());
2221
0
}
2222
2223
} // end namespace llvm
2224
2225
#endif // GET_REGINFO_TARGET_DESC
2226