1#ifdef GET_AT_DECL
2enum ATValues {
3  S1E1R = 960,
4  S1E2R = 9152,
5  S1E3R = 13248,
6  S1E1W = 961,
7  S1E2W = 9153,
8  S1E3W = 13249,
9  S1E0R = 962,
10  S1E0W = 963,
11  S12E1R = 9156,
12  S12E1W = 9157,
13  S12E0R = 9158,
14  S12E0W = 9159,
15  S1E1RP = 968,
16  S1E1WP = 969,
17};
18#endif
19
20#ifdef GET_DB_DECL
21enum DBValues {
22  oshld = 1,
23  oshst = 2,
24  osh = 3,
25  nshld = 5,
26  nshst = 6,
27  nsh = 7,
28  ishld = 9,
29  ishst = 10,
30  ish = 11,
31  ld = 13,
32  st = 14,
33  sy = 15,
34};
35#endif
36
37#ifdef GET_DC_DECL
38enum DCValues {
39  ZVA = 7073,
40  IVAC = 945,
41  ISW = 946,
42  CVAC = 7121,
43  CSW = 978,
44  CVAU = 7129,
45  CIVAC = 7153,
46  CISW = 1010,
47  CVAP = 7137,
48};
49#endif
50
51#ifdef GET_EXACTFPIMM_DECL
52enum ExactFPImmValues {
53  zero = 0,
54  half = 1,
55  one = 2,
56  two = 3,
57};
58#endif
59
60#ifdef GET_IC_DECL
61enum ICValues {
62  IALLUIS = 904,
63  IALLU = 936,
64  IVAU = 7081,
65};
66#endif
67
68#ifdef GET_ISB_DECL
69enum ISBValues {
70  sy = 15,
71};
72#endif
73
74#ifdef GET_PRFM_DECL
75enum PRFMValues {
76  pldl1keep = 0,
77  pldl1strm = 1,
78  pldl2keep = 2,
79  pldl2strm = 3,
80  pldl3keep = 4,
81  pldl3strm = 5,
82  plil1keep = 8,
83  plil1strm = 9,
84  plil2keep = 10,
85  plil2strm = 11,
86  plil3keep = 12,
87  plil3strm = 13,
88  pstl1keep = 16,
89  pstl1strm = 17,
90  pstl2keep = 18,
91  pstl2strm = 19,
92  pstl3keep = 20,
93  pstl3strm = 21,
94};
95#endif
96
97#ifdef GET_PSB_DECL
98enum PSBValues {
99  csync = 17,
100};
101#endif
102
103#ifdef GET_PSTATE_DECL
104enum PStateValues {
105  SPSel = 5,
106  DAIFSet = 30,
107  DAIFClr = 31,
108  PAN = 4,
109  UAO = 3,
110  DIT = 26,
111};
112#endif
113
114#ifdef GET_SVEPREDPAT_DECL
115enum SVEPREDPATValues {
116  pow2 = 0,
117  vl1 = 1,
118  vl2 = 2,
119  vl3 = 3,
120  vl4 = 4,
121  vl5 = 5,
122  vl6 = 6,
123  vl7 = 7,
124  vl8 = 8,
125  vl16 = 9,
126  vl32 = 10,
127  vl64 = 11,
128  vl128 = 12,
129  vl256 = 13,
130  mul4 = 29,
131  mul3 = 30,
132  all = 31,
133};
134#endif
135
136#ifdef GET_SVEPRFM_DECL
137enum SVEPRFMValues {
138  pldl1keep = 0,
139  pldl1strm = 1,
140  pldl2keep = 2,
141  pldl2strm = 3,
142  pldl3keep = 4,
143  pldl3strm = 5,
144  pstl1keep = 8,
145  pstl1strm = 9,
146  pstl2keep = 10,
147  pstl2strm = 11,
148  pstl3keep = 12,
149  pstl3strm = 13,
150};
151#endif
152
153#ifdef GET_SYSREG_DECL
154enum SysRegValues {
155  MDCCSR_EL0 = 38920,
156  DBGDTRRX_EL0 = 38952,
157  MDRAR_EL1 = 32896,
158  OSLSR_EL1 = 32908,
159  DBGAUTHSTATUS_EL1 = 33782,
160  PMCEID0_EL0 = 56550,
161  PMCEID1_EL0 = 56551,
162  MIDR_EL1 = 49152,
163  CCSIDR_EL1 = 51200,
164  CCSIDR2_EL1 = 51202,
165  CLIDR_EL1 = 51201,
166  CTR_EL0 = 55297,
167  MPIDR_EL1 = 49157,
168  REVIDR_EL1 = 49158,
169  AIDR_EL1 = 51207,
170  DCZID_EL0 = 55303,
171  ID_PFR0_EL1 = 49160,
172  ID_PFR1_EL1 = 49161,
173  ID_DFR0_EL1 = 49162,
174  ID_AFR0_EL1 = 49163,
175  ID_MMFR0_EL1 = 49164,
176  ID_MMFR1_EL1 = 49165,
177  ID_MMFR2_EL1 = 49166,
178  ID_MMFR3_EL1 = 49167,
179  ID_ISAR0_EL1 = 49168,
180  ID_ISAR1_EL1 = 49169,
181  ID_ISAR2_EL1 = 49170,
182  ID_ISAR3_EL1 = 49171,
183  ID_ISAR4_EL1 = 49172,
184  ID_ISAR5_EL1 = 49173,
185  ID_ISAR6_EL1 = 49175,
186  ID_AA64PFR0_EL1 = 49184,
187  ID_AA64PFR1_EL1 = 49185,
188  ID_AA64DFR0_EL1 = 49192,
189  ID_AA64DFR1_EL1 = 49193,
190  ID_AA64AFR0_EL1 = 49196,
191  ID_AA64AFR1_EL1 = 49197,
192  ID_AA64ISAR0_EL1 = 49200,
193  ID_AA64ISAR1_EL1 = 49201,
194  ID_AA64MMFR0_EL1 = 49208,
195  ID_AA64MMFR1_EL1 = 49209,
196  ID_AA64MMFR2_EL1 = 49210,
197  MVFR0_EL1 = 49176,
198  MVFR1_EL1 = 49177,
199  MVFR2_EL1 = 49178,
200  RVBAR_EL1 = 50689,
201  RVBAR_EL2 = 58881,
202  RVBAR_EL3 = 62977,
203  ISR_EL1 = 50696,
204  CNTPCT_EL0 = 57089,
205  CNTVCT_EL0 = 57090,
206  ID_MMFR4_EL1 = 49174,
207  TRCSTATR = 34840,
208  TRCIDR8 = 34822,
209  TRCIDR9 = 34830,
210  TRCIDR10 = 34838,
211  TRCIDR11 = 34846,
212  TRCIDR12 = 34854,
213  TRCIDR13 = 34862,
214  TRCIDR0 = 34887,
215  TRCIDR1 = 34895,
216  TRCIDR2 = 34903,
217  TRCIDR3 = 34911,
218  TRCIDR4 = 34919,
219  TRCIDR5 = 34927,
220  TRCIDR6 = 34935,
221  TRCIDR7 = 34943,
222  TRCOSLSR = 34956,
223  TRCPDSR = 34988,
224  TRCDEVAFF0 = 35798,
225  TRCDEVAFF1 = 35806,
226  TRCLSR = 35822,
227  TRCAUTHSTATUS = 35830,
228  TRCDEVARCH = 35838,
229  TRCDEVID = 35735,
230  TRCDEVTYPE = 35743,
231  TRCPIDR4 = 35751,
232  TRCPIDR5 = 35759,
233  TRCPIDR6 = 35767,
234  TRCPIDR7 = 35775,
235  TRCPIDR0 = 35783,
236  TRCPIDR1 = 35791,
237  TRCPIDR2 = 35799,
238  TRCPIDR3 = 35807,
239  TRCCIDR0 = 35815,
240  TRCCIDR1 = 35823,
241  TRCCIDR2 = 35831,
242  TRCCIDR3 = 35839,
243  ICC_IAR1_EL1 = 50784,
244  ICC_IAR0_EL1 = 50752,
245  ICC_HPPIR1_EL1 = 50786,
246  ICC_HPPIR0_EL1 = 50754,
247  ICC_RPR_EL1 = 50779,
248  ICH_VTR_EL2 = 58969,
249  ICH_EISR_EL2 = 58971,
250  ICH_ELRSR_EL2 = 58973,
251  ID_AA64ZFR0_EL1 = 49188,
252  LORID_EL1 = 50471,
253  ERRIDR_EL1 = 49816,
254  ERXFR_EL1 = 49824,
255  DBGDTRTX_EL0 = 38952,
256  OSLAR_EL1 = 32900,
257  PMSWINC_EL0 = 56548,
258  TRCOSLAR = 34948,
259  TRCLAR = 35814,
260  ICC_EOIR1_EL1 = 50785,
261  ICC_EOIR0_EL1 = 50753,
262  ICC_DIR_EL1 = 50777,
263  ICC_SGI1R_EL1 = 50781,
264  ICC_ASGI1R_EL1 = 50782,
265  ICC_SGI0R_EL1 = 50783,
266  OSDTRRX_EL1 = 32770,
267  OSDTRTX_EL1 = 32794,
268  TEECR32_EL1 = 36864,
269  MDCCINT_EL1 = 32784,
270  MDSCR_EL1 = 32786,
271  DBGDTR_EL0 = 38944,
272  OSECCR_EL1 = 32818,
273  DBGVCR32_EL2 = 41016,
274  DBGBVR0_EL1 = 32772,
275  DBGBVR1_EL1 = 32780,
276  DBGBVR2_EL1 = 32788,
277  DBGBVR3_EL1 = 32796,
278  DBGBVR4_EL1 = 32804,
279  DBGBVR5_EL1 = 32812,
280  DBGBVR6_EL1 = 32820,
281  DBGBVR7_EL1 = 32828,
282  DBGBVR8_EL1 = 32836,
283  DBGBVR9_EL1 = 32844,
284  DBGBVR10_EL1 = 32852,
285  DBGBVR11_EL1 = 32860,
286  DBGBVR12_EL1 = 32868,
287  DBGBVR13_EL1 = 32876,
288  DBGBVR14_EL1 = 32884,
289  DBGBVR15_EL1 = 32892,
290  DBGBCR0_EL1 = 32773,
291  DBGBCR1_EL1 = 32781,
292  DBGBCR2_EL1 = 32789,
293  DBGBCR3_EL1 = 32797,
294  DBGBCR4_EL1 = 32805,
295  DBGBCR5_EL1 = 32813,
296  DBGBCR6_EL1 = 32821,
297  DBGBCR7_EL1 = 32829,
298  DBGBCR8_EL1 = 32837,
299  DBGBCR9_EL1 = 32845,
300  DBGBCR10_EL1 = 32853,
301  DBGBCR11_EL1 = 32861,
302  DBGBCR12_EL1 = 32869,
303  DBGBCR13_EL1 = 32877,
304  DBGBCR14_EL1 = 32885,
305  DBGBCR15_EL1 = 32893,
306  DBGWVR0_EL1 = 32774,
307  DBGWVR1_EL1 = 32782,
308  DBGWVR2_EL1 = 32790,
309  DBGWVR3_EL1 = 32798,
310  DBGWVR4_EL1 = 32806,
311  DBGWVR5_EL1 = 32814,
312  DBGWVR6_EL1 = 32822,
313  DBGWVR7_EL1 = 32830,
314  DBGWVR8_EL1 = 32838,
315  DBGWVR9_EL1 = 32846,
316  DBGWVR10_EL1 = 32854,
317  DBGWVR11_EL1 = 32862,
318  DBGWVR12_EL1 = 32870,
319  DBGWVR13_EL1 = 32878,
320  DBGWVR14_EL1 = 32886,
321  DBGWVR15_EL1 = 32894,
322  DBGWCR0_EL1 = 32775,
323  DBGWCR1_EL1 = 32783,
324  DBGWCR2_EL1 = 32791,
325  DBGWCR3_EL1 = 32799,
326  DBGWCR4_EL1 = 32807,
327  DBGWCR5_EL1 = 32815,
328  DBGWCR6_EL1 = 32823,
329  DBGWCR7_EL1 = 32831,
330  DBGWCR8_EL1 = 32839,
331  DBGWCR9_EL1 = 32847,
332  DBGWCR10_EL1 = 32855,
333  DBGWCR11_EL1 = 32863,
334  DBGWCR12_EL1 = 32871,
335  DBGWCR13_EL1 = 32879,
336  DBGWCR14_EL1 = 32887,
337  DBGWCR15_EL1 = 32895,
338  TEEHBR32_EL1 = 36992,
339  OSDLR_EL1 = 32924,
340  DBGPRCR_EL1 = 32932,
341  DBGCLAIMSET_EL1 = 33734,
342  DBGCLAIMCLR_EL1 = 33742,
343  CSSELR_EL1 = 53248,
344  VPIDR_EL2 = 57344,
345  VMPIDR_EL2 = 57349,
346  CPACR_EL1 = 49282,
347  SCTLR_EL1 = 49280,
348  SCTLR_EL2 = 57472,
349  SCTLR_EL3 = 61568,
350  ACTLR_EL1 = 49281,
351  ACTLR_EL2 = 57473,
352  ACTLR_EL3 = 61569,
353  HCR_EL2 = 57480,
354  SCR_EL3 = 61576,
355  MDCR_EL2 = 57481,
356  SDER32_EL3 = 61577,
357  CPTR_EL2 = 57482,
358  CPTR_EL3 = 61578,
359  HSTR_EL2 = 57483,
360  HACR_EL2 = 57487,
361  MDCR_EL3 = 61593,
362  TTBR0_EL1 = 49408,
363  TTBR0_EL2 = 57600,
364  TTBR0_EL3 = 61696,
365  TTBR1_EL1 = 49409,
366  TCR_EL1 = 49410,
367  TCR_EL2 = 57602,
368  TCR_EL3 = 61698,
369  VTTBR_EL2 = 57608,
370  VTCR_EL2 = 57610,
371  DACR32_EL2 = 57728,
372  SPSR_EL1 = 49664,
373  SPSR_EL2 = 57856,
374  SPSR_EL3 = 61952,
375  ELR_EL1 = 49665,
376  ELR_EL2 = 57857,
377  ELR_EL3 = 61953,
378  SP_EL0 = 49672,
379  SP_EL1 = 57864,
380  SP_EL2 = 61960,
381  SPSel = 49680,
382  NZCV = 55824,
383  DAIF = 55825,
384  CurrentEL = 49682,
385  SPSR_irq = 57880,
386  SPSR_abt = 57881,
387  SPSR_und = 57882,
388  SPSR_fiq = 57883,
389  FPCR = 55840,
390  FPSR = 55841,
391  DSPSR_EL0 = 55848,
392  DLR_EL0 = 55849,
393  IFSR32_EL2 = 57985,
394  AFSR0_EL1 = 49800,
395  AFSR0_EL2 = 57992,
396  AFSR0_EL3 = 62088,
397  AFSR1_EL1 = 49801,
398  AFSR1_EL2 = 57993,
399  AFSR1_EL3 = 62089,
400  ESR_EL1 = 49808,
401  ESR_EL2 = 58000,
402  ESR_EL3 = 62096,
403  FPEXC32_EL2 = 58008,
404  FAR_EL1 = 49920,
405  FAR_EL2 = 58112,
406  FAR_EL3 = 62208,
407  HPFAR_EL2 = 58116,
408  PAR_EL1 = 50080,
409  PMCR_EL0 = 56544,
410  PMCNTENSET_EL0 = 56545,
411  PMCNTENCLR_EL0 = 56546,
412  PMOVSCLR_EL0 = 56547,
413  PMSELR_EL0 = 56549,
414  PMCCNTR_EL0 = 56552,
415  PMXEVTYPER_EL0 = 56553,
416  PMXEVCNTR_EL0 = 56554,
417  PMUSERENR_EL0 = 56560,
418  PMINTENSET_EL1 = 50417,
419  PMINTENCLR_EL1 = 50418,
420  PMOVSSET_EL0 = 56563,
421  MAIR_EL1 = 50448,
422  MAIR_EL2 = 58640,
423  MAIR_EL3 = 62736,
424  AMAIR_EL1 = 50456,
425  AMAIR_EL2 = 58648,
426  AMAIR_EL3 = 62744,
427  VBAR_EL1 = 50688,
428  VBAR_EL2 = 58880,
429  VBAR_EL3 = 62976,
430  RMR_EL1 = 50690,
431  RMR_EL2 = 58882,
432  RMR_EL3 = 62978,
433  CONTEXTIDR_EL1 = 50817,
434  TPIDR_EL0 = 56962,
435  TPIDR_EL2 = 59010,
436  TPIDR_EL3 = 63106,
437  TPIDRRO_EL0 = 56963,
438  TPIDR_EL1 = 50820,
439  CNTFRQ_EL0 = 57088,
440  CNTVOFF_EL2 = 59139,
441  CNTKCTL_EL1 = 50952,
442  CNTHCTL_EL2 = 59144,
443  CNTP_TVAL_EL0 = 57104,
444  CNTHP_TVAL_EL2 = 59152,
445  CNTPS_TVAL_EL1 = 65296,
446  CNTP_CTL_EL0 = 57105,
447  CNTHP_CTL_EL2 = 59153,
448  CNTPS_CTL_EL1 = 65297,
449  CNTP_CVAL_EL0 = 57106,
450  CNTHP_CVAL_EL2 = 59154,
451  CNTPS_CVAL_EL1 = 65298,
452  CNTV_TVAL_EL0 = 57112,
453  CNTV_CTL_EL0 = 57113,
454  CNTV_CVAL_EL0 = 57114,
455  PMEVCNTR0_EL0 = 57152,
456  PMEVCNTR1_EL0 = 57153,
457  PMEVCNTR2_EL0 = 57154,
458  PMEVCNTR3_EL0 = 57155,
459  PMEVCNTR4_EL0 = 57156,
460  PMEVCNTR5_EL0 = 57157,
461  PMEVCNTR6_EL0 = 57158,
462  PMEVCNTR7_EL0 = 57159,
463  PMEVCNTR8_EL0 = 57160,
464  PMEVCNTR9_EL0 = 57161,
465  PMEVCNTR10_EL0 = 57162,
466  PMEVCNTR11_EL0 = 57163,
467  PMEVCNTR12_EL0 = 57164,
468  PMEVCNTR13_EL0 = 57165,
469  PMEVCNTR14_EL0 = 57166,
470  PMEVCNTR15_EL0 = 57167,
471  PMEVCNTR16_EL0 = 57168,
472  PMEVCNTR17_EL0 = 57169,
473  PMEVCNTR18_EL0 = 57170,
474  PMEVCNTR19_EL0 = 57171,
475  PMEVCNTR20_EL0 = 57172,
476  PMEVCNTR21_EL0 = 57173,
477  PMEVCNTR22_EL0 = 57174,
478  PMEVCNTR23_EL0 = 57175,
479  PMEVCNTR24_EL0 = 57176,
480  PMEVCNTR25_EL0 = 57177,
481  PMEVCNTR26_EL0 = 57178,
482  PMEVCNTR27_EL0 = 57179,
483  PMEVCNTR28_EL0 = 57180,
484  PMEVCNTR29_EL0 = 57181,
485  PMEVCNTR30_EL0 = 57182,
486  PMCCFILTR_EL0 = 57215,
487  PMEVTYPER0_EL0 = 57184,
488  PMEVTYPER1_EL0 = 57185,
489  PMEVTYPER2_EL0 = 57186,
490  PMEVTYPER3_EL0 = 57187,
491  PMEVTYPER4_EL0 = 57188,
492  PMEVTYPER5_EL0 = 57189,
493  PMEVTYPER6_EL0 = 57190,
494  PMEVTYPER7_EL0 = 57191,
495  PMEVTYPER8_EL0 = 57192,
496  PMEVTYPER9_EL0 = 57193,
497  PMEVTYPER10_EL0 = 57194,
498  PMEVTYPER11_EL0 = 57195,
499  PMEVTYPER12_EL0 = 57196,
500  PMEVTYPER13_EL0 = 57197,
501  PMEVTYPER14_EL0 = 57198,
502  PMEVTYPER15_EL0 = 57199,
503  PMEVTYPER16_EL0 = 57200,
504  PMEVTYPER17_EL0 = 57201,
505  PMEVTYPER18_EL0 = 57202,
506  PMEVTYPER19_EL0 = 57203,
507  PMEVTYPER20_EL0 = 57204,
508  PMEVTYPER21_EL0 = 57205,
509  PMEVTYPER22_EL0 = 57206,
510  PMEVTYPER23_EL0 = 57207,
511  PMEVTYPER24_EL0 = 57208,
512  PMEVTYPER25_EL0 = 57209,
513  PMEVTYPER26_EL0 = 57210,
514  PMEVTYPER27_EL0 = 57211,
515  PMEVTYPER28_EL0 = 57212,
516  PMEVTYPER29_EL0 = 57213,
517  PMEVTYPER30_EL0 = 57214,
518  TRCPRGCTLR = 34824,
519  TRCPROCSELR = 34832,
520  TRCCONFIGR = 34848,
521  TRCAUXCTLR = 34864,
522  TRCEVENTCTL0R = 34880,
523  TRCEVENTCTL1R = 34888,
524  TRCSTALLCTLR = 34904,
525  TRCTSCTLR = 34912,
526  TRCSYNCPR = 34920,
527  TRCCCCTLR = 34928,
528  TRCBBCTLR = 34936,
529  TRCTRACEIDR = 34817,
530  TRCQCTLR = 34825,
531  TRCVICTLR = 34818,
532  TRCVIIECTLR = 34826,
533  TRCVISSCTLR = 34834,
534  TRCVIPCSSCTLR = 34842,
535  TRCVDCTLR = 34882,
536  TRCVDSACCTLR = 34890,
537  TRCVDARCCTLR = 34898,
538  TRCSEQEVR0 = 34820,
539  TRCSEQEVR1 = 34828,
540  TRCSEQEVR2 = 34836,
541  TRCSEQRSTEVR = 34868,
542  TRCSEQSTR = 34876,
543  TRCEXTINSELR = 34884,
544  TRCCNTRLDVR0 = 34821,
545  TRCCNTRLDVR1 = 34829,
546  TRCCNTRLDVR2 = 34837,
547  TRCCNTRLDVR3 = 34845,
548  TRCCNTCTLR0 = 34853,
549  TRCCNTCTLR1 = 34861,
550  TRCCNTCTLR2 = 34869,
551  TRCCNTCTLR3 = 34877,
552  TRCCNTVR0 = 34885,
553  TRCCNTVR1 = 34893,
554  TRCCNTVR2 = 34901,
555  TRCCNTVR3 = 34909,
556  TRCIMSPEC0 = 34823,
557  TRCIMSPEC1 = 34831,
558  TRCIMSPEC2 = 34839,
559  TRCIMSPEC3 = 34847,
560  TRCIMSPEC4 = 34855,
561  TRCIMSPEC5 = 34863,
562  TRCIMSPEC6 = 34871,
563  TRCIMSPEC7 = 34879,
564  TRCRSCTLR2 = 34960,
565  TRCRSCTLR3 = 34968,
566  TRCRSCTLR4 = 34976,
567  TRCRSCTLR5 = 34984,
568  TRCRSCTLR6 = 34992,
569  TRCRSCTLR7 = 35000,
570  TRCRSCTLR8 = 35008,
571  TRCRSCTLR9 = 35016,
572  TRCRSCTLR10 = 35024,
573  TRCRSCTLR11 = 35032,
574  TRCRSCTLR12 = 35040,
575  TRCRSCTLR13 = 35048,
576  TRCRSCTLR14 = 35056,
577  TRCRSCTLR15 = 35064,
578  TRCRSCTLR16 = 34945,
579  TRCRSCTLR17 = 34953,
580  TRCRSCTLR18 = 34961,
581  TRCRSCTLR19 = 34969,
582  TRCRSCTLR20 = 34977,
583  TRCRSCTLR21 = 34985,
584  TRCRSCTLR22 = 34993,
585  TRCRSCTLR23 = 35001,
586  TRCRSCTLR24 = 35009,
587  TRCRSCTLR25 = 35017,
588  TRCRSCTLR26 = 35025,
589  TRCRSCTLR27 = 35033,
590  TRCRSCTLR28 = 35041,
591  TRCRSCTLR29 = 35049,
592  TRCRSCTLR30 = 35057,
593  TRCRSCTLR31 = 35065,
594  TRCSSCCR0 = 34946,
595  TRCSSCCR1 = 34954,
596  TRCSSCCR2 = 34962,
597  TRCSSCCR3 = 34970,
598  TRCSSCCR4 = 34978,
599  TRCSSCCR5 = 34986,
600  TRCSSCCR6 = 34994,
601  TRCSSCCR7 = 35002,
602  TRCSSCSR0 = 35010,
603  TRCSSCSR1 = 35018,
604  TRCSSCSR2 = 35026,
605  TRCSSCSR3 = 35034,
606  TRCSSCSR4 = 35042,
607  TRCSSCSR5 = 35050,
608  TRCSSCSR6 = 35058,
609  TRCSSCSR7 = 35066,
610  TRCSSPCICR0 = 34947,
611  TRCSSPCICR1 = 34955,
612  TRCSSPCICR2 = 34963,
613  TRCSSPCICR3 = 34971,
614  TRCSSPCICR4 = 34979,
615  TRCSSPCICR5 = 34987,
616  TRCSSPCICR6 = 34995,
617  TRCSSPCICR7 = 35003,
618  TRCPDCR = 34980,
619  TRCACVR0 = 35072,
620  TRCACVR1 = 35088,
621  TRCACVR2 = 35104,
622  TRCACVR3 = 35120,
623  TRCACVR4 = 35136,
624  TRCACVR5 = 35152,
625  TRCACVR6 = 35168,
626  TRCACVR7 = 35184,
627  TRCACVR8 = 35073,
628  TRCACVR9 = 35089,
629  TRCACVR10 = 35105,
630  TRCACVR11 = 35121,
631  TRCACVR12 = 35137,
632  TRCACVR13 = 35153,
633  TRCACVR14 = 35169,
634  TRCACVR15 = 35185,
635  TRCACATR0 = 35074,
636  TRCACATR1 = 35090,
637  TRCACATR2 = 35106,
638  TRCACATR3 = 35122,
639  TRCACATR4 = 35138,
640  TRCACATR5 = 35154,
641  TRCACATR6 = 35170,
642  TRCACATR7 = 35186,
643  TRCACATR8 = 35075,
644  TRCACATR9 = 35091,
645  TRCACATR10 = 35107,
646  TRCACATR11 = 35123,
647  TRCACATR12 = 35139,
648  TRCACATR13 = 35155,
649  TRCACATR14 = 35171,
650  TRCACATR15 = 35187,
651  TRCDVCVR0 = 35076,
652  TRCDVCVR1 = 35108,
653  TRCDVCVR2 = 35140,
654  TRCDVCVR3 = 35172,
655  TRCDVCVR4 = 35077,
656  TRCDVCVR5 = 35109,
657  TRCDVCVR6 = 35141,
658  TRCDVCVR7 = 35173,
659  TRCDVCMR0 = 35078,
660  TRCDVCMR1 = 35110,
661  TRCDVCMR2 = 35142,
662  TRCDVCMR3 = 35174,
663  TRCDVCMR4 = 35079,
664  TRCDVCMR5 = 35111,
665  TRCDVCMR6 = 35143,
666  TRCDVCMR7 = 35175,
667  TRCCIDCVR0 = 35200,
668  TRCCIDCVR1 = 35216,
669  TRCCIDCVR2 = 35232,
670  TRCCIDCVR3 = 35248,
671  TRCCIDCVR4 = 35264,
672  TRCCIDCVR5 = 35280,
673  TRCCIDCVR6 = 35296,
674  TRCCIDCVR7 = 35312,
675  TRCVMIDCVR0 = 35201,
676  TRCVMIDCVR1 = 35217,
677  TRCVMIDCVR2 = 35233,
678  TRCVMIDCVR3 = 35249,
679  TRCVMIDCVR4 = 35265,
680  TRCVMIDCVR5 = 35281,
681  TRCVMIDCVR6 = 35297,
682  TRCVMIDCVR7 = 35313,
683  TRCCIDCCTLR0 = 35202,
684  TRCCIDCCTLR1 = 35210,
685  TRCVMIDCCTLR0 = 35218,
686  TRCVMIDCCTLR1 = 35226,
687  TRCITCTRL = 35716,
688  TRCCLAIMSET = 35782,
689  TRCCLAIMCLR = 35790,
690  ICC_BPR1_EL1 = 50787,
691  ICC_BPR0_EL1 = 50755,
692  ICC_PMR_EL1 = 49712,
693  ICC_CTLR_EL1 = 50788,
694  ICC_CTLR_EL3 = 63076,
695  ICC_SRE_EL1 = 50789,
696  ICC_SRE_EL2 = 58957,
697  ICC_SRE_EL3 = 63077,
698  ICC_IGRPEN0_EL1 = 50790,
699  ICC_IGRPEN1_EL1 = 50791,
700  ICC_IGRPEN1_EL3 = 63079,
701  ICC_SEIEN_EL1 = 50792,
702  ICC_AP0R0_EL1 = 50756,
703  ICC_AP0R1_EL1 = 50757,
704  ICC_AP0R2_EL1 = 50758,
705  ICC_AP0R3_EL1 = 50759,
706  ICC_AP1R0_EL1 = 50760,
707  ICC_AP1R1_EL1 = 50761,
708  ICC_AP1R2_EL1 = 50762,
709  ICC_AP1R3_EL1 = 50763,
710  ICH_AP0R0_EL2 = 58944,
711  ICH_AP0R1_EL2 = 58945,
712  ICH_AP0R2_EL2 = 58946,
713  ICH_AP0R3_EL2 = 58947,
714  ICH_AP1R0_EL2 = 58952,
715  ICH_AP1R1_EL2 = 58953,
716  ICH_AP1R2_EL2 = 58954,
717  ICH_AP1R3_EL2 = 58955,
718  ICH_HCR_EL2 = 58968,
719  ICH_MISR_EL2 = 58970,
720  ICH_VMCR_EL2 = 58975,
721  ICH_VSEIR_EL2 = 58956,
722  ICH_LR0_EL2 = 58976,
723  ICH_LR1_EL2 = 58977,
724  ICH_LR2_EL2 = 58978,
725  ICH_LR3_EL2 = 58979,
726  ICH_LR4_EL2 = 58980,
727  ICH_LR5_EL2 = 58981,
728  ICH_LR6_EL2 = 58982,
729  ICH_LR7_EL2 = 58983,
730  ICH_LR8_EL2 = 58984,
731  ICH_LR9_EL2 = 58985,
732  ICH_LR10_EL2 = 58986,
733  ICH_LR11_EL2 = 58987,
734  ICH_LR12_EL2 = 58988,
735  ICH_LR13_EL2 = 58989,
736  ICH_LR14_EL2 = 58990,
737  ICH_LR15_EL2 = 58991,
738  PAN = 49683,
739  LORSA_EL1 = 50464,
740  LOREA_EL1 = 50465,
741  LORN_EL1 = 50466,
742  LORC_EL1 = 50467,
743  TTBR1_EL2 = 57601,
744  CONTEXTIDR_EL2 = 59009,
745  CNTHV_TVAL_EL2 = 59160,
746  CNTHV_CVAL_EL2 = 59162,
747  CNTHV_CTL_EL2 = 59161,
748  SCTLR_EL12 = 59520,
749  CPACR_EL12 = 59522,
750  TTBR0_EL12 = 59648,
751  TTBR1_EL12 = 59649,
752  TCR_EL12 = 59650,
753  AFSR0_EL12 = 60040,
754  AFSR1_EL12 = 60041,
755  ESR_EL12 = 60048,
756  FAR_EL12 = 60160,
757  MAIR_EL12 = 60688,
758  AMAIR_EL12 = 60696,
759  VBAR_EL12 = 60928,
760  CONTEXTIDR_EL12 = 61057,
761  CNTKCTL_EL12 = 61192,
762  CNTP_TVAL_EL02 = 61200,
763  CNTP_CTL_EL02 = 61201,
764  CNTP_CVAL_EL02 = 61202,
765  CNTV_TVAL_EL02 = 61208,
766  CNTV_CTL_EL02 = 61209,
767  CNTV_CVAL_EL02 = 61210,
768  SPSR_EL12 = 59904,
769  ELR_EL12 = 59905,
770  UAO = 49684,
771  PMBLIMITR_EL1 = 50384,
772  PMBPTR_EL1 = 50385,
773  PMBSR_EL1 = 50387,
774  PMBIDR_EL1 = 50391,
775  PMSCR_EL2 = 58568,
776  PMSCR_EL12 = 60616,
777  PMSCR_EL1 = 50376,
778  PMSICR_EL1 = 50378,
779  PMSIRR_EL1 = 50379,
780  PMSFCR_EL1 = 50380,
781  PMSEVFR_EL1 = 50381,
782  PMSLATFR_EL1 = 50382,
783  PMSIDR_EL1 = 50383,
784  ERRSELR_EL1 = 49817,
785  ERXCTLR_EL1 = 49825,
786  ERXSTATUS_EL1 = 49826,
787  ERXADDR_EL1 = 49827,
788  ERXMISC0_EL1 = 49832,
789  ERXMISC1_EL1 = 49833,
790  DISR_EL1 = 50697,
791  VDISR_EL2 = 58889,
792  VSESR_EL2 = 58003,
793  APIAKeyLo_EL1 = 49416,
794  APIAKeyHi_EL1 = 49417,
795  APIBKeyLo_EL1 = 49418,
796  APIBKeyHi_EL1 = 49419,
797  APDAKeyLo_EL1 = 49424,
798  APDAKeyHi_EL1 = 49425,
799  APDBKeyLo_EL1 = 49426,
800  APDBKeyHi_EL1 = 49427,
801  APGAKeyLo_EL1 = 49432,
802  APGAKeyHi_EL1 = 49433,
803  VSTCR_EL2 = 57650,
804  VSTTBR_EL2 = 57648,
805  CNTHVS_TVAL_EL2 = 59168,
806  CNTHVS_CVAL_EL2 = 59170,
807  CNTHVS_CTL_EL2 = 59169,
808  CNTHPS_TVAL_EL2 = 59176,
809  CNTHPS_CVAL_EL2 = 59178,
810  CNTHPS_CTL_EL2 = 59177,
811  SDER32_EL2 = 57497,
812  ERXPFGCTL_EL1 = 49829,
813  ERXPFGCDN_EL1 = 49830,
814  ERXTS_EL1 = 49839,
815  ERXMISC2_EL1 = 49834,
816  ERXMISC3_EL1 = 49835,
817  ERXPFGF_EL1 = 49828,
818  MPAM0_EL1 = 50473,
819  MPAM1_EL1 = 50472,
820  MPAM2_EL2 = 58664,
821  MPAM3_EL3 = 62760,
822  MPAM1_EL12 = 60712,
823  MPAMHCR_EL2 = 58656,
824  MPAMVPMV_EL2 = 58657,
825  MPAMVPM0_EL2 = 58672,
826  MPAMVPM1_EL2 = 58673,
827  MPAMVPM2_EL2 = 58674,
828  MPAMVPM3_EL2 = 58675,
829  MPAMVPM4_EL2 = 58676,
830  MPAMVPM5_EL2 = 58677,
831  MPAMVPM6_EL2 = 58678,
832  MPAMVPM7_EL2 = 58679,
833  MPAMIDR_EL1 = 50468,
834  AMCR_EL0 = 56976,
835  AMCFGR_EL0 = 56977,
836  AMCGCR_EL0 = 56978,
837  AMUSERENR_EL0 = 56979,
838  AMCNTENCLR0_EL0 = 56980,
839  AMCNTENSET0_EL0 = 56981,
840  AMEVCNTR00_EL0 = 56992,
841  AMEVCNTR01_EL0 = 56993,
842  AMEVCNTR02_EL0 = 56994,
843  AMEVCNTR03_EL0 = 56995,
844  AMEVTYPER00_EL0 = 57008,
845  AMEVTYPER01_EL0 = 57009,
846  AMEVTYPER02_EL0 = 57010,
847  AMEVTYPER03_EL0 = 57011,
848  AMCNTENCLR1_EL0 = 56984,
849  AMCNTENSET1_EL0 = 56985,
850  AMEVCNTR10_EL0 = 57056,
851  AMEVCNTR11_EL0 = 57057,
852  AMEVCNTR12_EL0 = 57058,
853  AMEVCNTR13_EL0 = 57059,
854  AMEVCNTR14_EL0 = 57060,
855  AMEVCNTR15_EL0 = 57061,
856  AMEVCNTR16_EL0 = 57062,
857  AMEVCNTR17_EL0 = 57063,
858  AMEVCNTR18_EL0 = 57064,
859  AMEVCNTR19_EL0 = 57065,
860  AMEVCNTR110_EL0 = 57066,
861  AMEVCNTR111_EL0 = 57067,
862  AMEVCNTR112_EL0 = 57068,
863  AMEVCNTR113_EL0 = 57069,
864  AMEVCNTR114_EL0 = 57070,
865  AMEVCNTR115_EL0 = 57071,
866  AMEVTYPER10_EL0 = 57072,
867  AMEVTYPER11_EL0 = 57073,
868  AMEVTYPER12_EL0 = 57074,
869  AMEVTYPER13_EL0 = 57075,
870  AMEVTYPER14_EL0 = 57076,
871  AMEVTYPER15_EL0 = 57077,
872  AMEVTYPER16_EL0 = 57078,
873  AMEVTYPER17_EL0 = 57079,
874  AMEVTYPER18_EL0 = 57080,
875  AMEVTYPER19_EL0 = 57081,
876  AMEVTYPER110_EL0 = 57082,
877  AMEVTYPER111_EL0 = 57083,
878  AMEVTYPER112_EL0 = 57084,
879  AMEVTYPER113_EL0 = 57085,
880  AMEVTYPER114_EL0 = 57086,
881  AMEVTYPER115_EL0 = 57087,
882  TRFCR_EL1 = 49297,
883  TRFCR_EL2 = 57489,
884  TRFCR_EL12 = 59537,
885  DIT = 55829,
886  VNCR_EL2 = 57616,
887  ZCR_EL1 = 49296,
888  ZCR_EL2 = 57488,
889  ZCR_EL3 = 61584,
890  ZCR_EL12 = 59536,
891  CPM_IOACC_CTL_EL3 = 65424,
892};
893#endif
894
895#ifdef GET_TLBI_DECL
896enum TLBIValues {
897  IPAS2E1IS = 9217,
898  IPAS2LE1IS = 9221,
899  VMALLE1IS = 1048,
900  ALLE2IS = 9240,
901  ALLE3IS = 13336,
902  VAE1IS = 1049,
903  VAE2IS = 9241,
904  VAE3IS = 13337,
905  ASIDE1IS = 1050,
906  VAAE1IS = 1051,
907  ALLE1IS = 9244,
908  VALE1IS = 1053,
909  VALE2IS = 9245,
910  VALE3IS = 13341,
911  VMALLS12E1IS = 9246,
912  VAALE1IS = 1055,
913  IPAS2E1 = 9249,
914  IPAS2LE1 = 9253,
915  VMALLE1 = 1080,
916  ALLE2 = 9272,
917  ALLE3 = 13368,
918  VAE1 = 1081,
919  VAE2 = 9273,
920  VAE3 = 13369,
921  ASIDE1 = 1082,
922  VAAE1 = 1083,
923  ALLE1 = 9276,
924  VALE1 = 1085,
925  VALE2 = 9277,
926  VALE3 = 13373,
927  VMALLS12E1 = 9278,
928  VAALE1 = 1087,
929  VMALLE1OS = 1032,
930  VAE1OS = 1033,
931  ASIDE1OS = 1034,
932  VAAE1OS = 1035,
933  VALE1OS = 1037,
934  VAALE1OS = 1039,
935  IPAS2E1OS = 9248,
936  IPAS2LE1OS = 9252,
937  VAE2OS = 9225,
938  VALE2OS = 9229,
939  VMALLS12E1OS = 9230,
940  VAE3OS = 13321,
941  VALE3OS = 13325,
942  ALLE2OS = 9224,
943  ALLE1OS = 9228,
944  ALLE3OS = 13320,
945  RVAE1 = 1073,
946  RVAAE1 = 1075,
947  RVALE1 = 1077,
948  RVAALE1 = 1079,
949  RVAE1IS = 1041,
950  RVAAE1IS = 1043,
951  RVALE1IS = 1045,
952  RVAALE1IS = 1047,
953  RVAE1OS = 1065,
954  RVAAE1OS = 1067,
955  RVALE1OS = 1069,
956  RVAALE1OS = 1071,
957  RIPAS2E1IS = 9218,
958  RIPAS2LE1IS = 9222,
959  RIPAS2E1 = 9250,
960  RIPAS2LE1 = 9254,
961  RIPAS2E1OS = 9251,
962  RIPAS2LE1OS = 9255,
963  RVAE2 = 9265,
964  RVALE2 = 9269,
965  RVAE2IS = 9233,
966  RVALE2IS = 9237,
967  RVAE2OS = 9257,
968  RVALE2OS = 9261,
969  RVAE3 = 13361,
970  RVALE3 = 13365,
971  RVAE3IS = 13329,
972  RVALE3IS = 13333,
973  RVAE3OS = 13353,
974  RVALE3OS = 13357,
975};
976#endif
977
978#ifdef GET_TSB_DECL
979enum TSBValues {
980  csync = 0,
981};
982#endif
983
984#ifdef GET_AT_DECL
985const AT *lookupATByName(StringRef Name);
986const AT *lookupATByEncoding(uint16_t Encoding);
987#endif
988
989#ifdef GET_AT_IMPL
990const AT ATsList[] = {
991  { "S1E1R", 0x3C0,  {}  }, // 0
992  { "S1E2R", 0x23C0,  {}  }, // 1
993  { "S1E3R", 0x33C0,  {}  }, // 2
994  { "S1E1W", 0x3C1,  {}  }, // 3
995  { "S1E2W", 0x23C1,  {}  }, // 4
996  { "S1E3W", 0x33C1,  {}  }, // 5
997  { "S1E0R", 0x3C2,  {}  }, // 6
998  { "S1E0W", 0x3C3,  {}  }, // 7
999  { "S12E1R", 0x23C4,  {}  }, // 8
1000  { "S12E1W", 0x23C5,  {}  }, // 9
1001  { "S12E0R", 0x23C6,  {}  }, // 10
1002  { "S12E0W", 0x23C7,  {}  }, // 11
1003  { "S1E1RP", 0x3C8,  {AArch64::HasV8_2aOps}  }, // 12
1004  { "S1E1WP", 0x3C9,  {AArch64::HasV8_2aOps}  }, // 13
1005 };
1006
1007const AT *lookupATByName(StringRef Name) {
1008  struct IndexType {
1009    const char * Name;
1010    unsigned _index;
1011  };
1012  static const struct IndexType Index[] = {
1013    { "S12E0R", 10 },
1014    { "S12E0W", 11 },
1015    { "S12E1R", 8 },
1016    { "S12E1W", 9 },
1017    { "S1E0R", 6 },
1018    { "S1E0W", 7 },
1019    { "S1E1R", 0 },
1020    { "S1E1RP", 12 },
1021    { "S1E1W", 3 },
1022    { "S1E1WP", 13 },
1023    { "S1E2R", 1 },
1024    { "S1E2W", 4 },
1025    { "S1E3R", 2 },
1026    { "S1E3W", 5 },
1027  };
1028
1029  struct KeyType {
1030    std::string Name;
1031  };
1032  KeyType Key = { Name.upper() };
1033  auto Table = makeArrayRef(Index);
1034  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1035    [](const IndexType &LHS, const KeyType &RHS) {
1036      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1037      if (CmpName < 0) return true;
1038      if (CmpName > 0) return false;
1039      return false;
1040    });
1041
1042  if (Idx == Table.end() ||
1043      Key.Name != Idx->Name)
1044    return nullptr;
1045  return &ATsList[Idx->_index];
1046}
1047
1048const AT *lookupATByEncoding(uint16_t Encoding) {
1049  struct IndexType {
1050    uint16_t Encoding;
1051    unsigned _index;
1052  };
1053  static const struct IndexType Index[] = {
1054    { 0x3C0, 0 },
1055    { 0x3C1, 3 },
1056    { 0x3C2, 6 },
1057    { 0x3C3, 7 },
1058    { 0x3C8, 12 },
1059    { 0x3C9, 13 },
1060    { 0x23C0, 1 },
1061    { 0x23C1, 4 },
1062    { 0x23C4, 8 },
1063    { 0x23C5, 9 },
1064    { 0x23C6, 10 },
1065    { 0x23C7, 11 },
1066    { 0x33C0, 2 },
1067    { 0x33C1, 5 },
1068  };
1069
1070  struct KeyType {
1071    uint16_t Encoding;
1072  };
1073  KeyType Key = { Encoding };
1074  auto Table = makeArrayRef(Index);
1075  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1076    [](const IndexType &LHS, const KeyType &RHS) {
1077      if (LHS.Encoding < RHS.Encoding)
1078        return true;
1079      if (LHS.Encoding > RHS.Encoding)
1080        return false;
1081      return false;
1082    });
1083
1084  if (Idx == Table.end() ||
1085      Key.Encoding != Idx->Encoding)
1086    return nullptr;
1087  return &ATsList[Idx->_index];
1088}
1089#endif
1090
1091#ifdef GET_DB_DECL
1092const DB *lookupDBByName(StringRef Name);
1093const DB *lookupDBByEncoding(uint8_t Encoding);
1094#endif
1095
1096#ifdef GET_DB_IMPL
1097const DB DBsList[] = {
1098  { "oshld", 0x1 }, // 0
1099  { "oshst", 0x2 }, // 1
1100  { "osh", 0x3 }, // 2
1101  { "nshld", 0x5 }, // 3
1102  { "nshst", 0x6 }, // 4
1103  { "nsh", 0x7 }, // 5
1104  { "ishld", 0x9 }, // 6
1105  { "ishst", 0xA }, // 7
1106  { "ish", 0xB }, // 8
1107  { "ld", 0xD }, // 9
1108  { "st", 0xE }, // 10
1109  { "sy", 0xF }, // 11
1110 };
1111
1112const DB *lookupDBByName(StringRef Name) {
1113  struct IndexType {
1114    const char * Name;
1115    unsigned _index;
1116  };
1117  static const struct IndexType Index[] = {
1118    { "ISH", 8 },
1119    { "ISHLD", 6 },
1120    { "ISHST", 7 },
1121    { "LD", 9 },
1122    { "NSH", 5 },
1123    { "NSHLD", 3 },
1124    { "NSHST", 4 },
1125    { "OSH", 2 },
1126    { "OSHLD", 0 },
1127    { "OSHST", 1 },
1128    { "ST", 10 },
1129    { "SY", 11 },
1130  };
1131
1132  struct KeyType {
1133    std::string Name;
1134  };
1135  KeyType Key = { Name.upper() };
1136  auto Table = makeArrayRef(Index);
1137  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1138    [](const IndexType &LHS, const KeyType &RHS) {
1139      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1140      if (CmpName < 0) return true;
1141      if (CmpName > 0) return false;
1142      return false;
1143    });
1144
1145  if (Idx == Table.end() ||
1146      Key.Name != Idx->Name)
1147    return nullptr;
1148  return &DBsList[Idx->_index];
1149}
1150
1151const DB *lookupDBByEncoding(uint8_t Encoding) {
1152  struct IndexType {
1153    uint8_t Encoding;
1154    unsigned _index;
1155  };
1156  static const struct IndexType Index[] = {
1157    { 0x1, 0 },
1158    { 0x2, 1 },
1159    { 0x3, 2 },
1160    { 0x5, 3 },
1161    { 0x6, 4 },
1162    { 0x7, 5 },
1163    { 0x9, 6 },
1164    { 0xA, 7 },
1165    { 0xB, 8 },
1166    { 0xD, 9 },
1167    { 0xE, 10 },
1168    { 0xF, 11 },
1169  };
1170
1171  struct KeyType {
1172    uint8_t Encoding;
1173  };
1174  KeyType Key = { Encoding };
1175  auto Table = makeArrayRef(Index);
1176  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1177    [](const IndexType &LHS, const KeyType &RHS) {
1178      if (LHS.Encoding < RHS.Encoding)
1179        return true;
1180      if (LHS.Encoding > RHS.Encoding)
1181        return false;
1182      return false;
1183    });
1184
1185  if (Idx == Table.end() ||
1186      Key.Encoding != Idx->Encoding)
1187    return nullptr;
1188  return &DBsList[Idx->_index];
1189}
1190#endif
1191
1192#ifdef GET_DC_DECL
1193const DC *lookupDCByName(StringRef Name);
1194const DC *lookupDCByEncoding(uint16_t Encoding);
1195#endif
1196
1197#ifdef GET_DC_IMPL
1198const DC DCsList[] = {
1199  { "ZVA", 0x1BA1,  {}  }, // 0
1200  { "IVAC", 0x3B1,  {}  }, // 1
1201  { "ISW", 0x3B2,  {}  }, // 2
1202  { "CVAC", 0x1BD1,  {}  }, // 3
1203  { "CSW", 0x3D2,  {}  }, // 4
1204  { "CVAU", 0x1BD9,  {}  }, // 5
1205  { "CIVAC", 0x1BF1,  {}  }, // 6
1206  { "CISW", 0x3F2,  {}  }, // 7
1207  { "CVAP", 0x1BE1,  {AArch64::HasV8_2aOps}  }, // 8
1208 };
1209
1210const DC *lookupDCByName(StringRef Name) {
1211  struct IndexType {
1212    const char * Name;
1213    unsigned _index;
1214  };
1215  static const struct IndexType Index[] = {
1216    { "CISW", 7 },
1217    { "CIVAC", 6 },
1218    { "CSW", 4 },
1219    { "CVAC", 3 },
1220    { "CVAP", 8 },
1221    { "CVAU", 5 },
1222    { "ISW", 2 },
1223    { "IVAC", 1 },
1224    { "ZVA", 0 },
1225  };
1226
1227  struct KeyType {
1228    std::string Name;
1229  };
1230  KeyType Key = { Name.upper() };
1231  auto Table = makeArrayRef(Index);
1232  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1233    [](const IndexType &LHS, const KeyType &RHS) {
1234      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1235      if (CmpName < 0) return true;
1236      if (CmpName > 0) return false;
1237      return false;
1238    });
1239
1240  if (Idx == Table.end() ||
1241      Key.Name != Idx->Name)
1242    return nullptr;
1243  return &DCsList[Idx->_index];
1244}
1245
1246const DC *lookupDCByEncoding(uint16_t Encoding) {
1247  struct IndexType {
1248    uint16_t Encoding;
1249    unsigned _index;
1250  };
1251  static const struct IndexType Index[] = {
1252    { 0x3B1, 1 },
1253    { 0x3B2, 2 },
1254    { 0x3D2, 4 },
1255    { 0x3F2, 7 },
1256    { 0x1BA1, 0 },
1257    { 0x1BD1, 3 },
1258    { 0x1BD9, 5 },
1259    { 0x1BE1, 8 },
1260    { 0x1BF1, 6 },
1261  };
1262
1263  struct KeyType {
1264    uint16_t Encoding;
1265  };
1266  KeyType Key = { Encoding };
1267  auto Table = makeArrayRef(Index);
1268  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1269    [](const IndexType &LHS, const KeyType &RHS) {
1270      if (LHS.Encoding < RHS.Encoding)
1271        return true;
1272      if (LHS.Encoding > RHS.Encoding)
1273        return false;
1274      return false;
1275    });
1276
1277  if (Idx == Table.end() ||
1278      Key.Encoding != Idx->Encoding)
1279    return nullptr;
1280  return &DCsList[Idx->_index];
1281}
1282#endif
1283
1284#ifdef GET_EXACTFPIMM_DECL
1285const ExactFPImm *lookupExactFPImmByEnum(uint8_t Enum);
1286const ExactFPImm *lookupExactFPImmByRepr(StringRef Repr);
1287#endif
1288
1289#ifdef GET_EXACTFPIMM_IMPL
1290const ExactFPImm ExactFPImmsList[] = {
1291  { "zero", 0x0, "0.0" }, // 0
1292  { "half", 0x1, "0.5" }, // 1
1293  { "one", 0x2, "1.0" }, // 2
1294  { "two", 0x3, "2.0" }, // 3
1295 };
1296
1297const ExactFPImm *lookupExactFPImmByEnum(uint8_t Enum) {
1298  struct IndexType {
1299    uint8_t Enum;
1300    unsigned _index;
1301  };
1302  static const struct IndexType Index[] = {
1303    { 0x0, 0 },
1304    { 0x1, 1 },
1305    { 0x2, 2 },
1306    { 0x3, 3 },
1307  };
1308
1309  auto Table = makeArrayRef(Index);
1310  size_t Idx = Enum;
1311  return Idx >= Table.size() ? nullptr : &ExactFPImmsList[Table[Idx]._index];
1312}
1313
1314const ExactFPImm *lookupExactFPImmByRepr(StringRef Repr) {
1315  struct IndexType {
1316    const char * Repr;
1317    unsigned _index;
1318  };
1319  static const struct IndexType Index[] = {
1320    { "0.0", 0 },
1321    { "0.5", 1 },
1322    { "1.0", 2 },
1323    { "2.0", 3 },
1324  };
1325
1326  struct KeyType {
1327    std::string Repr;
1328  };
1329  KeyType Key = { Repr.upper() };
1330  auto Table = makeArrayRef(Index);
1331  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1332    [](const IndexType &LHS, const KeyType &RHS) {
1333      int CmpRepr = StringRef(LHS.Repr).compare(RHS.Repr);
1334      if (CmpRepr < 0) return true;
1335      if (CmpRepr > 0) return false;
1336      return false;
1337    });
1338
1339  if (Idx == Table.end() ||
1340      Key.Repr != Idx->Repr)
1341    return nullptr;
1342  return &ExactFPImmsList[Idx->_index];
1343}
1344#endif
1345
1346#ifdef GET_IC_DECL
1347const IC *lookupICByName(StringRef Name);
1348const IC *lookupICByEncoding(uint16_t Encoding);
1349#endif
1350
1351#ifdef GET_IC_IMPL
1352const IC ICsList[] = {
1353  { "IALLUIS", 0x388, false }, // 0
1354  { "IALLU", 0x3A8, false }, // 1
1355  { "IVAU", 0x1BA9, true }, // 2
1356 };
1357
1358const IC *lookupICByName(StringRef Name) {
1359  struct IndexType {
1360    const char * Name;
1361    unsigned _index;
1362  };
1363  static const struct IndexType Index[] = {
1364    { "IALLU", 1 },
1365    { "IALLUIS", 0 },
1366    { "IVAU", 2 },
1367  };
1368
1369  struct KeyType {
1370    std::string Name;
1371  };
1372  KeyType Key = { Name.upper() };
1373  auto Table = makeArrayRef(Index);
1374  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1375    [](const IndexType &LHS, const KeyType &RHS) {
1376      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1377      if (CmpName < 0) return true;
1378      if (CmpName > 0) return false;
1379      return false;
1380    });
1381
1382  if (Idx == Table.end() ||
1383      Key.Name != Idx->Name)
1384    return nullptr;
1385  return &ICsList[Idx->_index];
1386}
1387
1388const IC *lookupICByEncoding(uint16_t Encoding) {
1389  struct IndexType {
1390    uint16_t Encoding;
1391    unsigned _index;
1392  };
1393  static const struct IndexType Index[] = {
1394    { 0x388, 0 },
1395    { 0x3A8, 1 },
1396    { 0x1BA9, 2 },
1397  };
1398
1399  struct KeyType {
1400    uint16_t Encoding;
1401  };
1402  KeyType Key = { Encoding };
1403  auto Table = makeArrayRef(Index);
1404  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1405    [](const IndexType &LHS, const KeyType &RHS) {
1406      if (LHS.Encoding < RHS.Encoding)
1407        return true;
1408      if (LHS.Encoding > RHS.Encoding)
1409        return false;
1410      return false;
1411    });
1412
1413  if (Idx == Table.end() ||
1414      Key.Encoding != Idx->Encoding)
1415    return nullptr;
1416  return &ICsList[Idx->_index];
1417}
1418#endif
1419
1420#ifdef GET_ISB_DECL
1421const ISB *lookupISBByName(StringRef Name);
1422const ISB *lookupISBByEncoding(uint8_t Encoding);
1423#endif
1424
1425#ifdef GET_ISB_IMPL
1426const ISB ISBsList[] = {
1427  { "sy", 0xF }, // 0
1428 };
1429
1430const ISB *lookupISBByName(StringRef Name) {
1431  struct IndexType {
1432    const char * Name;
1433    unsigned _index;
1434  };
1435  static const struct IndexType Index[] = {
1436    { "SY", 0 },
1437  };
1438
1439  struct KeyType {
1440    std::string Name;
1441  };
1442  KeyType Key = { Name.upper() };
1443  auto Table = makeArrayRef(Index);
1444  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1445    [](const IndexType &LHS, const KeyType &RHS) {
1446      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1447      if (CmpName < 0) return true;
1448      if (CmpName > 0) return false;
1449      return false;
1450    });
1451
1452  if (Idx == Table.end() ||
1453      Key.Name != Idx->Name)
1454    return nullptr;
1455  return &ISBsList[Idx->_index];
1456}
1457
1458const ISB *lookupISBByEncoding(uint8_t Encoding) {
1459  struct IndexType {
1460    uint8_t Encoding;
1461    unsigned _index;
1462  };
1463  static const struct IndexType Index[] = {
1464    { 0xF, 0 },
1465  };
1466
1467  struct KeyType {
1468    uint8_t Encoding;
1469  };
1470  KeyType Key = { Encoding };
1471  auto Table = makeArrayRef(Index);
1472  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1473    [](const IndexType &LHS, const KeyType &RHS) {
1474      if (LHS.Encoding < RHS.Encoding)
1475        return true;
1476      if (LHS.Encoding > RHS.Encoding)
1477        return false;
1478      return false;
1479    });
1480
1481  if (Idx == Table.end() ||
1482      Key.Encoding != Idx->Encoding)
1483    return nullptr;
1484  return &ISBsList[Idx->_index];
1485}
1486#endif
1487
1488#ifdef GET_PRFM_DECL
1489const PRFM *lookupPRFMByName(StringRef Name);
1490const PRFM *lookupPRFMByEncoding(uint8_t Encoding);
1491#endif
1492
1493#ifdef GET_PRFM_IMPL
1494const PRFM PRFMsList[] = {
1495  { "pldl1keep", 0x0 }, // 0
1496  { "pldl1strm", 0x1 }, // 1
1497  { "pldl2keep", 0x2 }, // 2
1498  { "pldl2strm", 0x3 }, // 3
1499  { "pldl3keep", 0x4 }, // 4
1500  { "pldl3strm", 0x5 }, // 5
1501  { "plil1keep", 0x8 }, // 6
1502  { "plil1strm", 0x9 }, // 7
1503  { "plil2keep", 0xA }, // 8
1504  { "plil2strm", 0xB }, // 9
1505  { "plil3keep", 0xC }, // 10
1506  { "plil3strm", 0xD }, // 11
1507  { "pstl1keep", 0x10 }, // 12
1508  { "pstl1strm", 0x11 }, // 13
1509  { "pstl2keep", 0x12 }, // 14
1510  { "pstl2strm", 0x13 }, // 15
1511  { "pstl3keep", 0x14 }, // 16
1512  { "pstl3strm", 0x15 }, // 17
1513 };
1514
1515const PRFM *lookupPRFMByName(StringRef Name) {
1516  struct IndexType {
1517    const char * Name;
1518    unsigned _index;
1519  };
1520  static const struct IndexType Index[] = {
1521    { "PLDL1KEEP", 0 },
1522    { "PLDL1STRM", 1 },
1523    { "PLDL2KEEP", 2 },
1524    { "PLDL2STRM", 3 },
1525    { "PLDL3KEEP", 4 },
1526    { "PLDL3STRM", 5 },
1527    { "PLIL1KEEP", 6 },
1528    { "PLIL1STRM", 7 },
1529    { "PLIL2KEEP", 8 },
1530    { "PLIL2STRM", 9 },
1531    { "PLIL3KEEP", 10 },
1532    { "PLIL3STRM", 11 },
1533    { "PSTL1KEEP", 12 },
1534    { "PSTL1STRM", 13 },
1535    { "PSTL2KEEP", 14 },
1536    { "PSTL2STRM", 15 },
1537    { "PSTL3KEEP", 16 },
1538    { "PSTL3STRM", 17 },
1539  };
1540
1541  struct KeyType {
1542    std::string Name;
1543  };
1544  KeyType Key = { Name.upper() };
1545  auto Table = makeArrayRef(Index);
1546  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1547    [](const IndexType &LHS, const KeyType &RHS) {
1548      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1549      if (CmpName < 0) return true;
1550      if (CmpName > 0) return false;
1551      return false;
1552    });
1553
1554  if (Idx == Table.end() ||
1555      Key.Name != Idx->Name)
1556    return nullptr;
1557  return &PRFMsList[Idx->_index];
1558}
1559
1560const PRFM *lookupPRFMByEncoding(uint8_t Encoding) {
1561  struct IndexType {
1562    uint8_t Encoding;
1563    unsigned _index;
1564  };
1565  static const struct IndexType Index[] = {
1566    { 0x0, 0 },
1567    { 0x1, 1 },
1568    { 0x2, 2 },
1569    { 0x3, 3 },
1570    { 0x4, 4 },
1571    { 0x5, 5 },
1572    { 0x8, 6 },
1573    { 0x9, 7 },
1574    { 0xA, 8 },
1575    { 0xB, 9 },
1576    { 0xC, 10 },
1577    { 0xD, 11 },
1578    { 0x10, 12 },
1579    { 0x11, 13 },
1580    { 0x12, 14 },
1581    { 0x13, 15 },
1582    { 0x14, 16 },
1583    { 0x15, 17 },
1584  };
1585
1586  struct KeyType {
1587    uint8_t Encoding;
1588  };
1589  KeyType Key = { Encoding };
1590  auto Table = makeArrayRef(Index);
1591  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1592    [](const IndexType &LHS, const KeyType &RHS) {
1593      if (LHS.Encoding < RHS.Encoding)
1594        return true;
1595      if (LHS.Encoding > RHS.Encoding)
1596        return false;
1597      return false;
1598    });
1599
1600  if (Idx == Table.end() ||
1601      Key.Encoding != Idx->Encoding)
1602    return nullptr;
1603  return &PRFMsList[Idx->_index];
1604}
1605#endif
1606
1607#ifdef GET_PSB_DECL
1608const PSB *lookupPSBByName(StringRef Name);
1609const PSB *lookupPSBByEncoding(uint8_t Encoding);
1610#endif
1611
1612#ifdef GET_PSB_IMPL
1613const PSB PSBsList[] = {
1614  { "csync", 0x11 }, // 0
1615 };
1616
1617const PSB *lookupPSBByName(StringRef Name) {
1618  struct IndexType {
1619    const char * Name;
1620    unsigned _index;
1621  };
1622  static const struct IndexType Index[] = {
1623    { "CSYNC", 0 },
1624  };
1625
1626  struct KeyType {
1627    std::string Name;
1628  };
1629  KeyType Key = { Name.upper() };
1630  auto Table = makeArrayRef(Index);
1631  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1632    [](const IndexType &LHS, const KeyType &RHS) {
1633      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1634      if (CmpName < 0) return true;
1635      if (CmpName > 0) return false;
1636      return false;
1637    });
1638
1639  if (Idx == Table.end() ||
1640      Key.Name != Idx->Name)
1641    return nullptr;
1642  return &PSBsList[Idx->_index];
1643}
1644
1645const PSB *lookupPSBByEncoding(uint8_t Encoding) {
1646  struct IndexType {
1647    uint8_t Encoding;
1648    unsigned _index;
1649  };
1650  static const struct IndexType Index[] = {
1651    { 0x11, 0 },
1652  };
1653
1654  struct KeyType {
1655    uint8_t Encoding;
1656  };
1657  KeyType Key = { Encoding };
1658  auto Table = makeArrayRef(Index);
1659  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1660    [](const IndexType &LHS, const KeyType &RHS) {
1661      if (LHS.Encoding < RHS.Encoding)
1662        return true;
1663      if (LHS.Encoding > RHS.Encoding)
1664        return false;
1665      return false;
1666    });
1667
1668  if (Idx == Table.end() ||
1669      Key.Encoding != Idx->Encoding)
1670    return nullptr;
1671  return &PSBsList[Idx->_index];
1672}
1673#endif
1674
1675#ifdef GET_PSTATE_DECL
1676const PState *lookupPStateByName(StringRef Name);
1677const PState *lookupPStateByEncoding(uint8_t Encoding);
1678#endif
1679
1680#ifdef GET_PSTATE_IMPL
1681const PState PStatesList[] = {
1682  { "SPSel", 0x5,  {}  }, // 0
1683  { "DAIFSet", 0x1E,  {}  }, // 1
1684  { "DAIFClr", 0x1F,  {}  }, // 2
1685  { "PAN", 0x4,  {AArch64::HasV8_1aOps}  }, // 3
1686  { "UAO", 0x3,  {AArch64::HasV8_2aOps}  }, // 4
1687  { "DIT", 0x1A,  {AArch64::HasV8_4aOps}  }, // 5
1688 };
1689
1690const PState *lookupPStateByName(StringRef Name) {
1691  struct IndexType {
1692    const char * Name;
1693    unsigned _index;
1694  };
1695  static const struct IndexType Index[] = {
1696    { "DAIFCLR", 2 },
1697    { "DAIFSET", 1 },
1698    { "DIT", 5 },
1699    { "PAN", 3 },
1700    { "SPSEL", 0 },
1701    { "UAO", 4 },
1702  };
1703
1704  struct KeyType {
1705    std::string Name;
1706  };
1707  KeyType Key = { Name.upper() };
1708  auto Table = makeArrayRef(Index);
1709  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1710    [](const IndexType &LHS, const KeyType &RHS) {
1711      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1712      if (CmpName < 0) return true;
1713      if (CmpName > 0) return false;
1714      return false;
1715    });
1716
1717  if (Idx == Table.end() ||
1718      Key.Name != Idx->Name)
1719    return nullptr;
1720  return &PStatesList[Idx->_index];
1721}
1722
1723const PState *lookupPStateByEncoding(uint8_t Encoding) {
1724  struct IndexType {
1725    uint8_t Encoding;
1726    unsigned _index;
1727  };
1728  static const struct IndexType Index[] = {
1729    { 0x3, 4 },
1730    { 0x4, 3 },
1731    { 0x5, 0 },
1732    { 0x1A, 5 },
1733    { 0x1E, 1 },
1734    { 0x1F, 2 },
1735  };
1736
1737  struct KeyType {
1738    uint8_t Encoding;
1739  };
1740  KeyType Key = { Encoding };
1741  auto Table = makeArrayRef(Index);
1742  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1743    [](const IndexType &LHS, const KeyType &RHS) {
1744      if (LHS.Encoding < RHS.Encoding)
1745        return true;
1746      if (LHS.Encoding > RHS.Encoding)
1747        return false;
1748      return false;
1749    });
1750
1751  if (Idx == Table.end() ||
1752      Key.Encoding != Idx->Encoding)
1753    return nullptr;
1754  return &PStatesList[Idx->_index];
1755}
1756#endif
1757
1758#ifdef GET_SVEPREDPAT_DECL
1759const SVEPREDPAT *lookupSVEPREDPATByName(StringRef Name);
1760const SVEPREDPAT *lookupSVEPREDPATByEncoding(uint8_t Encoding);
1761#endif
1762
1763#ifdef GET_SVEPREDPAT_IMPL
1764const SVEPREDPAT SVEPREDPATsList[] = {
1765  { "pow2", 0x0 }, // 0
1766  { "vl1", 0x1 }, // 1
1767  { "vl2", 0x2 }, // 2
1768  { "vl3", 0x3 }, // 3
1769  { "vl4", 0x4 }, // 4
1770  { "vl5", 0x5 }, // 5
1771  { "vl6", 0x6 }, // 6
1772  { "vl7", 0x7 }, // 7
1773  { "vl8", 0x8 }, // 8
1774  { "vl16", 0x9 }, // 9
1775  { "vl32", 0xA }, // 10
1776  { "vl64", 0xB }, // 11
1777  { "vl128", 0xC }, // 12
1778  { "vl256", 0xD }, // 13
1779  { "mul4", 0x1D }, // 14
1780  { "mul3", 0x1E }, // 15
1781  { "all", 0x1F }, // 16
1782 };
1783
1784const SVEPREDPAT *lookupSVEPREDPATByName(StringRef Name) {
1785  struct IndexType {
1786    const char * Name;
1787    unsigned _index;
1788  };
1789  static const struct IndexType Index[] = {
1790    { "ALL", 16 },
1791    { "MUL3", 15 },
1792    { "MUL4", 14 },
1793    { "POW2", 0 },
1794    { "VL1", 1 },
1795    { "VL128", 12 },
1796    { "VL16", 9 },
1797    { "VL2", 2 },
1798    { "VL256", 13 },
1799    { "VL3", 3 },
1800    { "VL32", 10 },
1801    { "VL4", 4 },
1802    { "VL5", 5 },
1803    { "VL6", 6 },
1804    { "VL64", 11 },
1805    { "VL7", 7 },
1806    { "VL8", 8 },
1807  };
1808
1809  struct KeyType {
1810    std::string Name;
1811  };
1812  KeyType Key = { Name.upper() };
1813  auto Table = makeArrayRef(Index);
1814  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1815    [](const IndexType &LHS, const KeyType &RHS) {
1816      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1817      if (CmpName < 0) return true;
1818      if (CmpName > 0) return false;
1819      return false;
1820    });
1821
1822  if (Idx == Table.end() ||
1823      Key.Name != Idx->Name)
1824    return nullptr;
1825  return &SVEPREDPATsList[Idx->_index];
1826}
1827
1828const SVEPREDPAT *lookupSVEPREDPATByEncoding(uint8_t Encoding) {
1829  struct IndexType {
1830    uint8_t Encoding;
1831    unsigned _index;
1832  };
1833  static const struct IndexType Index[] = {
1834    { 0x0, 0 },
1835    { 0x1, 1 },
1836    { 0x2, 2 },
1837    { 0x3, 3 },
1838    { 0x4, 4 },
1839    { 0x5, 5 },
1840    { 0x6, 6 },
1841    { 0x7, 7 },
1842    { 0x8, 8 },
1843    { 0x9, 9 },
1844    { 0xA, 10 },
1845    { 0xB, 11 },
1846    { 0xC, 12 },
1847    { 0xD, 13 },
1848    { 0x1D, 14 },
1849    { 0x1E, 15 },
1850    { 0x1F, 16 },
1851  };
1852
1853  struct KeyType {
1854    uint8_t Encoding;
1855  };
1856  KeyType Key = { Encoding };
1857  auto Table = makeArrayRef(Index);
1858  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1859    [](const IndexType &LHS, const KeyType &RHS) {
1860      if (LHS.Encoding < RHS.Encoding)
1861        return true;
1862      if (LHS.Encoding > RHS.Encoding)
1863        return false;
1864      return false;
1865    });
1866
1867  if (Idx == Table.end() ||
1868      Key.Encoding != Idx->Encoding)
1869    return nullptr;
1870  return &SVEPREDPATsList[Idx->_index];
1871}
1872#endif
1873
1874#ifdef GET_SVEPRFM_DECL
1875const SVEPRFM *lookupSVEPRFMByName(StringRef Name);
1876const SVEPRFM *lookupSVEPRFMByEncoding(uint8_t Encoding);
1877#endif
1878
1879#ifdef GET_SVEPRFM_IMPL
1880const SVEPRFM SVEPRFMsList[] = {
1881  { "pldl1keep", 0x0,  {AArch64::FeatureSVE}  }, // 0
1882  { "pldl1strm", 0x1,  {AArch64::FeatureSVE}  }, // 1
1883  { "pldl2keep", 0x2,  {AArch64::FeatureSVE}  }, // 2
1884  { "pldl2strm", 0x3,  {AArch64::FeatureSVE}  }, // 3
1885  { "pldl3keep", 0x4,  {AArch64::FeatureSVE}  }, // 4
1886  { "pldl3strm", 0x5,  {AArch64::FeatureSVE}  }, // 5
1887  { "pstl1keep", 0x8,  {AArch64::FeatureSVE}  }, // 6
1888  { "pstl1strm", 0x9,  {AArch64::FeatureSVE}  }, // 7
1889  { "pstl2keep", 0xA,  {AArch64::FeatureSVE}  }, // 8
1890  { "pstl2strm", 0xB,  {AArch64::FeatureSVE}  }, // 9
1891  { "pstl3keep", 0xC,  {AArch64::FeatureSVE}  }, // 10
1892  { "pstl3strm", 0xD,  {AArch64::FeatureSVE}  }, // 11
1893 };
1894
1895const SVEPRFM *lookupSVEPRFMByName(StringRef Name) {
1896  struct IndexType {
1897    const char * Name;
1898    unsigned _index;
1899  };
1900  static const struct IndexType Index[] = {
1901    { "PLDL1KEEP", 0 },
1902    { "PLDL1STRM", 1 },
1903    { "PLDL2KEEP", 2 },
1904    { "PLDL2STRM", 3 },
1905    { "PLDL3KEEP", 4 },
1906    { "PLDL3STRM", 5 },
1907    { "PSTL1KEEP", 6 },
1908    { "PSTL1STRM", 7 },
1909    { "PSTL2KEEP", 8 },
1910    { "PSTL2STRM", 9 },
1911    { "PSTL3KEEP", 10 },
1912    { "PSTL3STRM", 11 },
1913  };
1914
1915  struct KeyType {
1916    std::string Name;
1917  };
1918  KeyType Key = { Name.upper() };
1919  auto Table = makeArrayRef(Index);
1920  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1921    [](const IndexType &LHS, const KeyType &RHS) {
1922      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
1923      if (CmpName < 0) return true;
1924      if (CmpName > 0) return false;
1925      return false;
1926    });
1927
1928  if (Idx == Table.end() ||
1929      Key.Name != Idx->Name)
1930    return nullptr;
1931  return &SVEPRFMsList[Idx->_index];
1932}
1933
1934const SVEPRFM *lookupSVEPRFMByEncoding(uint8_t Encoding) {
1935  struct IndexType {
1936    uint8_t Encoding;
1937    unsigned _index;
1938  };
1939  static const struct IndexType Index[] = {
1940    { 0x0, 0 },
1941    { 0x1, 1 },
1942    { 0x2, 2 },
1943    { 0x3, 3 },
1944    { 0x4, 4 },
1945    { 0x5, 5 },
1946    { 0x8, 6 },
1947    { 0x9, 7 },
1948    { 0xA, 8 },
1949    { 0xB, 9 },
1950    { 0xC, 10 },
1951    { 0xD, 11 },
1952  };
1953
1954  struct KeyType {
1955    uint8_t Encoding;
1956  };
1957  KeyType Key = { Encoding };
1958  auto Table = makeArrayRef(Index);
1959  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
1960    [](const IndexType &LHS, const KeyType &RHS) {
1961      if (LHS.Encoding < RHS.Encoding)
1962        return true;
1963      if (LHS.Encoding > RHS.Encoding)
1964        return false;
1965      return false;
1966    });
1967
1968  if (Idx == Table.end() ||
1969      Key.Encoding != Idx->Encoding)
1970    return nullptr;
1971  return &SVEPRFMsList[Idx->_index];
1972}
1973#endif
1974
1975#ifdef GET_SYSREG_DECL
1976const SysReg *lookupSysRegByName(StringRef Name);
1977const SysReg *lookupSysRegByEncoding(uint16_t Encoding);
1978#endif
1979
1980#ifdef GET_SYSREG_IMPL
1981const SysReg SysRegsList[] = {
1982  { "MDCCSR_EL0", 0x9808, true, false,  {}  }, // 0
1983  { "DBGDTRRX_EL0", 0x9828, true, false,  {}  }, // 1
1984  { "MDRAR_EL1", 0x8080, true, false,  {}  }, // 2
1985  { "OSLSR_EL1", 0x808C, true, false,  {}  }, // 3
1986  { "DBGAUTHSTATUS_EL1", 0x83F6, true, false,  {}  }, // 4
1987  { "PMCEID0_EL0", 0xDCE6, true, false,  {}  }, // 5
1988  { "PMCEID1_EL0", 0xDCE7, true, false,  {}  }, // 6
1989  { "MIDR_EL1", 0xC000, true, false,  {}  }, // 7
1990  { "CCSIDR_EL1", 0xC800, true, false,  {}  }, // 8
1991  { "CCSIDR2_EL1", 0xC802, true, false,  {AArch64::HasV8_3aOps}  }, // 9
1992  { "CLIDR_EL1", 0xC801, true, false,  {}  }, // 10
1993  { "CTR_EL0", 0xD801, true, false,  {}  }, // 11
1994  { "MPIDR_EL1", 0xC005, true, false,  {}  }, // 12
1995  { "REVIDR_EL1", 0xC006, true, false,  {}  }, // 13
1996  { "AIDR_EL1", 0xC807, true, false,  {}  }, // 14
1997  { "DCZID_EL0", 0xD807, true, false,  {}  }, // 15
1998  { "ID_PFR0_EL1", 0xC008, true, false,  {}  }, // 16
1999  { "ID_PFR1_EL1", 0xC009, true, false,  {}  }, // 17
2000  { "ID_DFR0_EL1", 0xC00A, true, false,  {}  }, // 18
2001  { "ID_AFR0_EL1", 0xC00B, true, false,  {}  }, // 19
2002  { "ID_MMFR0_EL1", 0xC00C, true, false,  {}  }, // 20
2003  { "ID_MMFR1_EL1", 0xC00D, true, false,  {}  }, // 21
2004  { "ID_MMFR2_EL1", 0xC00E, true, false,  {}  }, // 22
2005  { "ID_MMFR3_EL1", 0xC00F, true, false,  {}  }, // 23
2006  { "ID_ISAR0_EL1", 0xC010, true, false,  {}  }, // 24
2007  { "ID_ISAR1_EL1", 0xC011, true, false,  {}  }, // 25
2008  { "ID_ISAR2_EL1", 0xC012, true, false,  {}  }, // 26
2009  { "ID_ISAR3_EL1", 0xC013, true, false,  {}  }, // 27
2010  { "ID_ISAR4_EL1", 0xC014, true, false,  {}  }, // 28
2011  { "ID_ISAR5_EL1", 0xC015, true, false,  {}  }, // 29
2012  { "ID_ISAR6_EL1", 0xC017, true, false,  {AArch64::HasV8_2aOps}  }, // 30
2013  { "ID_AA64PFR0_EL1", 0xC020, true, false,  {}  }, // 31
2014  { "ID_AA64PFR1_EL1", 0xC021, true, false,  {}  }, // 32
2015  { "ID_AA64DFR0_EL1", 0xC028, true, false,  {}  }, // 33
2016  { "ID_AA64DFR1_EL1", 0xC029, true, false,  {}  }, // 34
2017  { "ID_AA64AFR0_EL1", 0xC02C, true, false,  {}  }, // 35
2018  { "ID_AA64AFR1_EL1", 0xC02D, true, false,  {}  }, // 36
2019  { "ID_AA64ISAR0_EL1", 0xC030, true, false,  {}  }, // 37
2020  { "ID_AA64ISAR1_EL1", 0xC031, true, false,  {}  }, // 38
2021  { "ID_AA64MMFR0_EL1", 0xC038, true, false,  {}  }, // 39
2022  { "ID_AA64MMFR1_EL1", 0xC039, true, false,  {}  }, // 40
2023  { "ID_AA64MMFR2_EL1", 0xC03A, true, false,  {AArch64::HasV8_2aOps}  }, // 41
2024  { "MVFR0_EL1", 0xC018, true, false,  {}  }, // 42
2025  { "MVFR1_EL1", 0xC019, true, false,  {}  }, // 43
2026  { "MVFR2_EL1", 0xC01A, true, false,  {}  }, // 44
2027  { "RVBAR_EL1", 0xC601, true, false,  {}  }, // 45
2028  { "RVBAR_EL2", 0xE601, true, false,  {}  }, // 46
2029  { "RVBAR_EL3", 0xF601, true, false,  {}  }, // 47
2030  { "ISR_EL1", 0xC608, true, false,  {}  }, // 48
2031  { "CNTPCT_EL0", 0xDF01, true, false,  {}  }, // 49
2032  { "CNTVCT_EL0", 0xDF02, true, false,  {}  }, // 50
2033  { "ID_MMFR4_EL1", 0xC016, true, false,  {}  }, // 51
2034  { "TRCSTATR", 0x8818, true, false,  {}  }, // 52
2035  { "TRCIDR8", 0x8806, true, false,  {}  }, // 53
2036  { "TRCIDR9", 0x880E, true, false,  {}  }, // 54
2037  { "TRCIDR10", 0x8816, true, false,  {}  }, // 55
2038  { "TRCIDR11", 0x881E, true, false,  {}  }, // 56
2039  { "TRCIDR12", 0x8826, true, false,  {}  }, // 57
2040  { "TRCIDR13", 0x882E, true, false,  {}  }, // 58
2041  { "TRCIDR0", 0x8847, true, false,  {}  }, // 59
2042  { "TRCIDR1", 0x884F, true, false,  {}  }, // 60
2043  { "TRCIDR2", 0x8857, true, false,  {}  }, // 61
2044  { "TRCIDR3", 0x885F, true, false,  {}  }, // 62
2045  { "TRCIDR4", 0x8867, true, false,  {}  }, // 63
2046  { "TRCIDR5", 0x886F, true, false,  {}  }, // 64
2047  { "TRCIDR6", 0x8877, true, false,  {}  }, // 65
2048  { "TRCIDR7", 0x887F, true, false,  {}  }, // 66
2049  { "TRCOSLSR", 0x888C, true, false,  {}  }, // 67
2050  { "TRCPDSR", 0x88AC, true, false,  {}  }, // 68
2051  { "TRCDEVAFF0", 0x8BD6, true, false,  {}  }, // 69
2052  { "TRCDEVAFF1", 0x8BDE, true, false,  {}  }, // 70
2053  { "TRCLSR", 0x8BEE, true, false,  {}  }, // 71
2054  { "TRCAUTHSTATUS", 0x8BF6, true, false,  {}  }, // 72
2055  { "TRCDEVARCH", 0x8BFE, true, false,  {}  }, // 73
2056  { "TRCDEVID", 0x8B97, true, false,  {}  }, // 74
2057  { "TRCDEVTYPE", 0x8B9F, true, false,  {}  }, // 75
2058  { "TRCPIDR4", 0x8BA7, true, false,  {}  }, // 76
2059  { "TRCPIDR5", 0x8BAF, true, false,  {}  }, // 77
2060  { "TRCPIDR6", 0x8BB7, true, false,  {}  }, // 78
2061  { "TRCPIDR7", 0x8BBF, true, false,  {}  }, // 79
2062  { "TRCPIDR0", 0x8BC7, true, false,  {}  }, // 80
2063  { "TRCPIDR1", 0x8BCF, true, false,  {}  }, // 81
2064  { "TRCPIDR2", 0x8BD7, true, false,  {}  }, // 82
2065  { "TRCPIDR3", 0x8BDF, true, false,  {}  }, // 83
2066  { "TRCCIDR0", 0x8BE7, true, false,  {}  }, // 84
2067  { "TRCCIDR1", 0x8BEF, true, false,  {}  }, // 85
2068  { "TRCCIDR2", 0x8BF7, true, false,  {}  }, // 86
2069  { "TRCCIDR3", 0x8BFF, true, false,  {}  }, // 87
2070  { "ICC_IAR1_EL1", 0xC660, true, false,  {}  }, // 88
2071  { "ICC_IAR0_EL1", 0xC640, true, false,  {}  }, // 89
2072  { "ICC_HPPIR1_EL1", 0xC662, true, false,  {}  }, // 90
2073  { "ICC_HPPIR0_EL1", 0xC642, true, false,  {}  }, // 91
2074  { "ICC_RPR_EL1", 0xC65B, true, false,  {}  }, // 92
2075  { "ICH_VTR_EL2", 0xE659, true, false,  {}  }, // 93
2076  { "ICH_EISR_EL2", 0xE65B, true, false,  {}  }, // 94
2077  { "ICH_ELRSR_EL2", 0xE65D, true, false,  {}  }, // 95
2078  { "ID_AA64ZFR0_EL1", 0xC024, true, false,  {AArch64::FeatureSVE}  }, // 96
2079  { "LORID_EL1", 0xC527, true, false,  {AArch64::HasV8_1aOps}  }, // 97
2080  { "ERRIDR_EL1", 0xC298, true, false,  {AArch64::FeatureRAS}  }, // 98
2081  { "ERXFR_EL1", 0xC2A0, true, false,  {AArch64::FeatureRAS}  }, // 99
2082  { "DBGDTRTX_EL0", 0x9828, false, true,  {}  }, // 100
2083  { "OSLAR_EL1", 0x8084, false, true,  {}  }, // 101
2084  { "PMSWINC_EL0", 0xDCE4, false, true,  {}  }, // 102
2085  { "TRCOSLAR", 0x8884, false, true,  {}  }, // 103
2086  { "TRCLAR", 0x8BE6, false, true,  {}  }, // 104
2087  { "ICC_EOIR1_EL1", 0xC661, false, true,  {}  }, // 105
2088  { "ICC_EOIR0_EL1", 0xC641, false, true,  {}  }, // 106
2089  { "ICC_DIR_EL1", 0xC659, false, true,  {}  }, // 107
2090  { "ICC_SGI1R_EL1", 0xC65D, false, true,  {}  }, // 108
2091  { "ICC_ASGI1R_EL1", 0xC65E, false, true,  {}  }, // 109
2092  { "ICC_SGI0R_EL1", 0xC65F, false, true,  {}  }, // 110
2093  { "OSDTRRX_EL1", 0x8002, true, true,  {}  }, // 111
2094  { "OSDTRTX_EL1", 0x801A, true, true,  {}  }, // 112
2095  { "TEECR32_EL1", 0x9000, true, true,  {}  }, // 113
2096  { "MDCCINT_EL1", 0x8010, true, true,  {}  }, // 114
2097  { "MDSCR_EL1", 0x8012, true, true,  {}  }, // 115
2098  { "DBGDTR_EL0", 0x9820, true, true,  {}  }, // 116
2099  { "OSECCR_EL1", 0x8032, true, true,  {}  }, // 117
2100  { "DBGVCR32_EL2", 0xA038, true, true,  {}  }, // 118
2101  { "DBGBVR0_EL1", 0x8004, true, true,  {}  }, // 119
2102  { "DBGBVR1_EL1", 0x800C, true, true,  {}  }, // 120
2103  { "DBGBVR2_EL1", 0x8014, true, true,  {}  }, // 121
2104  { "DBGBVR3_EL1", 0x801C, true, true,  {}  }, // 122
2105  { "DBGBVR4_EL1", 0x8024, true, true,  {}  }, // 123
2106  { "DBGBVR5_EL1", 0x802C, true, true,  {}  }, // 124
2107  { "DBGBVR6_EL1", 0x8034, true, true,  {}  }, // 125
2108  { "DBGBVR7_EL1", 0x803C, true, true,  {}  }, // 126
2109  { "DBGBVR8_EL1", 0x8044, true, true,  {}  }, // 127
2110  { "DBGBVR9_EL1", 0x804C, true, true,  {}  }, // 128
2111  { "DBGBVR10_EL1", 0x8054, true, true,  {}  }, // 129
2112  { "DBGBVR11_EL1", 0x805C, true, true,  {}  }, // 130
2113  { "DBGBVR12_EL1", 0x8064, true, true,  {}  }, // 131
2114  { "DBGBVR13_EL1", 0x806C, true, true,  {}  }, // 132
2115  { "DBGBVR14_EL1", 0x8074, true, true,  {}  }, // 133
2116  { "DBGBVR15_EL1", 0x807C, true, true,  {}  }, // 134
2117  { "DBGBCR0_EL1", 0x8005, true, true,  {}  }, // 135
2118  { "DBGBCR1_EL1", 0x800D, true, true,  {}  }, // 136
2119  { "DBGBCR2_EL1", 0x8015, true, true,  {}  }, // 137
2120  { "DBGBCR3_EL1", 0x801D, true, true,  {}  }, // 138
2121  { "DBGBCR4_EL1", 0x8025, true, true,  {}  }, // 139
2122  { "DBGBCR5_EL1", 0x802D, true, true,  {}  }, // 140
2123  { "DBGBCR6_EL1", 0x8035, true, true,  {}  }, // 141
2124  { "DBGBCR7_EL1", 0x803D, true, true,  {}  }, // 142
2125  { "DBGBCR8_EL1", 0x8045, true, true,  {}  }, // 143
2126  { "DBGBCR9_EL1", 0x804D, true, true,  {}  }, // 144
2127  { "DBGBCR10_EL1", 0x8055, true, true,  {}  }, // 145
2128  { "DBGBCR11_EL1", 0x805D, true, true,  {}  }, // 146
2129  { "DBGBCR12_EL1", 0x8065, true, true,  {}  }, // 147
2130  { "DBGBCR13_EL1", 0x806D, true, true,  {}  }, // 148
2131  { "DBGBCR14_EL1", 0x8075, true, true,  {}  }, // 149
2132  { "DBGBCR15_EL1", 0x807D, true, true,  {}  }, // 150
2133  { "DBGWVR0_EL1", 0x8006, true, true,  {}  }, // 151
2134  { "DBGWVR1_EL1", 0x800E, true, true,  {}  }, // 152
2135  { "DBGWVR2_EL1", 0x8016, true, true,  {}  }, // 153
2136  { "DBGWVR3_EL1", 0x801E, true, true,  {}  }, // 154
2137  { "DBGWVR4_EL1", 0x8026, true, true,  {}  }, // 155
2138  { "DBGWVR5_EL1", 0x802E, true, true,  {}  }, // 156
2139  { "DBGWVR6_EL1", 0x8036, true, true,  {}  }, // 157
2140  { "DBGWVR7_EL1", 0x803E, true, true,  {}  }, // 158
2141  { "DBGWVR8_EL1", 0x8046, true, true,  {}  }, // 159
2142  { "DBGWVR9_EL1", 0x804E, true, true,  {}  }, // 160
2143  { "DBGWVR10_EL1", 0x8056, true, true,  {}  }, // 161
2144  { "DBGWVR11_EL1", 0x805E, true, true,  {}  }, // 162
2145  { "DBGWVR12_EL1", 0x8066, true, true,  {}  }, // 163
2146  { "DBGWVR13_EL1", 0x806E, true, true,  {}  }, // 164
2147  { "DBGWVR14_EL1", 0x8076, true, true,  {}  }, // 165
2148  { "DBGWVR15_EL1", 0x807E, true, true,  {}  }, // 166
2149  { "DBGWCR0_EL1", 0x8007, true, true,  {}  }, // 167
2150  { "DBGWCR1_EL1", 0x800F, true, true,  {}  }, // 168
2151  { "DBGWCR2_EL1", 0x8017, true, true,  {}  }, // 169
2152  { "DBGWCR3_EL1", 0x801F, true, true,  {}  }, // 170
2153  { "DBGWCR4_EL1", 0x8027, true, true,  {}  }, // 171
2154  { "DBGWCR5_EL1", 0x802F, true, true,  {}  }, // 172
2155  { "DBGWCR6_EL1", 0x8037, true, true,  {}  }, // 173
2156  { "DBGWCR7_EL1", 0x803F, true, true,  {}  }, // 174
2157  { "DBGWCR8_EL1", 0x8047, true, true,  {}  }, // 175
2158  { "DBGWCR9_EL1", 0x804F, true, true,  {}  }, // 176
2159  { "DBGWCR10_EL1", 0x8057, true, true,  {}  }, // 177
2160  { "DBGWCR11_EL1", 0x805F, true, true,  {}  }, // 178
2161  { "DBGWCR12_EL1", 0x8067, true, true,  {}  }, // 179
2162  { "DBGWCR13_EL1", 0x806F, true, true,  {}  }, // 180
2163  { "DBGWCR14_EL1", 0x8077, true, true,  {}  }, // 181
2164  { "DBGWCR15_EL1", 0x807F, true, true,  {}  }, // 182
2165  { "TEEHBR32_EL1", 0x9080, true, true,  {}  }, // 183
2166  { "OSDLR_EL1", 0x809C, true, true,  {}  }, // 184
2167  { "DBGPRCR_EL1", 0x80A4, true, true,  {}  }, // 185
2168  { "DBGCLAIMSET_EL1", 0x83C6, true, true,  {}  }, // 186
2169  { "DBGCLAIMCLR_EL1", 0x83CE, true, true,  {}  }, // 187
2170  { "CSSELR_EL1", 0xD000, true, true,  {}  }, // 188
2171  { "VPIDR_EL2", 0xE000, true, true,  {}  }, // 189
2172  { "VMPIDR_EL2", 0xE005, true, true,  {}  }, // 190
2173  { "CPACR_EL1", 0xC082, true, true,  {}  }, // 191
2174  { "SCTLR_EL1", 0xC080, true, true,  {}  }, // 192
2175  { "SCTLR_EL2", 0xE080, true, true,  {}  }, // 193
2176  { "SCTLR_EL3", 0xF080, true, true,  {}  }, // 194
2177  { "ACTLR_EL1", 0xC081, true, true,  {}  }, // 195
2178  { "ACTLR_EL2", 0xE081, true, true,  {}  }, // 196
2179  { "ACTLR_EL3", 0xF081, true, true,  {}  }, // 197
2180  { "HCR_EL2", 0xE088, true, true,  {}  }, // 198
2181  { "SCR_EL3", 0xF088, true, true,  {}  }, // 199
2182  { "MDCR_EL2", 0xE089, true, true,  {}  }, // 200
2183  { "SDER32_EL3", 0xF089, true, true,  {}  }, // 201
2184  { "CPTR_EL2", 0xE08A, true, true,  {}  }, // 202
2185  { "CPTR_EL3", 0xF08A, true, true,  {}  }, // 203
2186  { "HSTR_EL2", 0xE08B, true, true,  {}  }, // 204
2187  { "HACR_EL2", 0xE08F, true, true,  {}  }, // 205
2188  { "MDCR_EL3", 0xF099, true, true,  {}  }, // 206
2189  { "TTBR0_EL1", 0xC100, true, true,  {}  }, // 207
2190  { "TTBR0_EL2", 0xE100, true, true,  {}  }, // 208
2191  { "TTBR0_EL3", 0xF100, true, true,  {}  }, // 209
2192  { "TTBR1_EL1", 0xC101, true, true,  {}  }, // 210
2193  { "TCR_EL1", 0xC102, true, true,  {}  }, // 211
2194  { "TCR_EL2", 0xE102, true, true,  {}  }, // 212
2195  { "TCR_EL3", 0xF102, true, true,  {}  }, // 213
2196  { "VTTBR_EL2", 0xE108, true, true,  {}  }, // 214
2197  { "VTCR_EL2", 0xE10A, true, true,  {}  }, // 215
2198  { "DACR32_EL2", 0xE180, true, true,  {}  }, // 216
2199  { "SPSR_EL1", 0xC200, true, true,  {}  }, // 217
2200  { "SPSR_EL2", 0xE200, true, true,  {}  }, // 218
2201  { "SPSR_EL3", 0xF200, true, true,  {}  }, // 219
2202  { "ELR_EL1", 0xC201, true, true,  {}  }, // 220
2203  { "ELR_EL2", 0xE201, true, true,  {}  }, // 221
2204  { "ELR_EL3", 0xF201, true, true,  {}  }, // 222
2205  { "SP_EL0", 0xC208, true, true,  {}  }, // 223
2206  { "SP_EL1", 0xE208, true, true,  {}  }, // 224
2207  { "SP_EL2", 0xF208, true, true,  {}  }, // 225
2208  { "SPSel", 0xC210, true, true,  {}  }, // 226
2209  { "NZCV", 0xDA10, true, true,  {}  }, // 227
2210  { "DAIF", 0xDA11, true, true,  {}  }, // 228
2211  { "CurrentEL", 0xC212, true, true,  {}  }, // 229
2212  { "SPSR_irq", 0xE218, true, true,  {}  }, // 230
2213  { "SPSR_abt", 0xE219, true, true,  {}  }, // 231
2214  { "SPSR_und", 0xE21A, true, true,  {}  }, // 232
2215  { "SPSR_fiq", 0xE21B, true, true,  {}  }, // 233
2216  { "FPCR", 0xDA20, true, true,  {}  }, // 234
2217  { "FPSR", 0xDA21, true, true,  {}  }, // 235
2218  { "DSPSR_EL0", 0xDA28, true, true,  {}  }, // 236
2219  { "DLR_EL0", 0xDA29, true, true,  {}  }, // 237
2220  { "IFSR32_EL2", 0xE281, true, true,  {}  }, // 238
2221  { "AFSR0_EL1", 0xC288, true, true,  {}  }, // 239
2222  { "AFSR0_EL2", 0xE288, true, true,  {}  }, // 240
2223  { "AFSR0_EL3", 0xF288, true, true,  {}  }, // 241
2224  { "AFSR1_EL1", 0xC289, true, true,  {}  }, // 242
2225  { "AFSR1_EL2", 0xE289, true, true,  {}  }, // 243
2226  { "AFSR1_EL3", 0xF289, true, true,  {}  }, // 244
2227  { "ESR_EL1", 0xC290, true, true,  {}  }, // 245
2228  { "ESR_EL2", 0xE290, true, true,  {}  }, // 246
2229  { "ESR_EL3", 0xF290, true, true,  {}  }, // 247
2230  { "FPEXC32_EL2", 0xE298, true, true,  {}  }, // 248
2231  { "FAR_EL1", 0xC300, true, true,  {}  }, // 249
2232  { "FAR_EL2", 0xE300, true, true,  {}  }, // 250
2233  { "FAR_EL3", 0xF300, true, true,  {}  }, // 251
2234  { "HPFAR_EL2", 0xE304, true, true,  {}  }, // 252
2235  { "PAR_EL1", 0xC3A0, true, true,  {}  }, // 253
2236  { "PMCR_EL0", 0xDCE0, true, true,  {}  }, // 254
2237  { "PMCNTENSET_EL0", 0xDCE1, true, true,  {}  }, // 255
2238  { "PMCNTENCLR_EL0", 0xDCE2, true, true,  {}  }, // 256
2239  { "PMOVSCLR_EL0", 0xDCE3, true, true,  {}  }, // 257
2240  { "PMSELR_EL0", 0xDCE5, true, true,  {}  }, // 258
2241  { "PMCCNTR_EL0", 0xDCE8, true, true,  {}  }, // 259
2242  { "PMXEVTYPER_EL0", 0xDCE9, true, true,  {}  }, // 260
2243  { "PMXEVCNTR_EL0", 0xDCEA, true, true,  {}  }, // 261
2244  { "PMUSERENR_EL0", 0xDCF0, true, true,  {}  }, // 262
2245  { "PMINTENSET_EL1", 0xC4F1, true, true,  {}  }, // 263
2246  { "PMINTENCLR_EL1", 0xC4F2, true, true,  {}  }, // 264
2247  { "PMOVSSET_EL0", 0xDCF3, true, true,  {}  }, // 265
2248  { "MAIR_EL1", 0xC510, true, true,  {}  }, // 266
2249  { "MAIR_EL2", 0xE510, true, true,  {}  }, // 267
2250  { "MAIR_EL3", 0xF510, true, true,  {}  }, // 268
2251  { "AMAIR_EL1", 0xC518, true, true,  {}  }, // 269
2252  { "AMAIR_EL2", 0xE518, true, true,  {}  }, // 270
2253  { "AMAIR_EL3", 0xF518, true, true,  {}  }, // 271
2254  { "VBAR_EL1", 0xC600, true, true,  {}  }, // 272
2255  { "VBAR_EL2", 0xE600, true, true,  {}  }, // 273
2256  { "VBAR_EL3", 0xF600, true, true,  {}  }, // 274
2257  { "RMR_EL1", 0xC602, true, true,  {}  }, // 275
2258  { "RMR_EL2", 0xE602, true, true,  {}  }, // 276
2259  { "RMR_EL3", 0xF602, true, true,  {}  }, // 277
2260  { "CONTEXTIDR_EL1", 0xC681, true, true,  {}  }, // 278
2261  { "TPIDR_EL0", 0xDE82, true, true,  {}  }, // 279
2262  { "TPIDR_EL2", 0xE682, true, true,  {}  }, // 280
2263  { "TPIDR_EL3", 0xF682, true, true,  {}  }, // 281
2264  { "TPIDRRO_EL0", 0xDE83, true, true,  {}  }, // 282
2265  { "TPIDR_EL1", 0xC684, true, true,  {}  }, // 283
2266  { "CNTFRQ_EL0", 0xDF00, true, true,  {}  }, // 284
2267  { "CNTVOFF_EL2", 0xE703, true, true,  {}  }, // 285
2268  { "CNTKCTL_EL1", 0xC708, true, true,  {}  }, // 286
2269  { "CNTHCTL_EL2", 0xE708, true, true,  {}  }, // 287
2270  { "CNTP_TVAL_EL0", 0xDF10, true, true,  {}  }, // 288
2271  { "CNTHP_TVAL_EL2", 0xE710, true, true,  {}  }, // 289
2272  { "CNTPS_TVAL_EL1", 0xFF10, true, true,  {}  }, // 290
2273  { "CNTP_CTL_EL0", 0xDF11, true, true,  {}  }, // 291
2274  { "CNTHP_CTL_EL2", 0xE711, true, true,  {}  }, // 292
2275  { "CNTPS_CTL_EL1", 0xFF11, true, true,  {}  }, // 293
2276  { "CNTP_CVAL_EL0", 0xDF12, true, true,  {}  }, // 294
2277  { "CNTHP_CVAL_EL2", 0xE712, true, true,  {}  }, // 295
2278  { "CNTPS_CVAL_EL1", 0xFF12, true, true,  {}  }, // 296
2279  { "CNTV_TVAL_EL0", 0xDF18, true, true,  {}  }, // 297
2280  { "CNTV_CTL_EL0", 0xDF19, true, true,  {}  }, // 298
2281  { "CNTV_CVAL_EL0", 0xDF1A, true, true,  {}  }, // 299
2282  { "PMEVCNTR0_EL0", 0xDF40, true, true,  {}  }, // 300
2283  { "PMEVCNTR1_EL0", 0xDF41, true, true,  {}  }, // 301
2284  { "PMEVCNTR2_EL0", 0xDF42, true, true,  {}  }, // 302
2285  { "PMEVCNTR3_EL0", 0xDF43, true, true,  {}  }, // 303
2286  { "PMEVCNTR4_EL0", 0xDF44, true, true,  {}  }, // 304
2287  { "PMEVCNTR5_EL0", 0xDF45, true, true,  {}  }, // 305
2288  { "PMEVCNTR6_EL0", 0xDF46, true, true,  {}  }, // 306
2289  { "PMEVCNTR7_EL0", 0xDF47, true, true,  {}  }, // 307
2290  { "PMEVCNTR8_EL0", 0xDF48, true, true,  {}  }, // 308
2291  { "PMEVCNTR9_EL0", 0xDF49, true, true,  {}  }, // 309
2292  { "PMEVCNTR10_EL0", 0xDF4A, true, true,  {}  }, // 310
2293  { "PMEVCNTR11_EL0", 0xDF4B, true, true,  {}  }, // 311
2294  { "PMEVCNTR12_EL0", 0xDF4C, true, true,  {}  }, // 312
2295  { "PMEVCNTR13_EL0", 0xDF4D, true, true,  {}  }, // 313
2296  { "PMEVCNTR14_EL0", 0xDF4E, true, true,  {}  }, // 314
2297  { "PMEVCNTR15_EL0", 0xDF4F, true, true,  {}  }, // 315
2298  { "PMEVCNTR16_EL0", 0xDF50, true, true,  {}  }, // 316
2299  { "PMEVCNTR17_EL0", 0xDF51, true, true,  {}  }, // 317
2300  { "PMEVCNTR18_EL0", 0xDF52, true, true,  {}  }, // 318
2301  { "PMEVCNTR19_EL0", 0xDF53, true, true,  {}  }, // 319
2302  { "PMEVCNTR20_EL0", 0xDF54, true, true,  {}  }, // 320
2303  { "PMEVCNTR21_EL0", 0xDF55, true, true,  {}  }, // 321
2304  { "PMEVCNTR22_EL0", 0xDF56, true, true,  {}  }, // 322
2305  { "PMEVCNTR23_EL0", 0xDF57, true, true,  {}  }, // 323
2306  { "PMEVCNTR24_EL0", 0xDF58, true, true,  {}  }, // 324
2307  { "PMEVCNTR25_EL0", 0xDF59, true, true,  {}  }, // 325
2308  { "PMEVCNTR26_EL0", 0xDF5A, true, true,  {}  }, // 326
2309  { "PMEVCNTR27_EL0", 0xDF5B, true, true,  {}  }, // 327
2310  { "PMEVCNTR28_EL0", 0xDF5C, true, true,  {}  }, // 328
2311  { "PMEVCNTR29_EL0", 0xDF5D, true, true,  {}  }, // 329
2312  { "PMEVCNTR30_EL0", 0xDF5E, true, true,  {}  }, // 330
2313  { "PMCCFILTR_EL0", 0xDF7F, true, true,  {}  }, // 331
2314  { "PMEVTYPER0_EL0", 0xDF60, true, true,  {}  }, // 332
2315  { "PMEVTYPER1_EL0", 0xDF61, true, true,  {}  }, // 333
2316  { "PMEVTYPER2_EL0", 0xDF62, true, true,  {}  }, // 334
2317  { "PMEVTYPER3_EL0", 0xDF63, true, true,  {}  }, // 335
2318  { "PMEVTYPER4_EL0", 0xDF64, true, true,  {}  }, // 336
2319  { "PMEVTYPER5_EL0", 0xDF65, true, true,  {}  }, // 337
2320  { "PMEVTYPER6_EL0", 0xDF66, true, true,  {}  }, // 338
2321  { "PMEVTYPER7_EL0", 0xDF67, true, true,  {}  }, // 339
2322  { "PMEVTYPER8_EL0", 0xDF68, true, true,  {}  }, // 340
2323  { "PMEVTYPER9_EL0", 0xDF69, true, true,  {}  }, // 341
2324  { "PMEVTYPER10_EL0", 0xDF6A, true, true,  {}  }, // 342
2325  { "PMEVTYPER11_EL0", 0xDF6B, true, true,  {}  }, // 343
2326  { "PMEVTYPER12_EL0", 0xDF6C, true, true,  {}  }, // 344
2327  { "PMEVTYPER13_EL0", 0xDF6D, true, true,  {}  }, // 345
2328  { "PMEVTYPER14_EL0", 0xDF6E, true, true,  {}  }, // 346
2329  { "PMEVTYPER15_EL0", 0xDF6F, true, true,  {}  }, // 347
2330  { "PMEVTYPER16_EL0", 0xDF70, true, true,  {}  }, // 348
2331  { "PMEVTYPER17_EL0", 0xDF71, true, true,  {}  }, // 349
2332  { "PMEVTYPER18_EL0", 0xDF72, true, true,  {}  }, // 350
2333  { "PMEVTYPER19_EL0", 0xDF73, true, true,  {}  }, // 351
2334  { "PMEVTYPER20_EL0", 0xDF74, true, true,  {}  }, // 352
2335  { "PMEVTYPER21_EL0", 0xDF75, true, true,  {}  }, // 353
2336  { "PMEVTYPER22_EL0", 0xDF76, true, true,  {}  }, // 354
2337  { "PMEVTYPER23_EL0", 0xDF77, true, true,  {}  }, // 355
2338  { "PMEVTYPER24_EL0", 0xDF78, true, true,  {}  }, // 356
2339  { "PMEVTYPER25_EL0", 0xDF79, true, true,  {}  }, // 357
2340  { "PMEVTYPER26_EL0", 0xDF7A, true, true,  {}  }, // 358
2341  { "PMEVTYPER27_EL0", 0xDF7B, true, true,  {}  }, // 359
2342  { "PMEVTYPER28_EL0", 0xDF7C, true, true,  {}  }, // 360
2343  { "PMEVTYPER29_EL0", 0xDF7D, true, true,  {}  }, // 361
2344  { "PMEVTYPER30_EL0", 0xDF7E, true, true,  {}  }, // 362
2345  { "TRCPRGCTLR", 0x8808, true, true,  {}  }, // 363
2346  { "TRCPROCSELR", 0x8810, true, true,  {}  }, // 364
2347  { "TRCCONFIGR", 0x8820, true, true,  {}  }, // 365
2348  { "TRCAUXCTLR", 0x8830, true, true,  {}  }, // 366
2349  { "TRCEVENTCTL0R", 0x8840, true, true,  {}  }, // 367
2350  { "TRCEVENTCTL1R", 0x8848, true, true,  {}  }, // 368
2351  { "TRCSTALLCTLR", 0x8858, true, true,  {}  }, // 369
2352  { "TRCTSCTLR", 0x8860, true, true,  {}  }, // 370
2353  { "TRCSYNCPR", 0x8868, true, true,  {}  }, // 371
2354  { "TRCCCCTLR", 0x8870, true, true,  {}  }, // 372
2355  { "TRCBBCTLR", 0x8878, true, true,  {}  }, // 373
2356  { "TRCTRACEIDR", 0x8801, true, true,  {}  }, // 374
2357  { "TRCQCTLR", 0x8809, true, true,  {}  }, // 375
2358  { "TRCVICTLR", 0x8802, true, true,  {}  }, // 376
2359  { "TRCVIIECTLR", 0x880A, true, true,  {}  }, // 377
2360  { "TRCVISSCTLR", 0x8812, true, true,  {}  }, // 378
2361  { "TRCVIPCSSCTLR", 0x881A, true, true,  {}  }, // 379
2362  { "TRCVDCTLR", 0x8842, true, true,  {}  }, // 380
2363  { "TRCVDSACCTLR", 0x884A, true, true,  {}  }, // 381
2364  { "TRCVDARCCTLR", 0x8852, true, true,  {}  }, // 382
2365  { "TRCSEQEVR0", 0x8804, true, true,  {}  }, // 383
2366  { "TRCSEQEVR1", 0x880C, true, true,  {}  }, // 384
2367  { "TRCSEQEVR2", 0x8814, true, true,  {}  }, // 385
2368  { "TRCSEQRSTEVR", 0x8834, true, true,  {}  }, // 386
2369  { "TRCSEQSTR", 0x883C, true, true,  {}  }, // 387
2370  { "TRCEXTINSELR", 0x8844, true, true,  {}  }, // 388
2371  { "TRCCNTRLDVR0", 0x8805, true, true,  {}  }, // 389
2372  { "TRCCNTRLDVR1", 0x880D, true, true,  {}  }, // 390
2373  { "TRCCNTRLDVR2", 0x8815, true, true,  {}  }, // 391
2374  { "TRCCNTRLDVR3", 0x881D, true, true,  {}  }, // 392
2375  { "TRCCNTCTLR0", 0x8825, true, true,  {}  }, // 393
2376  { "TRCCNTCTLR1", 0x882D, true, true,  {}  }, // 394
2377  { "TRCCNTCTLR2", 0x8835, true, true,  {}  }, // 395
2378  { "TRCCNTCTLR3", 0x883D, true, true,  {}  }, // 396
2379  { "TRCCNTVR0", 0x8845, true, true,  {}  }, // 397
2380  { "TRCCNTVR1", 0x884D, true, true,  {}  }, // 398
2381  { "TRCCNTVR2", 0x8855, true, true,  {}  }, // 399
2382  { "TRCCNTVR3", 0x885D, true, true,  {}  }, // 400
2383  { "TRCIMSPEC0", 0x8807, true, true,  {}  }, // 401
2384  { "TRCIMSPEC1", 0x880F, true, true,  {}  }, // 402
2385  { "TRCIMSPEC2", 0x8817, true, true,  {}  }, // 403
2386  { "TRCIMSPEC3", 0x881F, true, true,  {}  }, // 404
2387  { "TRCIMSPEC4", 0x8827, true, true,  {}  }, // 405
2388  { "TRCIMSPEC5", 0x882F, true, true,  {}  }, // 406
2389  { "TRCIMSPEC6", 0x8837, true, true,  {}  }, // 407
2390  { "TRCIMSPEC7", 0x883F, true, true,  {}  }, // 408
2391  { "TRCRSCTLR2", 0x8890, true, true,  {}  }, // 409
2392  { "TRCRSCTLR3", 0x8898, true, true,  {}  }, // 410
2393  { "TRCRSCTLR4", 0x88A0, true, true,  {}  }, // 411
2394  { "TRCRSCTLR5", 0x88A8, true, true,  {}  }, // 412
2395  { "TRCRSCTLR6", 0x88B0, true, true,  {}  }, // 413
2396  { "TRCRSCTLR7", 0x88B8, true, true,  {}  }, // 414
2397  { "TRCRSCTLR8", 0x88C0, true, true,  {}  }, // 415
2398  { "TRCRSCTLR9", 0x88C8, true, true,  {}  }, // 416
2399  { "TRCRSCTLR10", 0x88D0, true, true,  {}  }, // 417
2400  { "TRCRSCTLR11", 0x88D8, true, true,  {}  }, // 418
2401  { "TRCRSCTLR12", 0x88E0, true, true,  {}  }, // 419
2402  { "TRCRSCTLR13", 0x88E8, true, true,  {}  }, // 420
2403  { "TRCRSCTLR14", 0x88F0, true, true,  {}  }, // 421
2404  { "TRCRSCTLR15", 0x88F8, true, true,  {}  }, // 422
2405  { "TRCRSCTLR16", 0x8881, true, true,  {}  }, // 423
2406  { "TRCRSCTLR17", 0x8889, true, true,  {}  }, // 424
2407  { "TRCRSCTLR18", 0x8891, true, true,  {}  }, // 425
2408  { "TRCRSCTLR19", 0x8899, true, true,  {}  }, // 426
2409  { "TRCRSCTLR20", 0x88A1, true, true,  {}  }, // 427
2410  { "TRCRSCTLR21", 0x88A9, true, true,  {}  }, // 428
2411  { "TRCRSCTLR22", 0x88B1, true, true,  {}  }, // 429
2412  { "TRCRSCTLR23", 0x88B9, true, true,  {}  }, // 430
2413  { "TRCRSCTLR24", 0x88C1, true, true,  {}  }, // 431
2414  { "TRCRSCTLR25", 0x88C9, true, true,  {}  }, // 432
2415  { "TRCRSCTLR26", 0x88D1, true, true,  {}  }, // 433
2416  { "TRCRSCTLR27", 0x88D9, true, true,  {}  }, // 434
2417  { "TRCRSCTLR28", 0x88E1, true, true,  {}  }, // 435
2418  { "TRCRSCTLR29", 0x88E9, true, true,  {}  }, // 436
2419  { "TRCRSCTLR30", 0x88F1, true, true,  {}  }, // 437
2420  { "TRCRSCTLR31", 0x88F9, true, true,  {}  }, // 438
2421  { "TRCSSCCR0", 0x8882, true, true,  {}  }, // 439
2422  { "TRCSSCCR1", 0x888A, true, true,  {}  }, // 440
2423  { "TRCSSCCR2", 0x8892, true, true,  {}  }, // 441
2424  { "TRCSSCCR3", 0x889A, true, true,  {}  }, // 442
2425  { "TRCSSCCR4", 0x88A2, true, true,  {}  }, // 443
2426  { "TRCSSCCR5", 0x88AA, true, true,  {}  }, // 444
2427  { "TRCSSCCR6", 0x88B2, true, true,  {}  }, // 445
2428  { "TRCSSCCR7", 0x88BA, true, true,  {}  }, // 446
2429  { "TRCSSCSR0", 0x88C2, true, true,  {}  }, // 447
2430  { "TRCSSCSR1", 0x88CA, true, true,  {}  }, // 448
2431  { "TRCSSCSR2", 0x88D2, true, true,  {}  }, // 449
2432  { "TRCSSCSR3", 0x88DA, true, true,  {}  }, // 450
2433  { "TRCSSCSR4", 0x88E2, true, true,  {}  }, // 451
2434  { "TRCSSCSR5", 0x88EA, true, true,  {}  }, // 452
2435  { "TRCSSCSR6", 0x88F2, true, true,  {}  }, // 453
2436  { "TRCSSCSR7", 0x88FA, true, true,  {}  }, // 454
2437  { "TRCSSPCICR0", 0x8883, true, true,  {}  }, // 455
2438  { "TRCSSPCICR1", 0x888B, true, true,  {}  }, // 456
2439  { "TRCSSPCICR2", 0x8893, true, true,  {}  }, // 457
2440  { "TRCSSPCICR3", 0x889B, true, true,  {}  }, // 458
2441  { "TRCSSPCICR4", 0x88A3, true, true,  {}  }, // 459
2442  { "TRCSSPCICR5", 0x88AB, true, true,  {}  }, // 460
2443  { "TRCSSPCICR6", 0x88B3, true, true,  {}  }, // 461
2444  { "TRCSSPCICR7", 0x88BB, true, true,  {}  }, // 462
2445  { "TRCPDCR", 0x88A4, true, true,  {}  }, // 463
2446  { "TRCACVR0", 0x8900, true, true,  {}  }, // 464
2447  { "TRCACVR1", 0x8910, true, true,  {}  }, // 465
2448  { "TRCACVR2", 0x8920, true, true,  {}  }, // 466
2449  { "TRCACVR3", 0x8930, true, true,  {}  }, // 467
2450  { "TRCACVR4", 0x8940, true, true,  {}  }, // 468
2451  { "TRCACVR5", 0x8950, true, true,  {}  }, // 469
2452  { "TRCACVR6", 0x8960, true, true,  {}  }, // 470
2453  { "TRCACVR7", 0x8970, true, true,  {}  }, // 471
2454  { "TRCACVR8", 0x8901, true, true,  {}  }, // 472
2455  { "TRCACVR9", 0x8911, true, true,  {}  }, // 473
2456  { "TRCACVR10", 0x8921, true, true,  {}  }, // 474
2457  { "TRCACVR11", 0x8931, true, true,  {}  }, // 475
2458  { "TRCACVR12", 0x8941, true, true,  {}  }, // 476
2459  { "TRCACVR13", 0x8951, true, true,  {}  }, // 477
2460  { "TRCACVR14", 0x8961, true, true,  {}  }, // 478
2461  { "TRCACVR15", 0x8971, true, true,  {}  }, // 479
2462  { "TRCACATR0", 0x8902, true, true,  {}  }, // 480
2463  { "TRCACATR1", 0x8912, true, true,  {}  }, // 481
2464  { "TRCACATR2", 0x8922, true, true,  {}  }, // 482
2465  { "TRCACATR3", 0x8932, true, true,  {}  }, // 483
2466  { "TRCACATR4", 0x8942, true, true,  {}  }, // 484
2467  { "TRCACATR5", 0x8952, true, true,  {}  }, // 485
2468  { "TRCACATR6", 0x8962, true, true,  {}  }, // 486
2469  { "TRCACATR7", 0x8972, true, true,  {}  }, // 487
2470  { "TRCACATR8", 0x8903, true, true,  {}  }, // 488
2471  { "TRCACATR9", 0x8913, true, true,  {}  }, // 489
2472  { "TRCACATR10", 0x8923, true, true,  {}  }, // 490
2473  { "TRCACATR11", 0x8933, true, true,  {}  }, // 491
2474  { "TRCACATR12", 0x8943, true, true,  {}  }, // 492
2475  { "TRCACATR13", 0x8953, true, true,  {}  }, // 493
2476  { "TRCACATR14", 0x8963, true, true,  {}  }, // 494
2477  { "TRCACATR15", 0x8973, true, true,  {}  }, // 495
2478  { "TRCDVCVR0", 0x8904, true, true,  {}  }, // 496
2479  { "TRCDVCVR1", 0x8924, true, true,  {}  }, // 497
2480  { "TRCDVCVR2", 0x8944, true, true,  {}  }, // 498
2481  { "TRCDVCVR3", 0x8964, true, true,  {}  }, // 499
2482  { "TRCDVCVR4", 0x8905, true, true,  {}  }, // 500
2483  { "TRCDVCVR5", 0x8925, true, true,  {}  }, // 501
2484  { "TRCDVCVR6", 0x8945, true, true,  {}  }, // 502
2485  { "TRCDVCVR7", 0x8965, true, true,  {}  }, // 503
2486  { "TRCDVCMR0", 0x8906, true, true,  {}  }, // 504
2487  { "TRCDVCMR1", 0x8926, true, true,  {}  }, // 505
2488  { "TRCDVCMR2", 0x8946, true, true,  {}  }, // 506
2489  { "TRCDVCMR3", 0x8966, true, true,  {}  }, // 507
2490  { "TRCDVCMR4", 0x8907, true, true,  {}  }, // 508
2491  { "TRCDVCMR5", 0x8927, true, true,  {}  }, // 509
2492  { "TRCDVCMR6", 0x8947, true, true,  {}  }, // 510
2493  { "TRCDVCMR7", 0x8967, true, true,  {}  }, // 511
2494  { "TRCCIDCVR0", 0x8980, true, true,  {}  }, // 512
2495  { "TRCCIDCVR1", 0x8990, true, true,  {}  }, // 513
2496  { "TRCCIDCVR2", 0x89A0, true, true,  {}  }, // 514
2497  { "TRCCIDCVR3", 0x89B0, true, true,  {}  }, // 515
2498  { "TRCCIDCVR4", 0x89C0, true, true,  {}  }, // 516
2499  { "TRCCIDCVR5", 0x89D0, true, true,  {}  }, // 517
2500  { "TRCCIDCVR6", 0x89E0, true, true,  {}  }, // 518
2501  { "TRCCIDCVR7", 0x89F0, true, true,  {}  }, // 519
2502  { "TRCVMIDCVR0", 0x8981, true, true,  {}  }, // 520
2503  { "TRCVMIDCVR1", 0x8991, true, true,  {}  }, // 521
2504  { "TRCVMIDCVR2", 0x89A1, true, true,  {}  }, // 522
2505  { "TRCVMIDCVR3", 0x89B1, true, true,  {}  }, // 523
2506  { "TRCVMIDCVR4", 0x89C1, true, true,  {}  }, // 524
2507  { "TRCVMIDCVR5", 0x89D1, true, true,  {}  }, // 525
2508  { "TRCVMIDCVR6", 0x89E1, true, true,  {}  }, // 526
2509  { "TRCVMIDCVR7", 0x89F1, true, true,  {}  }, // 527
2510  { "TRCCIDCCTLR0", 0x8982, true, true,  {}  }, // 528
2511  { "TRCCIDCCTLR1", 0x898A, true, true,  {}  }, // 529
2512  { "TRCVMIDCCTLR0", 0x8992, true, true,  {}  }, // 530
2513  { "TRCVMIDCCTLR1", 0x899A, true, true,  {}  }, // 531
2514  { "TRCITCTRL", 0x8B84, true, true,  {}  }, // 532
2515  { "TRCCLAIMSET", 0x8BC6, true, true,  {}  }, // 533
2516  { "TRCCLAIMCLR", 0x8BCE, true, true,  {}  }, // 534
2517  { "ICC_BPR1_EL1", 0xC663, true, true,  {}  }, // 535
2518  { "ICC_BPR0_EL1", 0xC643, true, true,  {}  }, // 536
2519  { "ICC_PMR_EL1", 0xC230, true, true,  {}  }, // 537
2520  { "ICC_CTLR_EL1", 0xC664, true, true,  {}  }, // 538
2521  { "ICC_CTLR_EL3", 0xF664, true, true,  {}  }, // 539
2522  { "ICC_SRE_EL1", 0xC665, true, true,  {}  }, // 540
2523  { "ICC_SRE_EL2", 0xE64D, true, true,  {}  }, // 541
2524  { "ICC_SRE_EL3", 0xF665, true, true,  {}  }, // 542
2525  { "ICC_IGRPEN0_EL1", 0xC666, true, true,  {}  }, // 543
2526  { "ICC_IGRPEN1_EL1", 0xC667, true, true,  {}  }, // 544
2527  { "ICC_IGRPEN1_EL3", 0xF667, true, true,  {}  }, // 545
2528  { "ICC_SEIEN_EL1", 0xC668, true, true,  {}  }, // 546
2529  { "ICC_AP0R0_EL1", 0xC644, true, true,  {}  }, // 547
2530  { "ICC_AP0R1_EL1", 0xC645, true, true,  {}  }, // 548
2531  { "ICC_AP0R2_EL1", 0xC646, true, true,  {}  }, // 549
2532  { "ICC_AP0R3_EL1", 0xC647, true, true,  {}  }, // 550
2533  { "ICC_AP1R0_EL1", 0xC648, true, true,  {}  }, // 551
2534  { "ICC_AP1R1_EL1", 0xC649, true, true,  {}  }, // 552
2535  { "ICC_AP1R2_EL1", 0xC64A, true, true,  {}  }, // 553
2536  { "ICC_AP1R3_EL1", 0xC64B, true, true,  {}  }, // 554
2537  { "ICH_AP0R0_EL2", 0xE640, true, true,  {}  }, // 555
2538  { "ICH_AP0R1_EL2", 0xE641, true, true,  {}  }, // 556
2539  { "ICH_AP0R2_EL2", 0xE642, true, true,  {}  }, // 557
2540  { "ICH_AP0R3_EL2", 0xE643, true, true,  {}  }, // 558
2541  { "ICH_AP1R0_EL2", 0xE648, true, true,  {}  }, // 559
2542  { "ICH_AP1R1_EL2", 0xE649, true, true,  {}  }, // 560
2543  { "ICH_AP1R2_EL2", 0xE64A, true, true,  {}  }, // 561
2544  { "ICH_AP1R3_EL2", 0xE64B, true, true,  {}  }, // 562
2545  { "ICH_HCR_EL2", 0xE658, true, true,  {}  }, // 563
2546  { "ICH_MISR_EL2", 0xE65A, true, true,  {}  }, // 564
2547  { "ICH_VMCR_EL2", 0xE65F, true, true,  {}  }, // 565
2548  { "ICH_VSEIR_EL2", 0xE64C, true, true,  {}  }, // 566
2549  { "ICH_LR0_EL2", 0xE660, true, true,  {}  }, // 567
2550  { "ICH_LR1_EL2", 0xE661, true, true,  {}  }, // 568
2551  { "ICH_LR2_EL2", 0xE662, true, true,  {}  }, // 569
2552  { "ICH_LR3_EL2", 0xE663, true, true,  {}  }, // 570
2553  { "ICH_LR4_EL2", 0xE664, true, true,  {}  }, // 571
2554  { "ICH_LR5_EL2", 0xE665, true, true,  {}  }, // 572
2555  { "ICH_LR6_EL2", 0xE666, true, true,  {}  }, // 573
2556  { "ICH_LR7_EL2", 0xE667, true, true,  {}  }, // 574
2557  { "ICH_LR8_EL2", 0xE668, true, true,  {}  }, // 575
2558  { "ICH_LR9_EL2", 0xE669, true, true,  {}  }, // 576
2559  { "ICH_LR10_EL2", 0xE66A, true, true,  {}  }, // 577
2560  { "ICH_LR11_EL2", 0xE66B, true, true,  {}  }, // 578
2561  { "ICH_LR12_EL2", 0xE66C, true, true,  {}  }, // 579
2562  { "ICH_LR13_EL2", 0xE66D, true, true,  {}  }, // 580
2563  { "ICH_LR14_EL2", 0xE66E, true, true,  {}  }, // 581
2564  { "ICH_LR15_EL2", 0xE66F, true, true,  {}  }, // 582
2565  { "PAN", 0xC213, true, true,  {AArch64::HasV8_1aOps}  }, // 583
2566  { "LORSA_EL1", 0xC520, true, true,  {AArch64::HasV8_1aOps}  }, // 584
2567  { "LOREA_EL1", 0xC521, true, true,  {AArch64::HasV8_1aOps}  }, // 585
2568  { "LORN_EL1", 0xC522, true, true,  {AArch64::HasV8_1aOps}  }, // 586
2569  { "LORC_EL1", 0xC523, true, true,  {AArch64::HasV8_1aOps}  }, // 587
2570  { "TTBR1_EL2", 0xE101, true, true,  {AArch64::HasV8_1aOps}  }, // 588
2571  { "CONTEXTIDR_EL2", 0xE681, true, true,  {AArch64::HasV8_1aOps}  }, // 589
2572  { "CNTHV_TVAL_EL2", 0xE718, true, true,  {AArch64::HasV8_1aOps}  }, // 590
2573  { "CNTHV_CVAL_EL2", 0xE71A, true, true,  {AArch64::HasV8_1aOps}  }, // 591
2574  { "CNTHV_CTL_EL2", 0xE719, true, true,  {AArch64::HasV8_1aOps}  }, // 592
2575  { "SCTLR_EL12", 0xE880, true, true,  {AArch64::HasV8_1aOps}  }, // 593
2576  { "CPACR_EL12", 0xE882, true, true,  {AArch64::HasV8_1aOps}  }, // 594
2577  { "TTBR0_EL12", 0xE900, true, true,  {AArch64::HasV8_1aOps}  }, // 595
2578  { "TTBR1_EL12", 0xE901, true, true,  {AArch64::HasV8_1aOps}  }, // 596
2579  { "TCR_EL12", 0xE902, true, true,  {AArch64::HasV8_1aOps}  }, // 597
2580  { "AFSR0_EL12", 0xEA88, true, true,  {AArch64::HasV8_1aOps}  }, // 598
2581  { "AFSR1_EL12", 0xEA89, true, true,  {AArch64::HasV8_1aOps}  }, // 599
2582  { "ESR_EL12", 0xEA90, true, true,  {AArch64::HasV8_1aOps}  }, // 600
2583  { "FAR_EL12", 0xEB00, true, true,  {AArch64::HasV8_1aOps}  }, // 601
2584  { "MAIR_EL12", 0xED10, true, true,  {AArch64::HasV8_1aOps}  }, // 602
2585  { "AMAIR_EL12", 0xED18, true, true,  {AArch64::HasV8_1aOps}  }, // 603
2586  { "VBAR_EL12", 0xEE00, true, true,  {AArch64::HasV8_1aOps}  }, // 604
2587  { "CONTEXTIDR_EL12", 0xEE81, true, true,  {AArch64::HasV8_1aOps}  }, // 605
2588  { "CNTKCTL_EL12", 0xEF08, true, true,  {AArch64::HasV8_1aOps}  }, // 606
2589  { "CNTP_TVAL_EL02", 0xEF10, true, true,  {AArch64::HasV8_1aOps}  }, // 607
2590  { "CNTP_CTL_EL02", 0xEF11, true, true,  {AArch64::HasV8_1aOps}  }, // 608
2591  { "CNTP_CVAL_EL02", 0xEF12, true, true,  {AArch64::HasV8_1aOps}  }, // 609
2592  { "CNTV_TVAL_EL02", 0xEF18, true, true,  {AArch64::HasV8_1aOps}  }, // 610
2593  { "CNTV_CTL_EL02", 0xEF19, true, true,  {AArch64::HasV8_1aOps}  }, // 611
2594  { "CNTV_CVAL_EL02", 0xEF1A, true, true,  {AArch64::HasV8_1aOps}  }, // 612
2595  { "SPSR_EL12", 0xEA00, true, true,  {AArch64::HasV8_1aOps}  }, // 613
2596  { "ELR_EL12", 0xEA01, true, true,  {AArch64::HasV8_1aOps}  }, // 614
2597  { "UAO", 0xC214, true, true,  {AArch64::HasV8_2aOps}  }, // 615
2598  { "PMBLIMITR_EL1", 0xC4D0, true, true,  {AArch64::FeatureSPE}  }, // 616
2599  { "PMBPTR_EL1", 0xC4D1, true, true,  {AArch64::FeatureSPE}  }, // 617
2600  { "PMBSR_EL1", 0xC4D3, true, true,  {AArch64::FeatureSPE}  }, // 618
2601  { "PMBIDR_EL1", 0xC4D7, true, true,  {AArch64::FeatureSPE}  }, // 619
2602  { "PMSCR_EL2", 0xE4C8, true, true,  {AArch64::FeatureSPE}  }, // 620
2603  { "PMSCR_EL12", 0xECC8, true, true,  {AArch64::FeatureSPE}  }, // 621
2604  { "PMSCR_EL1", 0xC4C8, true, true,  {AArch64::FeatureSPE}  }, // 622
2605  { "PMSICR_EL1", 0xC4CA, true, true,  {AArch64::FeatureSPE}  }, // 623
2606  { "PMSIRR_EL1", 0xC4CB, true, true,  {AArch64::FeatureSPE}  }, // 624
2607  { "PMSFCR_EL1", 0xC4CC, true, true,  {AArch64::FeatureSPE}  }, // 625
2608  { "PMSEVFR_EL1", 0xC4CD, true, true,  {AArch64::FeatureSPE}  }, // 626
2609  { "PMSLATFR_EL1", 0xC4CE, true, true,  {AArch64::FeatureSPE}  }, // 627
2610  { "PMSIDR_EL1", 0xC4CF, true, true,  {AArch64::FeatureSPE}  }, // 628
2611  { "ERRSELR_EL1", 0xC299, true, true,  {AArch64::FeatureRAS}  }, // 629
2612  { "ERXCTLR_EL1", 0xC2A1, true, true,  {AArch64::FeatureRAS}  }, // 630
2613  { "ERXSTATUS_EL1", 0xC2A2, true, true,  {AArch64::FeatureRAS}  }, // 631
2614  { "ERXADDR_EL1", 0xC2A3, true, true,  {AArch64::FeatureRAS}  }, // 632
2615  { "ERXMISC0_EL1", 0xC2A8, true, true,  {AArch64::FeatureRAS}  }, // 633
2616  { "ERXMISC1_EL1", 0xC2A9, true, true,  {AArch64::FeatureRAS}  }, // 634
2617  { "DISR_EL1", 0xC609, true, true,  {AArch64::FeatureRAS}  }, // 635
2618  { "VDISR_EL2", 0xE609, true, true,  {AArch64::FeatureRAS}  }, // 636
2619  { "VSESR_EL2", 0xE293, true, true,  {AArch64::FeatureRAS}  }, // 637
2620  { "APIAKeyLo_EL1", 0xC108, true, true,  {AArch64::HasV8_3aOps}  }, // 638
2621  { "APIAKeyHi_EL1", 0xC109, true, true,  {AArch64::HasV8_3aOps}  }, // 639
2622  { "APIBKeyLo_EL1", 0xC10A, true, true,  {AArch64::HasV8_3aOps}  }, // 640
2623  { "APIBKeyHi_EL1", 0xC10B, true, true,  {AArch64::HasV8_3aOps}  }, // 641
2624  { "APDAKeyLo_EL1", 0xC110, true, true,  {AArch64::HasV8_3aOps}  }, // 642
2625  { "APDAKeyHi_EL1", 0xC111, true, true,  {AArch64::HasV8_3aOps}  }, // 643
2626  { "APDBKeyLo_EL1", 0xC112, true, true,  {AArch64::HasV8_3aOps}  }, // 644
2627  { "APDBKeyHi_EL1", 0xC113, true, true,  {AArch64::HasV8_3aOps}  }, // 645
2628  { "APGAKeyLo_EL1", 0xC118, true, true,  {AArch64::HasV8_3aOps}  }, // 646
2629  { "APGAKeyHi_EL1", 0xC119, true, true,  {AArch64::HasV8_3aOps}  }, // 647
2630  { "VSTCR_EL2", 0xE132, true, true,  {AArch64::HasV8_4aOps}  }, // 648
2631  { "VSTTBR_EL2", 0xE130, true, true,  {AArch64::HasV8_4aOps}  }, // 649
2632  { "CNTHVS_TVAL_EL2", 0xE720, true, true,  {AArch64::HasV8_4aOps}  }, // 650
2633  { "CNTHVS_CVAL_EL2", 0xE722, true, true,  {AArch64::HasV8_4aOps}  }, // 651
2634  { "CNTHVS_CTL_EL2", 0xE721, true, true,  {AArch64::HasV8_4aOps}  }, // 652
2635  { "CNTHPS_TVAL_EL2", 0xE728, true, true,  {AArch64::HasV8_4aOps}  }, // 653
2636  { "CNTHPS_CVAL_EL2", 0xE72A, true, true,  {AArch64::HasV8_4aOps}  }, // 654
2637  { "CNTHPS_CTL_EL2", 0xE729, true, true,  {AArch64::HasV8_4aOps}  }, // 655
2638  { "SDER32_EL2", 0xE099, true, true,  {AArch64::HasV8_4aOps}  }, // 656
2639  { "ERXPFGCTL_EL1", 0xC2A5, true, true,  {AArch64::HasV8_4aOps}  }, // 657
2640  { "ERXPFGCDN_EL1", 0xC2A6, true, true,  {AArch64::HasV8_4aOps}  }, // 658
2641  { "ERXTS_EL1", 0xC2AF, true, true,  {AArch64::HasV8_4aOps}  }, // 659
2642  { "ERXMISC2_EL1", 0xC2AA, true, true,  {AArch64::HasV8_4aOps}  }, // 660
2643  { "ERXMISC3_EL1", 0xC2AB, true, true,  {AArch64::HasV8_4aOps}  }, // 661
2644  { "ERXPFGF_EL1", 0xC2A4, true, false,  {AArch64::HasV8_4aOps}  }, // 662
2645  { "MPAM0_EL1", 0xC529, true, true,  {AArch64::HasV8_4aOps}  }, // 663
2646  { "MPAM1_EL1", 0xC528, true, true,  {AArch64::HasV8_4aOps}  }, // 664
2647  { "MPAM2_EL2", 0xE528, true, true,  {AArch64::HasV8_4aOps}  }, // 665
2648  { "MPAM3_EL3", 0xF528, true, true,  {AArch64::HasV8_4aOps}  }, // 666
2649  { "MPAM1_EL12", 0xED28, true, true,  {AArch64::HasV8_4aOps}  }, // 667
2650  { "MPAMHCR_EL2", 0xE520, true, true,  {AArch64::HasV8_4aOps}  }, // 668
2651  { "MPAMVPMV_EL2", 0xE521, true, true,  {AArch64::HasV8_4aOps}  }, // 669
2652  { "MPAMVPM0_EL2", 0xE530, true, true,  {AArch64::HasV8_4aOps}  }, // 670
2653  { "MPAMVPM1_EL2", 0xE531, true, true,  {AArch64::HasV8_4aOps}  }, // 671
2654  { "MPAMVPM2_EL2", 0xE532, true, true,  {AArch64::HasV8_4aOps}  }, // 672
2655  { "MPAMVPM3_EL2", 0xE533, true, true,  {AArch64::HasV8_4aOps}  }, // 673
2656  { "MPAMVPM4_EL2", 0xE534, true, true,  {AArch64::HasV8_4aOps}  }, // 674
2657  { "MPAMVPM5_EL2", 0xE535, true, true,  {AArch64::HasV8_4aOps}  }, // 675
2658  { "MPAMVPM6_EL2", 0xE536, true, true,  {AArch64::HasV8_4aOps}  }, // 676
2659  { "MPAMVPM7_EL2", 0xE537, true, true,  {AArch64::HasV8_4aOps}  }, // 677
2660  { "MPAMIDR_EL1", 0xC524, true, false,  {AArch64::HasV8_4aOps}  }, // 678
2661  { "AMCR_EL0", 0xDE90, true, true,  {AArch64::HasV8_4aOps}  }, // 679
2662  { "AMCFGR_EL0", 0xDE91, true, false,  {AArch64::HasV8_4aOps}  }, // 680
2663  { "AMCGCR_EL0", 0xDE92, true, false,  {AArch64::HasV8_4aOps}  }, // 681
2664  { "AMUSERENR_EL0", 0xDE93, true, true,  {AArch64::HasV8_4aOps}  }, // 682
2665  { "AMCNTENCLR0_EL0", 0xDE94, true, true,  {AArch64::HasV8_4aOps}  }, // 683
2666  { "AMCNTENSET0_EL0", 0xDE95, true, true,  {AArch64::HasV8_4aOps}  }, // 684
2667  { "AMEVCNTR00_EL0", 0xDEA0, true, true,  {AArch64::HasV8_4aOps}  }, // 685
2668  { "AMEVCNTR01_EL0", 0xDEA1, true, true,  {AArch64::HasV8_4aOps}  }, // 686
2669  { "AMEVCNTR02_EL0", 0xDEA2, true, true,  {AArch64::HasV8_4aOps}  }, // 687
2670  { "AMEVCNTR03_EL0", 0xDEA3, true, true,  {AArch64::HasV8_4aOps}  }, // 688
2671  { "AMEVTYPER00_EL0", 0xDEB0, true, false,  {AArch64::HasV8_4aOps}  }, // 689
2672  { "AMEVTYPER01_EL0", 0xDEB1, true, false,  {AArch64::HasV8_4aOps}  }, // 690
2673  { "AMEVTYPER02_EL0", 0xDEB2, true, false,  {AArch64::HasV8_4aOps}  }, // 691
2674  { "AMEVTYPER03_EL0", 0xDEB3, true, false,  {AArch64::HasV8_4aOps}  }, // 692
2675  { "AMCNTENCLR1_EL0", 0xDE98, true, true,  {AArch64::HasV8_4aOps}  }, // 693
2676  { "AMCNTENSET1_EL0", 0xDE99, true, true,  {AArch64::HasV8_4aOps}  }, // 694
2677  { "AMEVCNTR10_EL0", 0xDEE0, true, true,  {AArch64::HasV8_4aOps}  }, // 695
2678  { "AMEVCNTR11_EL0", 0xDEE1, true, true,  {AArch64::HasV8_4aOps}  }, // 696
2679  { "AMEVCNTR12_EL0", 0xDEE2, true, true,  {AArch64::HasV8_4aOps}  }, // 697
2680  { "AMEVCNTR13_EL0", 0xDEE3, true, true,  {AArch64::HasV8_4aOps}  }, // 698
2681  { "AMEVCNTR14_EL0", 0xDEE4, true, true,  {AArch64::HasV8_4aOps}  }, // 699
2682  { "AMEVCNTR15_EL0", 0xDEE5, true, true,  {AArch64::HasV8_4aOps}  }, // 700
2683  { "AMEVCNTR16_EL0", 0xDEE6, true, true,  {AArch64::HasV8_4aOps}  }, // 701
2684  { "AMEVCNTR17_EL0", 0xDEE7, true, true,  {AArch64::HasV8_4aOps}  }, // 702
2685  { "AMEVCNTR18_EL0", 0xDEE8, true, true,  {AArch64::HasV8_4aOps}  }, // 703
2686  { "AMEVCNTR19_EL0", 0xDEE9, true, true,  {AArch64::HasV8_4aOps}  }, // 704
2687  { "AMEVCNTR110_EL0", 0xDEEA, true, true,  {AArch64::HasV8_4aOps}  }, // 705
2688  { "AMEVCNTR111_EL0", 0xDEEB, true, true,  {AArch64::HasV8_4aOps}  }, // 706
2689  { "AMEVCNTR112_EL0", 0xDEEC, true, true,  {AArch64::HasV8_4aOps}  }, // 707
2690  { "AMEVCNTR113_EL0", 0xDEED, true, true,  {AArch64::HasV8_4aOps}  }, // 708
2691  { "AMEVCNTR114_EL0", 0xDEEE, true, true,  {AArch64::HasV8_4aOps}  }, // 709
2692  { "AMEVCNTR115_EL0", 0xDEEF, true, true,  {AArch64::HasV8_4aOps}  }, // 710
2693  { "AMEVTYPER10_EL0", 0xDEF0, true, true,  {AArch64::HasV8_4aOps}  }, // 711
2694  { "AMEVTYPER11_EL0", 0xDEF1, true, true,  {AArch64::HasV8_4aOps}  }, // 712
2695  { "AMEVTYPER12_EL0", 0xDEF2, true, true,  {AArch64::HasV8_4aOps}  }, // 713
2696  { "AMEVTYPER13_EL0", 0xDEF3, true, true,  {AArch64::HasV8_4aOps}  }, // 714
2697  { "AMEVTYPER14_EL0", 0xDEF4, true, true,  {AArch64::HasV8_4aOps}  }, // 715
2698  { "AMEVTYPER15_EL0", 0xDEF5, true, true,  {AArch64::HasV8_4aOps}  }, // 716
2699  { "AMEVTYPER16_EL0", 0xDEF6, true, true,  {AArch64::HasV8_4aOps}  }, // 717
2700  { "AMEVTYPER17_EL0", 0xDEF7, true, true,  {AArch64::HasV8_4aOps}  }, // 718
2701  { "AMEVTYPER18_EL0", 0xDEF8, true, true,  {AArch64::HasV8_4aOps}  }, // 719
2702  { "AMEVTYPER19_EL0", 0xDEF9, true, true,  {AArch64::HasV8_4aOps}  }, // 720
2703  { "AMEVTYPER110_EL0", 0xDEFA, true, true,  {AArch64::HasV8_4aOps}  }, // 721
2704  { "AMEVTYPER111_EL0", 0xDEFB, true, true,  {AArch64::HasV8_4aOps}  }, // 722
2705  { "AMEVTYPER112_EL0", 0xDEFC, true, true,  {AArch64::HasV8_4aOps}  }, // 723
2706  { "AMEVTYPER113_EL0", 0xDEFD, true, true,  {AArch64::HasV8_4aOps}  }, // 724
2707  { "AMEVTYPER114_EL0", 0xDEFE, true, true,  {AArch64::HasV8_4aOps}  }, // 725
2708  { "AMEVTYPER115_EL0", 0xDEFF, true, true,  {AArch64::HasV8_4aOps}  }, // 726
2709  { "TRFCR_EL1", 0xC091, true, true,  {AArch64::HasV8_4aOps}  }, // 727
2710  { "TRFCR_EL2", 0xE091, true, true,  {AArch64::HasV8_4aOps}  }, // 728
2711  { "TRFCR_EL12", 0xE891, true, true,  {AArch64::HasV8_4aOps}  }, // 729
2712  { "DIT", 0xDA15, true, true,  {AArch64::HasV8_4aOps}  }, // 730
2713  { "VNCR_EL2", 0xE110, true, true,  {AArch64::HasV8_4aOps}  }, // 731
2714  { "ZCR_EL1", 0xC090, true, true,  {AArch64::FeatureSVE}  }, // 732
2715  { "ZCR_EL2", 0xE090, true, true,  {AArch64::FeatureSVE}  }, // 733
2716  { "ZCR_EL3", 0xF090, true, true,  {AArch64::FeatureSVE}  }, // 734
2717  { "ZCR_EL12", 0xE890, true, true,  {AArch64::FeatureSVE}  }, // 735
2718  { "CPM_IOACC_CTL_EL3", 0xFF90, true, true,  {AArch64::ProcCyclone}  }, // 736
2719 };
2720
2721const SysReg *lookupSysRegByName(StringRef Name) {
2722  struct IndexType {
2723    const char * Name;
2724    unsigned _index;
2725  };
2726  static const struct IndexType Index[] = {
2727    { "ACTLR_EL1", 195 },
2728    { "ACTLR_EL2", 196 },
2729    { "ACTLR_EL3", 197 },
2730    { "AFSR0_EL1", 239 },
2731    { "AFSR0_EL12", 598 },
2732    { "AFSR0_EL2", 240 },
2733    { "AFSR0_EL3", 241 },
2734    { "AFSR1_EL1", 242 },
2735    { "AFSR1_EL12", 599 },
2736    { "AFSR1_EL2", 243 },
2737    { "AFSR1_EL3", 244 },
2738    { "AIDR_EL1", 14 },
2739    { "AMAIR_EL1", 269 },
2740    { "AMAIR_EL12", 603 },
2741    { "AMAIR_EL2", 270 },
2742    { "AMAIR_EL3", 271 },
2743    { "AMCFGR_EL0", 680 },
2744    { "AMCGCR_EL0", 681 },
2745    { "AMCNTENCLR0_EL0", 683 },
2746    { "AMCNTENCLR1_EL0", 693 },
2747    { "AMCNTENSET0_EL0", 684 },
2748    { "AMCNTENSET1_EL0", 694 },
2749    { "AMCR_EL0", 679 },
2750    { "AMEVCNTR00_EL0", 685 },
2751    { "AMEVCNTR01_EL0", 686 },
2752    { "AMEVCNTR02_EL0", 687 },
2753    { "AMEVCNTR03_EL0", 688 },
2754    { "AMEVCNTR10_EL0", 695 },
2755    { "AMEVCNTR110_EL0", 705 },
2756    { "AMEVCNTR111_EL0", 706 },
2757    { "AMEVCNTR112_EL0", 707 },
2758    { "AMEVCNTR113_EL0", 708 },
2759    { "AMEVCNTR114_EL0", 709 },
2760    { "AMEVCNTR115_EL0", 710 },
2761    { "AMEVCNTR11_EL0", 696 },
2762    { "AMEVCNTR12_EL0", 697 },
2763    { "AMEVCNTR13_EL0", 698 },
2764    { "AMEVCNTR14_EL0", 699 },
2765    { "AMEVCNTR15_EL0", 700 },
2766    { "AMEVCNTR16_EL0", 701 },
2767    { "AMEVCNTR17_EL0", 702 },
2768    { "AMEVCNTR18_EL0", 703 },
2769    { "AMEVCNTR19_EL0", 704 },
2770    { "AMEVTYPER00_EL0", 689 },
2771    { "AMEVTYPER01_EL0", 690 },
2772    { "AMEVTYPER02_EL0", 691 },
2773    { "AMEVTYPER03_EL0", 692 },
2774    { "AMEVTYPER10_EL0", 711 },
2775    { "AMEVTYPER110_EL0", 721 },
2776    { "AMEVTYPER111_EL0", 722 },
2777    { "AMEVTYPER112_EL0", 723 },
2778    { "AMEVTYPER113_EL0", 724 },
2779    { "AMEVTYPER114_EL0", 725 },
2780    { "AMEVTYPER115_EL0", 726 },
2781    { "AMEVTYPER11_EL0", 712 },
2782    { "AMEVTYPER12_EL0", 713 },
2783    { "AMEVTYPER13_EL0", 714 },
2784    { "AMEVTYPER14_EL0", 715 },
2785    { "AMEVTYPER15_EL0", 716 },
2786    { "AMEVTYPER16_EL0", 717 },
2787    { "AMEVTYPER17_EL0", 718 },
2788    { "AMEVTYPER18_EL0", 719 },
2789    { "AMEVTYPER19_EL0", 720 },
2790    { "AMUSERENR_EL0", 682 },
2791    { "APDAKEYHI_EL1", 643 },
2792    { "APDAKEYLO_EL1", 642 },
2793    { "APDBKEYHI_EL1", 645 },
2794    { "APDBKEYLO_EL1", 644 },
2795    { "APGAKEYHI_EL1", 647 },
2796    { "APGAKEYLO_EL1", 646 },
2797    { "APIAKEYHI_EL1", 639 },
2798    { "APIAKEYLO_EL1", 638 },
2799    { "APIBKEYHI_EL1", 641 },
2800    { "APIBKEYLO_EL1", 640 },
2801    { "CCSIDR2_EL1", 9 },
2802    { "CCSIDR_EL1", 8 },
2803    { "CLIDR_EL1", 10 },
2804    { "CNTFRQ_EL0", 284 },
2805    { "CNTHCTL_EL2", 287 },
2806    { "CNTHPS_CTL_EL2", 655 },
2807    { "CNTHPS_CVAL_EL2", 654 },
2808    { "CNTHPS_TVAL_EL2", 653 },
2809    { "CNTHP_CTL_EL2", 292 },
2810    { "CNTHP_CVAL_EL2", 295 },
2811    { "CNTHP_TVAL_EL2", 289 },
2812    { "CNTHVS_CTL_EL2", 652 },
2813    { "CNTHVS_CVAL_EL2", 651 },
2814    { "CNTHVS_TVAL_EL2", 650 },
2815    { "CNTHV_CTL_EL2", 592 },
2816    { "CNTHV_CVAL_EL2", 591 },
2817    { "CNTHV_TVAL_EL2", 590 },
2818    { "CNTKCTL_EL1", 286 },
2819    { "CNTKCTL_EL12", 606 },
2820    { "CNTPCT_EL0", 49 },
2821    { "CNTPS_CTL_EL1", 293 },
2822    { "CNTPS_CVAL_EL1", 296 },
2823    { "CNTPS_TVAL_EL1", 290 },
2824    { "CNTP_CTL_EL0", 291 },
2825    { "CNTP_CTL_EL02", 608 },
2826    { "CNTP_CVAL_EL0", 294 },
2827    { "CNTP_CVAL_EL02", 609 },
2828    { "CNTP_TVAL_EL0", 288 },
2829    { "CNTP_TVAL_EL02", 607 },
2830    { "CNTVCT_EL0", 50 },
2831    { "CNTVOFF_EL2", 285 },
2832    { "CNTV_CTL_EL0", 298 },
2833    { "CNTV_CTL_EL02", 611 },
2834    { "CNTV_CVAL_EL0", 299 },
2835    { "CNTV_CVAL_EL02", 612 },
2836    { "CNTV_TVAL_EL0", 297 },
2837    { "CNTV_TVAL_EL02", 610 },
2838    { "CONTEXTIDR_EL1", 278 },
2839    { "CONTEXTIDR_EL12", 605 },
2840    { "CONTEXTIDR_EL2", 589 },
2841    { "CPACR_EL1", 191 },
2842    { "CPACR_EL12", 594 },
2843    { "CPM_IOACC_CTL_EL3", 736 },
2844    { "CPTR_EL2", 202 },
2845    { "CPTR_EL3", 203 },
2846    { "CSSELR_EL1", 188 },
2847    { "CTR_EL0", 11 },
2848    { "CURRENTEL", 229 },
2849    { "DACR32_EL2", 216 },
2850    { "DAIF", 228 },
2851    { "DBGAUTHSTATUS_EL1", 4 },
2852    { "DBGBCR0_EL1", 135 },
2853    { "DBGBCR10_EL1", 145 },
2854    { "DBGBCR11_EL1", 146 },
2855    { "DBGBCR12_EL1", 147 },
2856    { "DBGBCR13_EL1", 148 },
2857    { "DBGBCR14_EL1", 149 },
2858    { "DBGBCR15_EL1", 150 },
2859    { "DBGBCR1_EL1", 136 },
2860    { "DBGBCR2_EL1", 137 },
2861    { "DBGBCR3_EL1", 138 },
2862    { "DBGBCR4_EL1", 139 },
2863    { "DBGBCR5_EL1", 140 },
2864    { "DBGBCR6_EL1", 141 },
2865    { "DBGBCR7_EL1", 142 },
2866    { "DBGBCR8_EL1", 143 },
2867    { "DBGBCR9_EL1", 144 },
2868    { "DBGBVR0_EL1", 119 },
2869    { "DBGBVR10_EL1", 129 },
2870    { "DBGBVR11_EL1", 130 },
2871    { "DBGBVR12_EL1", 131 },
2872    { "DBGBVR13_EL1", 132 },
2873    { "DBGBVR14_EL1", 133 },
2874    { "DBGBVR15_EL1", 134 },
2875    { "DBGBVR1_EL1", 120 },
2876    { "DBGBVR2_EL1", 121 },
2877    { "DBGBVR3_EL1", 122 },
2878    { "DBGBVR4_EL1", 123 },
2879    { "DBGBVR5_EL1", 124 },
2880    { "DBGBVR6_EL1", 125 },
2881    { "DBGBVR7_EL1", 126 },
2882    { "DBGBVR8_EL1", 127 },
2883    { "DBGBVR9_EL1", 128 },
2884    { "DBGCLAIMCLR_EL1", 187 },
2885    { "DBGCLAIMSET_EL1", 186 },
2886    { "DBGDTRRX_EL0", 1 },
2887    { "DBGDTRTX_EL0", 100 },
2888    { "DBGDTR_EL0", 116 },
2889    { "DBGPRCR_EL1", 185 },
2890    { "DBGVCR32_EL2", 118 },
2891    { "DBGWCR0_EL1", 167 },
2892    { "DBGWCR10_EL1", 177 },
2893    { "DBGWCR11_EL1", 178 },
2894    { "DBGWCR12_EL1", 179 },
2895    { "DBGWCR13_EL1", 180 },
2896    { "DBGWCR14_EL1", 181 },
2897    { "DBGWCR15_EL1", 182 },
2898    { "DBGWCR1_EL1", 168 },
2899    { "DBGWCR2_EL1", 169 },
2900    { "DBGWCR3_EL1", 170 },
2901    { "DBGWCR4_EL1", 171 },
2902    { "DBGWCR5_EL1", 172 },
2903    { "DBGWCR6_EL1", 173 },
2904    { "DBGWCR7_EL1", 174 },
2905    { "DBGWCR8_EL1", 175 },
2906    { "DBGWCR9_EL1", 176 },
2907    { "DBGWVR0_EL1", 151 },
2908    { "DBGWVR10_EL1", 161 },
2909    { "DBGWVR11_EL1", 162 },
2910    { "DBGWVR12_EL1", 163 },
2911    { "DBGWVR13_EL1", 164 },
2912    { "DBGWVR14_EL1", 165 },
2913    { "DBGWVR15_EL1", 166 },
2914    { "DBGWVR1_EL1", 152 },
2915    { "DBGWVR2_EL1", 153 },
2916    { "DBGWVR3_EL1", 154 },
2917    { "DBGWVR4_EL1", 155 },
2918    { "DBGWVR5_EL1", 156 },
2919    { "DBGWVR6_EL1", 157 },
2920    { "DBGWVR7_EL1", 158 },
2921    { "DBGWVR8_EL1", 159 },
2922    { "DBGWVR9_EL1", 160 },
2923    { "DCZID_EL0", 15 },
2924    { "DISR_EL1", 635 },
2925    { "DIT", 730 },
2926    { "DLR_EL0", 237 },
2927    { "DSPSR_EL0", 236 },
2928    { "ELR_EL1", 220 },
2929    { "ELR_EL12", 614 },
2930    { "ELR_EL2", 221 },
2931    { "ELR_EL3", 222 },
2932    { "ERRIDR_EL1", 98 },
2933    { "ERRSELR_EL1", 629 },
2934    { "ERXADDR_EL1", 632 },
2935    { "ERXCTLR_EL1", 630 },
2936    { "ERXFR_EL1", 99 },
2937    { "ERXMISC0_EL1", 633 },
2938    { "ERXMISC1_EL1", 634 },
2939    { "ERXMISC2_EL1", 660 },
2940    { "ERXMISC3_EL1", 661 },
2941    { "ERXPFGCDN_EL1", 658 },
2942    { "ERXPFGCTL_EL1", 657 },
2943    { "ERXPFGF_EL1", 662 },
2944    { "ERXSTATUS_EL1", 631 },
2945    { "ERXTS_EL1", 659 },
2946    { "ESR_EL1", 245 },
2947    { "ESR_EL12", 600 },
2948    { "ESR_EL2", 246 },
2949    { "ESR_EL3", 247 },
2950    { "FAR_EL1", 249 },
2951    { "FAR_EL12", 601 },
2952    { "FAR_EL2", 250 },
2953    { "FAR_EL3", 251 },
2954    { "FPCR", 234 },
2955    { "FPEXC32_EL2", 248 },
2956    { "FPSR", 235 },
2957    { "HACR_EL2", 205 },
2958    { "HCR_EL2", 198 },
2959    { "HPFAR_EL2", 252 },
2960    { "HSTR_EL2", 204 },
2961    { "ICC_AP0R0_EL1", 547 },
2962    { "ICC_AP0R1_EL1", 548 },
2963    { "ICC_AP0R2_EL1", 549 },
2964    { "ICC_AP0R3_EL1", 550 },
2965    { "ICC_AP1R0_EL1", 551 },
2966    { "ICC_AP1R1_EL1", 552 },
2967    { "ICC_AP1R2_EL1", 553 },
2968    { "ICC_AP1R3_EL1", 554 },
2969    { "ICC_ASGI1R_EL1", 109 },
2970    { "ICC_BPR0_EL1", 536 },
2971    { "ICC_BPR1_EL1", 535 },
2972    { "ICC_CTLR_EL1", 538 },
2973    { "ICC_CTLR_EL3", 539 },
2974    { "ICC_DIR_EL1", 107 },
2975    { "ICC_EOIR0_EL1", 106 },
2976    { "ICC_EOIR1_EL1", 105 },
2977    { "ICC_HPPIR0_EL1", 91 },
2978    { "ICC_HPPIR1_EL1", 90 },
2979    { "ICC_IAR0_EL1", 89 },
2980    { "ICC_IAR1_EL1", 88 },
2981    { "ICC_IGRPEN0_EL1", 543 },
2982    { "ICC_IGRPEN1_EL1", 544 },
2983    { "ICC_IGRPEN1_EL3", 545 },
2984    { "ICC_PMR_EL1", 537 },
2985    { "ICC_RPR_EL1", 92 },
2986    { "ICC_SEIEN_EL1", 546 },
2987    { "ICC_SGI0R_EL1", 110 },
2988    { "ICC_SGI1R_EL1", 108 },
2989    { "ICC_SRE_EL1", 540 },
2990    { "ICC_SRE_EL2", 541 },
2991    { "ICC_SRE_EL3", 542 },
2992    { "ICH_AP0R0_EL2", 555 },
2993    { "ICH_AP0R1_EL2", 556 },
2994    { "ICH_AP0R2_EL2", 557 },
2995    { "ICH_AP0R3_EL2", 558 },
2996    { "ICH_AP1R0_EL2", 559 },
2997    { "ICH_AP1R1_EL2", 560 },
2998    { "ICH_AP1R2_EL2", 561 },
2999    { "ICH_AP1R3_EL2", 562 },
3000    { "ICH_EISR_EL2", 94 },
3001    { "ICH_ELRSR_EL2", 95 },
3002    { "ICH_HCR_EL2", 563 },
3003    { "ICH_LR0_EL2", 567 },
3004    { "ICH_LR10_EL2", 577 },
3005    { "ICH_LR11_EL2", 578 },
3006    { "ICH_LR12_EL2", 579 },
3007    { "ICH_LR13_EL2", 580 },
3008    { "ICH_LR14_EL2", 581 },
3009    { "ICH_LR15_EL2", 582 },
3010    { "ICH_LR1_EL2", 568 },
3011    { "ICH_LR2_EL2", 569 },
3012    { "ICH_LR3_EL2", 570 },
3013    { "ICH_LR4_EL2", 571 },
3014    { "ICH_LR5_EL2", 572 },
3015    { "ICH_LR6_EL2", 573 },
3016    { "ICH_LR7_EL2", 574 },
3017    { "ICH_LR8_EL2", 575 },
3018    { "ICH_LR9_EL2", 576 },
3019    { "ICH_MISR_EL2", 564 },
3020    { "ICH_VMCR_EL2", 565 },
3021    { "ICH_VSEIR_EL2", 566 },
3022    { "ICH_VTR_EL2", 93 },
3023    { "ID_AA64AFR0_EL1", 35 },
3024    { "ID_AA64AFR1_EL1", 36 },
3025    { "ID_AA64DFR0_EL1", 33 },
3026    { "ID_AA64DFR1_EL1", 34 },
3027    { "ID_AA64ISAR0_EL1", 37 },
3028    { "ID_AA64ISAR1_EL1", 38 },
3029    { "ID_AA64MMFR0_EL1", 39 },
3030    { "ID_AA64MMFR1_EL1", 40 },
3031    { "ID_AA64MMFR2_EL1", 41 },
3032    { "ID_AA64PFR0_EL1", 31 },
3033    { "ID_AA64PFR1_EL1", 32 },
3034    { "ID_AA64ZFR0_EL1", 96 },
3035    { "ID_AFR0_EL1", 19 },
3036    { "ID_DFR0_EL1", 18 },
3037    { "ID_ISAR0_EL1", 24 },
3038    { "ID_ISAR1_EL1", 25 },
3039    { "ID_ISAR2_EL1", 26 },
3040    { "ID_ISAR3_EL1", 27 },
3041    { "ID_ISAR4_EL1", 28 },
3042    { "ID_ISAR5_EL1", 29 },
3043    { "ID_ISAR6_EL1", 30 },
3044    { "ID_MMFR0_EL1", 20 },
3045    { "ID_MMFR1_EL1", 21 },
3046    { "ID_MMFR2_EL1", 22 },
3047    { "ID_MMFR3_EL1", 23 },
3048    { "ID_MMFR4_EL1", 51 },
3049    { "ID_PFR0_EL1", 16 },
3050    { "ID_PFR1_EL1", 17 },
3051    { "IFSR32_EL2", 238 },
3052    { "ISR_EL1", 48 },
3053    { "LORC_EL1", 587 },
3054    { "LOREA_EL1", 585 },
3055    { "LORID_EL1", 97 },
3056    { "LORN_EL1", 586 },
3057    { "LORSA_EL1", 584 },
3058    { "MAIR_EL1", 266 },
3059    { "MAIR_EL12", 602 },
3060    { "MAIR_EL2", 267 },
3061    { "MAIR_EL3", 268 },
3062    { "MDCCINT_EL1", 114 },
3063    { "MDCCSR_EL0", 0 },
3064    { "MDCR_EL2", 200 },
3065    { "MDCR_EL3", 206 },
3066    { "MDRAR_EL1", 2 },
3067    { "MDSCR_EL1", 115 },
3068    { "MIDR_EL1", 7 },
3069    { "MPAM0_EL1", 663 },
3070    { "MPAM1_EL1", 664 },
3071    { "MPAM1_EL12", 667 },
3072    { "MPAM2_EL2", 665 },
3073    { "MPAM3_EL3", 666 },
3074    { "MPAMHCR_EL2", 668 },
3075    { "MPAMIDR_EL1", 678 },
3076    { "MPAMVPM0_EL2", 670 },
3077    { "MPAMVPM1_EL2", 671 },
3078    { "MPAMVPM2_EL2", 672 },
3079    { "MPAMVPM3_EL2", 673 },
3080    { "MPAMVPM4_EL2", 674 },
3081    { "MPAMVPM5_EL2", 675 },
3082    { "MPAMVPM6_EL2", 676 },
3083    { "MPAMVPM7_EL2", 677 },
3084    { "MPAMVPMV_EL2", 669 },
3085    { "MPIDR_EL1", 12 },
3086    { "MVFR0_EL1", 42 },
3087    { "MVFR1_EL1", 43 },
3088    { "MVFR2_EL1", 44 },
3089    { "NZCV", 227 },
3090    { "OSDLR_EL1", 184 },
3091    { "OSDTRRX_EL1", 111 },
3092    { "OSDTRTX_EL1", 112 },
3093    { "OSECCR_EL1", 117 },
3094    { "OSLAR_EL1", 101 },
3095    { "OSLSR_EL1", 3 },
3096    { "PAN", 583 },
3097    { "PAR_EL1", 253 },
3098    { "PMBIDR_EL1", 619 },
3099    { "PMBLIMITR_EL1", 616 },
3100    { "PMBPTR_EL1", 617 },
3101    { "PMBSR_EL1", 618 },
3102    { "PMCCFILTR_EL0", 331 },
3103    { "PMCCNTR_EL0", 259 },
3104    { "PMCEID0_EL0", 5 },
3105    { "PMCEID1_EL0", 6 },
3106    { "PMCNTENCLR_EL0", 256 },
3107    { "PMCNTENSET_EL0", 255 },
3108    { "PMCR_EL0", 254 },
3109    { "PMEVCNTR0_EL0", 300 },
3110    { "PMEVCNTR10_EL0", 310 },
3111    { "PMEVCNTR11_EL0", 311 },
3112    { "PMEVCNTR12_EL0", 312 },
3113    { "PMEVCNTR13_EL0", 313 },
3114    { "PMEVCNTR14_EL0", 314 },
3115    { "PMEVCNTR15_EL0", 315 },
3116    { "PMEVCNTR16_EL0", 316 },
3117    { "PMEVCNTR17_EL0", 317 },
3118    { "PMEVCNTR18_EL0", 318 },
3119    { "PMEVCNTR19_EL0", 319 },
3120    { "PMEVCNTR1_EL0", 301 },
3121    { "PMEVCNTR20_EL0", 320 },
3122    { "PMEVCNTR21_EL0", 321 },
3123    { "PMEVCNTR22_EL0", 322 },
3124    { "PMEVCNTR23_EL0", 323 },
3125    { "PMEVCNTR24_EL0", 324 },
3126    { "PMEVCNTR25_EL0", 325 },
3127    { "PMEVCNTR26_EL0", 326 },
3128    { "PMEVCNTR27_EL0", 327 },
3129    { "PMEVCNTR28_EL0", 328 },
3130    { "PMEVCNTR29_EL0", 329 },
3131    { "PMEVCNTR2_EL0", 302 },
3132    { "PMEVCNTR30_EL0", 330 },
3133    { "PMEVCNTR3_EL0", 303 },
3134    { "PMEVCNTR4_EL0", 304 },
3135    { "PMEVCNTR5_EL0", 305 },
3136    { "PMEVCNTR6_EL0", 306 },
3137    { "PMEVCNTR7_EL0", 307 },
3138    { "PMEVCNTR8_EL0", 308 },
3139    { "PMEVCNTR9_EL0", 309 },
3140    { "PMEVTYPER0_EL0", 332 },
3141    { "PMEVTYPER10_EL0", 342 },
3142    { "PMEVTYPER11_EL0", 343 },
3143    { "PMEVTYPER12_EL0", 344 },
3144    { "PMEVTYPER13_EL0", 345 },
3145    { "PMEVTYPER14_EL0", 346 },
3146    { "PMEVTYPER15_EL0", 347 },
3147    { "PMEVTYPER16_EL0", 348 },
3148    { "PMEVTYPER17_EL0", 349 },
3149    { "PMEVTYPER18_EL0", 350 },
3150    { "PMEVTYPER19_EL0", 351 },
3151    { "PMEVTYPER1_EL0", 333 },
3152    { "PMEVTYPER20_EL0", 352 },
3153    { "PMEVTYPER21_EL0", 353 },
3154    { "PMEVTYPER22_EL0", 354 },
3155    { "PMEVTYPER23_EL0", 355 },
3156    { "PMEVTYPER24_EL0", 356 },
3157    { "PMEVTYPER25_EL0", 357 },
3158    { "PMEVTYPER26_EL0", 358 },
3159    { "PMEVTYPER27_EL0", 359 },
3160    { "PMEVTYPER28_EL0", 360 },
3161    { "PMEVTYPER29_EL0", 361 },
3162    { "PMEVTYPER2_EL0", 334 },
3163    { "PMEVTYPER30_EL0", 362 },
3164    { "PMEVTYPER3_EL0", 335 },
3165    { "PMEVTYPER4_EL0", 336 },
3166    { "PMEVTYPER5_EL0", 337 },
3167    { "PMEVTYPER6_EL0", 338 },
3168    { "PMEVTYPER7_EL0", 339 },
3169    { "PMEVTYPER8_EL0", 340 },
3170    { "PMEVTYPER9_EL0", 341 },
3171    { "PMINTENCLR_EL1", 264 },
3172    { "PMINTENSET_EL1", 263 },
3173    { "PMOVSCLR_EL0", 257 },
3174    { "PMOVSSET_EL0", 265 },
3175    { "PMSCR_EL1", 622 },
3176    { "PMSCR_EL12", 621 },
3177    { "PMSCR_EL2", 620 },
3178    { "PMSELR_EL0", 258 },
3179    { "PMSEVFR_EL1", 626 },
3180    { "PMSFCR_EL1", 625 },
3181    { "PMSICR_EL1", 623 },
3182    { "PMSIDR_EL1", 628 },
3183    { "PMSIRR_EL1", 624 },
3184    { "PMSLATFR_EL1", 627 },
3185    { "PMSWINC_EL0", 102 },
3186    { "PMUSERENR_EL0", 262 },
3187    { "PMXEVCNTR_EL0", 261 },
3188    { "PMXEVTYPER_EL0", 260 },
3189    { "REVIDR_EL1", 13 },
3190    { "RMR_EL1", 275 },
3191    { "RMR_EL2", 276 },
3192    { "RMR_EL3", 277 },
3193    { "RVBAR_EL1", 45 },
3194    { "RVBAR_EL2", 46 },
3195    { "RVBAR_EL3", 47 },
3196    { "SCR_EL3", 199 },
3197    { "SCTLR_EL1", 192 },
3198    { "SCTLR_EL12", 593 },
3199    { "SCTLR_EL2", 193 },
3200    { "SCTLR_EL3", 194 },
3201    { "SDER32_EL2", 656 },
3202    { "SDER32_EL3", 201 },
3203    { "SPSEL", 226 },
3204    { "SPSR_ABT", 231 },
3205    { "SPSR_EL1", 217 },
3206    { "SPSR_EL12", 613 },
3207    { "SPSR_EL2", 218 },
3208    { "SPSR_EL3", 219 },
3209    { "SPSR_FIQ", 233 },
3210    { "SPSR_IRQ", 230 },
3211    { "SPSR_UND", 232 },
3212    { "SP_EL0", 223 },
3213    { "SP_EL1", 224 },
3214    { "SP_EL2", 225 },
3215    { "TCR_EL1", 211 },
3216    { "TCR_EL12", 597 },
3217    { "TCR_EL2", 212 },
3218    { "TCR_EL3", 213 },
3219    { "TEECR32_EL1", 113 },
3220    { "TEEHBR32_EL1", 183 },
3221    { "TPIDRRO_EL0", 282 },
3222    { "TPIDR_EL0", 279 },
3223    { "TPIDR_EL1", 283 },
3224    { "TPIDR_EL2", 280 },
3225    { "TPIDR_EL3", 281 },
3226    { "TRCACATR0", 480 },
3227    { "TRCACATR1", 481 },
3228    { "TRCACATR10", 490 },
3229    { "TRCACATR11", 491 },
3230    { "TRCACATR12", 492 },
3231    { "TRCACATR13", 493 },
3232    { "TRCACATR14", 494 },
3233    { "TRCACATR15", 495 },
3234    { "TRCACATR2", 482 },
3235    { "TRCACATR3", 483 },
3236    { "TRCACATR4", 484 },
3237    { "TRCACATR5", 485 },
3238    { "TRCACATR6", 486 },
3239    { "TRCACATR7", 487 },
3240    { "TRCACATR8", 488 },
3241    { "TRCACATR9", 489 },
3242    { "TRCACVR0", 464 },
3243    { "TRCACVR1", 465 },
3244    { "TRCACVR10", 474 },
3245    { "TRCACVR11", 475 },
3246    { "TRCACVR12", 476 },
3247    { "TRCACVR13", 477 },
3248    { "TRCACVR14", 478 },
3249    { "TRCACVR15", 479 },
3250    { "TRCACVR2", 466 },
3251    { "TRCACVR3", 467 },
3252    { "TRCACVR4", 468 },
3253    { "TRCACVR5", 469 },
3254    { "TRCACVR6", 470 },
3255    { "TRCACVR7", 471 },
3256    { "TRCACVR8", 472 },
3257    { "TRCACVR9", 473 },
3258    { "TRCAUTHSTATUS", 72 },
3259    { "TRCAUXCTLR", 366 },
3260    { "TRCBBCTLR", 373 },
3261    { "TRCCCCTLR", 372 },
3262    { "TRCCIDCCTLR0", 528 },
3263    { "TRCCIDCCTLR1", 529 },
3264    { "TRCCIDCVR0", 512 },
3265    { "TRCCIDCVR1", 513 },
3266    { "TRCCIDCVR2", 514 },
3267    { "TRCCIDCVR3", 515 },
3268    { "TRCCIDCVR4", 516 },
3269    { "TRCCIDCVR5", 517 },
3270    { "TRCCIDCVR6", 518 },
3271    { "TRCCIDCVR7", 519 },
3272    { "TRCCIDR0", 84 },
3273    { "TRCCIDR1", 85 },
3274    { "TRCCIDR2", 86 },
3275    { "TRCCIDR3", 87 },
3276    { "TRCCLAIMCLR", 534 },
3277    { "TRCCLAIMSET", 533 },
3278    { "TRCCNTCTLR0", 393 },
3279    { "TRCCNTCTLR1", 394 },
3280    { "TRCCNTCTLR2", 395 },
3281    { "TRCCNTCTLR3", 396 },
3282    { "TRCCNTRLDVR0", 389 },
3283    { "TRCCNTRLDVR1", 390 },
3284    { "TRCCNTRLDVR2", 391 },
3285    { "TRCCNTRLDVR3", 392 },
3286    { "TRCCNTVR0", 397 },
3287    { "TRCCNTVR1", 398 },
3288    { "TRCCNTVR2", 399 },
3289    { "TRCCNTVR3", 400 },
3290    { "TRCCONFIGR", 365 },
3291    { "TRCDEVAFF0", 69 },
3292    { "TRCDEVAFF1", 70 },
3293    { "TRCDEVARCH", 73 },
3294    { "TRCDEVID", 74 },
3295    { "TRCDEVTYPE", 75 },
3296    { "TRCDVCMR0", 504 },
3297    { "TRCDVCMR1", 505 },
3298    { "TRCDVCMR2", 506 },
3299    { "TRCDVCMR3", 507 },
3300    { "TRCDVCMR4", 508 },
3301    { "TRCDVCMR5", 509 },
3302    { "TRCDVCMR6", 510 },
3303    { "TRCDVCMR7", 511 },
3304    { "TRCDVCVR0", 496 },
3305    { "TRCDVCVR1", 497 },
3306    { "TRCDVCVR2", 498 },
3307    { "TRCDVCVR3", 499 },
3308    { "TRCDVCVR4", 500 },
3309    { "TRCDVCVR5", 501 },
3310    { "TRCDVCVR6", 502 },
3311    { "TRCDVCVR7", 503 },
3312    { "TRCEVENTCTL0R", 367 },
3313    { "TRCEVENTCTL1R", 368 },
3314    { "TRCEXTINSELR", 388 },
3315    { "TRCIDR0", 59 },
3316    { "TRCIDR1", 60 },
3317    { "TRCIDR10", 55 },
3318    { "TRCIDR11", 56 },
3319    { "TRCIDR12", 57 },
3320    { "TRCIDR13", 58 },
3321    { "TRCIDR2", 61 },
3322    { "TRCIDR3", 62 },
3323    { "TRCIDR4", 63 },
3324    { "TRCIDR5", 64 },
3325    { "TRCIDR6", 65 },
3326    { "TRCIDR7", 66 },
3327    { "TRCIDR8", 53 },
3328    { "TRCIDR9", 54 },
3329    { "TRCIMSPEC0", 401 },
3330    { "TRCIMSPEC1", 402 },
3331    { "TRCIMSPEC2", 403 },
3332    { "TRCIMSPEC3", 404 },
3333    { "TRCIMSPEC4", 405 },
3334    { "TRCIMSPEC5", 406 },
3335    { "TRCIMSPEC6", 407 },
3336    { "TRCIMSPEC7", 408 },
3337    { "TRCITCTRL", 532 },
3338    { "TRCLAR", 104 },
3339    { "TRCLSR", 71 },
3340    { "TRCOSLAR", 103 },
3341    { "TRCOSLSR", 67 },
3342    { "TRCPDCR", 463 },
3343    { "TRCPDSR", 68 },
3344    { "TRCPIDR0", 80 },
3345    { "TRCPIDR1", 81 },
3346    { "TRCPIDR2", 82 },
3347    { "TRCPIDR3", 83 },
3348    { "TRCPIDR4", 76 },
3349    { "TRCPIDR5", 77 },
3350    { "TRCPIDR6", 78 },
3351    { "TRCPIDR7", 79 },
3352    { "TRCPRGCTLR", 363 },
3353    { "TRCPROCSELR", 364 },
3354    { "TRCQCTLR", 375 },
3355    { "TRCRSCTLR10", 417 },
3356    { "TRCRSCTLR11", 418 },
3357    { "TRCRSCTLR12", 419 },
3358    { "TRCRSCTLR13", 420 },
3359    { "TRCRSCTLR14", 421 },
3360    { "TRCRSCTLR15", 422 },
3361    { "TRCRSCTLR16", 423 },
3362    { "TRCRSCTLR17", 424 },
3363    { "TRCRSCTLR18", 425 },
3364    { "TRCRSCTLR19", 426 },
3365    { "TRCRSCTLR2", 409 },
3366    { "TRCRSCTLR20", 427 },
3367    { "TRCRSCTLR21", 428 },
3368    { "TRCRSCTLR22", 429 },
3369    { "TRCRSCTLR23", 430 },
3370    { "TRCRSCTLR24", 431 },
3371    { "TRCRSCTLR25", 432 },
3372    { "TRCRSCTLR26", 433 },
3373    { "TRCRSCTLR27", 434 },
3374    { "TRCRSCTLR28", 435 },
3375    { "TRCRSCTLR29", 436 },
3376    { "TRCRSCTLR3", 410 },
3377    { "TRCRSCTLR30", 437 },
3378    { "TRCRSCTLR31", 438 },
3379    { "TRCRSCTLR4", 411 },
3380    { "TRCRSCTLR5", 412 },
3381    { "TRCRSCTLR6", 413 },
3382    { "TRCRSCTLR7", 414 },
3383    { "TRCRSCTLR8", 415 },
3384    { "TRCRSCTLR9", 416 },
3385    { "TRCSEQEVR0", 383 },
3386    { "TRCSEQEVR1", 384 },
3387    { "TRCSEQEVR2", 385 },
3388    { "TRCSEQRSTEVR", 386 },
3389    { "TRCSEQSTR", 387 },
3390    { "TRCSSCCR0", 439 },
3391    { "TRCSSCCR1", 440 },
3392    { "TRCSSCCR2", 441 },
3393    { "TRCSSCCR3", 442 },
3394    { "TRCSSCCR4", 443 },
3395    { "TRCSSCCR5", 444 },
3396    { "TRCSSCCR6", 445 },
3397    { "TRCSSCCR7", 446 },
3398    { "TRCSSCSR0", 447 },
3399    { "TRCSSCSR1", 448 },
3400    { "TRCSSCSR2", 449 },
3401    { "TRCSSCSR3", 450 },
3402    { "TRCSSCSR4", 451 },
3403    { "TRCSSCSR5", 452 },
3404    { "TRCSSCSR6", 453 },
3405    { "TRCSSCSR7", 454 },
3406    { "TRCSSPCICR0", 455 },
3407    { "TRCSSPCICR1", 456 },
3408    { "TRCSSPCICR2", 457 },
3409    { "TRCSSPCICR3", 458 },
3410    { "TRCSSPCICR4", 459 },
3411    { "TRCSSPCICR5", 460 },
3412    { "TRCSSPCICR6", 461 },
3413    { "TRCSSPCICR7", 462 },
3414    { "TRCSTALLCTLR", 369 },
3415    { "TRCSTATR", 52 },
3416    { "TRCSYNCPR", 371 },
3417    { "TRCTRACEIDR", 374 },
3418    { "TRCTSCTLR", 370 },
3419    { "TRCVDARCCTLR", 382 },
3420    { "TRCVDCTLR", 380 },
3421    { "TRCVDSACCTLR", 381 },
3422    { "TRCVICTLR", 376 },
3423    { "TRCVIIECTLR", 377 },
3424    { "TRCVIPCSSCTLR", 379 },
3425    { "TRCVISSCTLR", 378 },
3426    { "TRCVMIDCCTLR0", 530 },
3427    { "TRCVMIDCCTLR1", 531 },
3428    { "TRCVMIDCVR0", 520 },
3429    { "TRCVMIDCVR1", 521 },
3430    { "TRCVMIDCVR2", 522 },
3431    { "TRCVMIDCVR3", 523 },
3432    { "TRCVMIDCVR4", 524 },
3433    { "TRCVMIDCVR5", 525 },
3434    { "TRCVMIDCVR6", 526 },
3435    { "TRCVMIDCVR7", 527 },
3436    { "TRFCR_EL1", 727 },
3437    { "TRFCR_EL12", 729 },
3438    { "TRFCR_EL2", 728 },
3439    { "TTBR0_EL1", 207 },
3440    { "TTBR0_EL12", 595 },
3441    { "TTBR0_EL2", 208 },
3442    { "TTBR0_EL3", 209 },
3443    { "TTBR1_EL1", 210 },
3444    { "TTBR1_EL12", 596 },
3445    { "TTBR1_EL2", 588 },
3446    { "UAO", 615 },
3447    { "VBAR_EL1", 272 },
3448    { "VBAR_EL12", 604 },
3449    { "VBAR_EL2", 273 },
3450    { "VBAR_EL3", 274 },
3451    { "VDISR_EL2", 636 },
3452    { "VMPIDR_EL2", 190 },
3453    { "VNCR_EL2", 731 },
3454    { "VPIDR_EL2", 189 },
3455    { "VSESR_EL2", 637 },
3456    { "VSTCR_EL2", 648 },
3457    { "VSTTBR_EL2", 649 },
3458    { "VTCR_EL2", 215 },
3459    { "VTTBR_EL2", 214 },
3460    { "ZCR_EL1", 732 },
3461    { "ZCR_EL12", 735 },
3462    { "ZCR_EL2", 733 },
3463    { "ZCR_EL3", 734 },
3464  };
3465
3466  struct KeyType {
3467    std::string Name;
3468  };
3469  KeyType Key = { Name.upper() };
3470  auto Table = makeArrayRef(Index);
3471  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
3472    [](const IndexType &LHS, const KeyType &RHS) {
3473      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
3474      if (CmpName < 0) return true;
3475      if (CmpName > 0) return false;
3476      return false;
3477    });
3478
3479  if (Idx == Table.end() ||
3480      Key.Name != Idx->Name)
3481    return nullptr;
3482  return &SysRegsList[Idx->_index];
3483}
3484
3485const SysReg *lookupSysRegByEncoding(uint16_t Encoding) {
3486  struct IndexType {
3487    uint16_t Encoding;
3488    unsigned _index;
3489  };
3490  static const struct IndexType Index[] = {
3491    { 0x8002, 111 },
3492    { 0x8004, 119 },
3493    { 0x8005, 135 },
3494    { 0x8006, 151 },
3495    { 0x8007, 167 },
3496    { 0x800C, 120 },
3497    { 0x800D, 136 },
3498    { 0x800E, 152 },
3499    { 0x800F, 168 },
3500    { 0x8010, 114 },
3501    { 0x8012, 115 },
3502    { 0x8014, 121 },
3503    { 0x8015, 137 },
3504    { 0x8016, 153 },
3505    { 0x8017, 169 },
3506    { 0x801A, 112 },
3507    { 0x801C, 122 },
3508    { 0x801D, 138 },
3509    { 0x801E, 154 },
3510    { 0x801F, 170 },
3511    { 0x8024, 123 },
3512    { 0x8025, 139 },
3513    { 0x8026, 155 },
3514    { 0x8027, 171 },
3515    { 0x802C, 124 },
3516    { 0x802D, 140 },
3517    { 0x802E, 156 },
3518    { 0x802F, 172 },
3519    { 0x8032, 117 },
3520    { 0x8034, 125 },
3521    { 0x8035, 141 },
3522    { 0x8036, 157 },
3523    { 0x8037, 173 },
3524    { 0x803C, 126 },
3525    { 0x803D, 142 },
3526    { 0x803E, 158 },
3527    { 0x803F, 174 },
3528    { 0x8044, 127 },
3529    { 0x8045, 143 },
3530    { 0x8046, 159 },
3531    { 0x8047, 175 },
3532    { 0x804C, 128 },
3533    { 0x804D, 144 },
3534    { 0x804E, 160 },
3535    { 0x804F, 176 },
3536    { 0x8054, 129 },
3537    { 0x8055, 145 },
3538    { 0x8056, 161 },
3539    { 0x8057, 177 },
3540    { 0x805C, 130 },
3541    { 0x805D, 146 },
3542    { 0x805E, 162 },
3543    { 0x805F, 178 },
3544    { 0x8064, 131 },
3545    { 0x8065, 147 },
3546    { 0x8066, 163 },
3547    { 0x8067, 179 },
3548    { 0x806C, 132 },
3549    { 0x806D, 148 },
3550    { 0x806E, 164 },
3551    { 0x806F, 180 },
3552    { 0x8074, 133 },
3553    { 0x8075, 149 },
3554    { 0x8076, 165 },
3555    { 0x8077, 181 },
3556    { 0x807C, 134 },
3557    { 0x807D, 150 },
3558    { 0x807E, 166 },
3559    { 0x807F, 182 },
3560    { 0x8080, 2 },
3561    { 0x8084, 101 },
3562    { 0x808C, 3 },
3563    { 0x809C, 184 },
3564    { 0x80A4, 185 },
3565    { 0x83C6, 186 },
3566    { 0x83CE, 187 },
3567    { 0x83F6, 4 },
3568    { 0x8801, 374 },
3569    { 0x8802, 376 },
3570    { 0x8804, 383 },
3571    { 0x8805, 389 },
3572    { 0x8806, 53 },
3573    { 0x8807, 401 },
3574    { 0x8808, 363 },
3575    { 0x8809, 375 },
3576    { 0x880A, 377 },
3577    { 0x880C, 384 },
3578    { 0x880D, 390 },
3579    { 0x880E, 54 },
3580    { 0x880F, 402 },
3581    { 0x8810, 364 },
3582    { 0x8812, 378 },
3583    { 0x8814, 385 },
3584    { 0x8815, 391 },
3585    { 0x8816, 55 },
3586    { 0x8817, 403 },
3587    { 0x8818, 52 },
3588    { 0x881A, 379 },
3589    { 0x881D, 392 },
3590    { 0x881E, 56 },
3591    { 0x881F, 404 },
3592    { 0x8820, 365 },
3593    { 0x8825, 393 },
3594    { 0x8826, 57 },
3595    { 0x8827, 405 },
3596    { 0x882D, 394 },
3597    { 0x882E, 58 },
3598    { 0x882F, 406 },
3599    { 0x8830, 366 },
3600    { 0x8834, 386 },
3601    { 0x8835, 395 },
3602    { 0x8837, 407 },
3603    { 0x883C, 387 },
3604    { 0x883D, 396 },
3605    { 0x883F, 408 },
3606    { 0x8840, 367 },
3607    { 0x8842, 380 },
3608    { 0x8844, 388 },
3609    { 0x8845, 397 },
3610    { 0x8847, 59 },
3611    { 0x8848, 368 },
3612    { 0x884A, 381 },
3613    { 0x884D, 398 },
3614    { 0x884F, 60 },
3615    { 0x8852, 382 },
3616    { 0x8855, 399 },
3617    { 0x8857, 61 },
3618    { 0x8858, 369 },
3619    { 0x885D, 400 },
3620    { 0x885F, 62 },
3621    { 0x8860, 370 },
3622    { 0x8867, 63 },
3623    { 0x8868, 371 },
3624    { 0x886F, 64 },
3625    { 0x8870, 372 },
3626    { 0x8877, 65 },
3627    { 0x8878, 373 },
3628    { 0x887F, 66 },
3629    { 0x8881, 423 },
3630    { 0x8882, 439 },
3631    { 0x8883, 455 },
3632    { 0x8884, 103 },
3633    { 0x8889, 424 },
3634    { 0x888A, 440 },
3635    { 0x888B, 456 },
3636    { 0x888C, 67 },
3637    { 0x8890, 409 },
3638    { 0x8891, 425 },
3639    { 0x8892, 441 },
3640    { 0x8893, 457 },
3641    { 0x8898, 410 },
3642    { 0x8899, 426 },
3643    { 0x889A, 442 },
3644    { 0x889B, 458 },
3645    { 0x88A0, 411 },
3646    { 0x88A1, 427 },
3647    { 0x88A2, 443 },
3648    { 0x88A3, 459 },
3649    { 0x88A4, 463 },
3650    { 0x88A8, 412 },
3651    { 0x88A9, 428 },
3652    { 0x88AA, 444 },
3653    { 0x88AB, 460 },
3654    { 0x88AC, 68 },
3655    { 0x88B0, 413 },
3656    { 0x88B1, 429 },
3657    { 0x88B2, 445 },
3658    { 0x88B3, 461 },
3659    { 0x88B8, 414 },
3660    { 0x88B9, 430 },
3661    { 0x88BA, 446 },
3662    { 0x88BB, 462 },
3663    { 0x88C0, 415 },
3664    { 0x88C1, 431 },
3665    { 0x88C2, 447 },
3666    { 0x88C8, 416 },
3667    { 0x88C9, 432 },
3668    { 0x88CA, 448 },
3669    { 0x88D0, 417 },
3670    { 0x88D1, 433 },
3671    { 0x88D2, 449 },
3672    { 0x88D8, 418 },
3673    { 0x88D9, 434 },
3674    { 0x88DA, 450 },
3675    { 0x88E0, 419 },
3676    { 0x88E1, 435 },
3677    { 0x88E2, 451 },
3678    { 0x88E8, 420 },
3679    { 0x88E9, 436 },
3680    { 0x88EA, 452 },
3681    { 0x88F0, 421 },
3682    { 0x88F1, 437 },
3683    { 0x88F2, 453 },
3684    { 0x88F8, 422 },
3685    { 0x88F9, 438 },
3686    { 0x88FA, 454 },
3687    { 0x8900, 464 },
3688    { 0x8901, 472 },
3689    { 0x8902, 480 },
3690    { 0x8903, 488 },
3691    { 0x8904, 496 },
3692    { 0x8905, 500 },
3693    { 0x8906, 504 },
3694    { 0x8907, 508 },
3695    { 0x8910, 465 },
3696    { 0x8911, 473 },
3697    { 0x8912, 481 },
3698    { 0x8913, 489 },
3699    { 0x8920, 466 },
3700    { 0x8921, 474 },
3701    { 0x8922, 482 },
3702    { 0x8923, 490 },
3703    { 0x8924, 497 },
3704    { 0x8925, 501 },
3705    { 0x8926, 505 },
3706    { 0x8927, 509 },
3707    { 0x8930, 467 },
3708    { 0x8931, 475 },
3709    { 0x8932, 483 },
3710    { 0x8933, 491 },
3711    { 0x8940, 468 },
3712    { 0x8941, 476 },
3713    { 0x8942, 484 },
3714    { 0x8943, 492 },
3715    { 0x8944, 498 },
3716    { 0x8945, 502 },
3717    { 0x8946, 506 },
3718    { 0x8947, 510 },
3719    { 0x8950, 469 },
3720    { 0x8951, 477 },
3721    { 0x8952, 485 },
3722    { 0x8953, 493 },
3723    { 0x8960, 470 },
3724    { 0x8961, 478 },
3725    { 0x8962, 486 },
3726    { 0x8963, 494 },
3727    { 0x8964, 499 },
3728    { 0x8965, 503 },
3729    { 0x8966, 507 },
3730    { 0x8967, 511 },
3731    { 0x8970, 471 },
3732    { 0x8971, 479 },
3733    { 0x8972, 487 },
3734    { 0x8973, 495 },
3735    { 0x8980, 512 },
3736    { 0x8981, 520 },
3737    { 0x8982, 528 },
3738    { 0x898A, 529 },
3739    { 0x8990, 513 },
3740    { 0x8991, 521 },
3741    { 0x8992, 530 },
3742    { 0x899A, 531 },
3743    { 0x89A0, 514 },
3744    { 0x89A1, 522 },
3745    { 0x89B0, 515 },
3746    { 0x89B1, 523 },
3747    { 0x89C0, 516 },
3748    { 0x89C1, 524 },
3749    { 0x89D0, 517 },
3750    { 0x89D1, 525 },
3751    { 0x89E0, 518 },
3752    { 0x89E1, 526 },
3753    { 0x89F0, 519 },
3754    { 0x89F1, 527 },
3755    { 0x8B84, 532 },
3756    { 0x8B97, 74 },
3757    { 0x8B9F, 75 },
3758    { 0x8BA7, 76 },
3759    { 0x8BAF, 77 },
3760    { 0x8BB7, 78 },
3761    { 0x8BBF, 79 },
3762    { 0x8BC6, 533 },
3763    { 0x8BC7, 80 },
3764    { 0x8BCE, 534 },
3765    { 0x8BCF, 81 },
3766    { 0x8BD6, 69 },
3767    { 0x8BD7, 82 },
3768    { 0x8BDE, 70 },
3769    { 0x8BDF, 83 },
3770    { 0x8BE6, 104 },
3771    { 0x8BE7, 84 },
3772    { 0x8BEE, 71 },
3773    { 0x8BEF, 85 },
3774    { 0x8BF6, 72 },
3775    { 0x8BF7, 86 },
3776    { 0x8BFE, 73 },
3777    { 0x8BFF, 87 },
3778    { 0x9000, 113 },
3779    { 0x9080, 183 },
3780    { 0x9808, 0 },
3781    { 0x9820, 116 },
3782    { 0x9828, 1 },
3783    { 0x9828, 100 },
3784    { 0xA038, 118 },
3785    { 0xC000, 7 },
3786    { 0xC005, 12 },
3787    { 0xC006, 13 },
3788    { 0xC008, 16 },
3789    { 0xC009, 17 },
3790    { 0xC00A, 18 },
3791    { 0xC00B, 19 },
3792    { 0xC00C, 20 },
3793    { 0xC00D, 21 },
3794    { 0xC00E, 22 },
3795    { 0xC00F, 23 },
3796    { 0xC010, 24 },
3797    { 0xC011, 25 },
3798    { 0xC012, 26 },
3799    { 0xC013, 27 },
3800    { 0xC014, 28 },
3801    { 0xC015, 29 },
3802    { 0xC016, 51 },
3803    { 0xC017, 30 },
3804    { 0xC018, 42 },
3805    { 0xC019, 43 },
3806    { 0xC01A, 44 },
3807    { 0xC020, 31 },
3808    { 0xC021, 32 },
3809    { 0xC024, 96 },
3810    { 0xC028, 33 },
3811    { 0xC029, 34 },
3812    { 0xC02C, 35 },
3813    { 0xC02D, 36 },
3814    { 0xC030, 37 },
3815    { 0xC031, 38 },
3816    { 0xC038, 39 },
3817    { 0xC039, 40 },
3818    { 0xC03A, 41 },
3819    { 0xC080, 192 },
3820    { 0xC081, 195 },
3821    { 0xC082, 191 },
3822    { 0xC090, 732 },
3823    { 0xC091, 727 },
3824    { 0xC100, 207 },
3825    { 0xC101, 210 },
3826    { 0xC102, 211 },
3827    { 0xC108, 638 },
3828    { 0xC109, 639 },
3829    { 0xC10A, 640 },
3830    { 0xC10B, 641 },
3831    { 0xC110, 642 },
3832    { 0xC111, 643 },
3833    { 0xC112, 644 },
3834    { 0xC113, 645 },
3835    { 0xC118, 646 },
3836    { 0xC119, 647 },
3837    { 0xC200, 217 },
3838    { 0xC201, 220 },
3839    { 0xC208, 223 },
3840    { 0xC210, 226 },
3841    { 0xC212, 229 },
3842    { 0xC213, 583 },
3843    { 0xC214, 615 },
3844    { 0xC230, 537 },
3845    { 0xC288, 239 },
3846    { 0xC289, 242 },
3847    { 0xC290, 245 },
3848    { 0xC298, 98 },
3849    { 0xC299, 629 },
3850    { 0xC2A0, 99 },
3851    { 0xC2A1, 630 },
3852    { 0xC2A2, 631 },
3853    { 0xC2A3, 632 },
3854    { 0xC2A4, 662 },
3855    { 0xC2A5, 657 },
3856    { 0xC2A6, 658 },
3857    { 0xC2A8, 633 },
3858    { 0xC2A9, 634 },
3859    { 0xC2AA, 660 },
3860    { 0xC2AB, 661 },
3861    { 0xC2AF, 659 },
3862    { 0xC300, 249 },
3863    { 0xC3A0, 253 },
3864    { 0xC4C8, 622 },
3865    { 0xC4CA, 623 },
3866    { 0xC4CB, 624 },
3867    { 0xC4CC, 625 },
3868    { 0xC4CD, 626 },
3869    { 0xC4CE, 627 },
3870    { 0xC4CF, 628 },
3871    { 0xC4D0, 616 },
3872    { 0xC4D1, 617 },
3873    { 0xC4D3, 618 },
3874    { 0xC4D7, 619 },
3875    { 0xC4F1, 263 },
3876    { 0xC4F2, 264 },
3877    { 0xC510, 266 },
3878    { 0xC518, 269 },
3879    { 0xC520, 584 },
3880    { 0xC521, 585 },
3881    { 0xC522, 586 },
3882    { 0xC523, 587 },
3883    { 0xC524, 678 },
3884    { 0xC527, 97 },
3885    { 0xC528, 664 },
3886    { 0xC529, 663 },
3887    { 0xC600, 272 },
3888    { 0xC601, 45 },
3889    { 0xC602, 275 },
3890    { 0xC608, 48 },
3891    { 0xC609, 635 },
3892    { 0xC640, 89 },
3893    { 0xC641, 106 },
3894    { 0xC642, 91 },
3895    { 0xC643, 536 },
3896    { 0xC644, 547 },
3897    { 0xC645, 548 },
3898    { 0xC646, 549 },
3899    { 0xC647, 550 },
3900    { 0xC648, 551 },
3901    { 0xC649, 552 },
3902    { 0xC64A, 553 },
3903    { 0xC64B, 554 },
3904    { 0xC659, 107 },
3905    { 0xC65B, 92 },
3906    { 0xC65D, 108 },
3907    { 0xC65E, 109 },
3908    { 0xC65F, 110 },
3909    { 0xC660, 88 },
3910    { 0xC661, 105 },
3911    { 0xC662, 90 },
3912    { 0xC663, 535 },
3913    { 0xC664, 538 },
3914    { 0xC665, 540 },
3915    { 0xC666, 543 },
3916    { 0xC667, 544 },
3917    { 0xC668, 546 },
3918    { 0xC681, 278 },
3919    { 0xC684, 283 },
3920    { 0xC708, 286 },
3921    { 0xC800, 8 },
3922    { 0xC801, 10 },
3923    { 0xC802, 9 },
3924    { 0xC807, 14 },
3925    { 0xD000, 188 },
3926    { 0xD801, 11 },
3927    { 0xD807, 15 },
3928    { 0xDA10, 227 },
3929    { 0xDA11, 228 },
3930    { 0xDA15, 730 },
3931    { 0xDA20, 234 },
3932    { 0xDA21, 235 },
3933    { 0xDA28, 236 },
3934    { 0xDA29, 237 },
3935    { 0xDCE0, 254 },
3936    { 0xDCE1, 255 },
3937    { 0xDCE2, 256 },
3938    { 0xDCE3, 257 },
3939    { 0xDCE4, 102 },
3940    { 0xDCE5, 258 },
3941    { 0xDCE6, 5 },
3942    { 0xDCE7, 6 },
3943    { 0xDCE8, 259 },
3944    { 0xDCE9, 260 },
3945    { 0xDCEA, 261 },
3946    { 0xDCF0, 262 },
3947    { 0xDCF3, 265 },
3948    { 0xDE82, 279 },
3949    { 0xDE83, 282 },
3950    { 0xDE90, 679 },
3951    { 0xDE91, 680 },
3952    { 0xDE92, 681 },
3953    { 0xDE93, 682 },
3954    { 0xDE94, 683 },
3955    { 0xDE95, 684 },
3956    { 0xDE98, 693 },
3957    { 0xDE99, 694 },
3958    { 0xDEA0, 685 },
3959    { 0xDEA1, 686 },
3960    { 0xDEA2, 687 },
3961    { 0xDEA3, 688 },
3962    { 0xDEB0, 689 },
3963    { 0xDEB1, 690 },
3964    { 0xDEB2, 691 },
3965    { 0xDEB3, 692 },
3966    { 0xDEE0, 695 },
3967    { 0xDEE1, 696 },
3968    { 0xDEE2, 697 },
3969    { 0xDEE3, 698 },
3970    { 0xDEE4, 699 },
3971    { 0xDEE5, 700 },
3972    { 0xDEE6, 701 },
3973    { 0xDEE7, 702 },
3974    { 0xDEE8, 703 },
3975    { 0xDEE9, 704 },
3976    { 0xDEEA, 705 },
3977    { 0xDEEB, 706 },
3978    { 0xDEEC, 707 },
3979    { 0xDEED, 708 },
3980    { 0xDEEE, 709 },
3981    { 0xDEEF, 710 },
3982    { 0xDEF0, 711 },
3983    { 0xDEF1, 712 },
3984    { 0xDEF2, 713 },
3985    { 0xDEF3, 714 },
3986    { 0xDEF4, 715 },
3987    { 0xDEF5, 716 },
3988    { 0xDEF6, 717 },
3989    { 0xDEF7, 718 },
3990    { 0xDEF8, 719 },
3991    { 0xDEF9, 720 },
3992    { 0xDEFA, 721 },
3993    { 0xDEFB, 722 },
3994    { 0xDEFC, 723 },
3995    { 0xDEFD, 724 },
3996    { 0xDEFE, 725 },
3997    { 0xDEFF, 726 },
3998    { 0xDF00, 284 },
3999    { 0xDF01, 49 },
4000    { 0xDF02, 50 },
4001    { 0xDF10, 288 },
4002    { 0xDF11, 291 },
4003    { 0xDF12, 294 },
4004    { 0xDF18, 297 },
4005    { 0xDF19, 298 },
4006    { 0xDF1A, 299 },
4007    { 0xDF40, 300 },
4008    { 0xDF41, 301 },
4009    { 0xDF42, 302 },
4010    { 0xDF43, 303 },
4011    { 0xDF44, 304 },
4012    { 0xDF45, 305 },
4013    { 0xDF46, 306 },
4014    { 0xDF47, 307 },
4015    { 0xDF48, 308 },
4016    { 0xDF49, 309 },
4017    { 0xDF4A, 310 },
4018    { 0xDF4B, 311 },
4019    { 0xDF4C, 312 },
4020    { 0xDF4D, 313 },
4021    { 0xDF4E, 314 },
4022    { 0xDF4F, 315 },
4023    { 0xDF50, 316 },
4024    { 0xDF51, 317 },
4025    { 0xDF52, 318 },
4026    { 0xDF53, 319 },
4027    { 0xDF54, 320 },
4028    { 0xDF55, 321 },
4029    { 0xDF56, 322 },
4030    { 0xDF57, 323 },
4031    { 0xDF58, 324 },
4032    { 0xDF59, 325 },
4033    { 0xDF5A, 326 },
4034    { 0xDF5B, 327 },
4035    { 0xDF5C, 328 },
4036    { 0xDF5D, 329 },
4037    { 0xDF5E, 330 },
4038    { 0xDF60, 332 },
4039    { 0xDF61, 333 },
4040    { 0xDF62, 334 },
4041    { 0xDF63, 335 },
4042    { 0xDF64, 336 },
4043    { 0xDF65, 337 },
4044    { 0xDF66, 338 },
4045    { 0xDF67, 339 },
4046    { 0xDF68, 340 },
4047    { 0xDF69, 341 },
4048    { 0xDF6A, 342 },
4049    { 0xDF6B, 343 },
4050    { 0xDF6C, 344 },
4051    { 0xDF6D, 345 },
4052    { 0xDF6E, 346 },
4053    { 0xDF6F, 347 },
4054    { 0xDF70, 348 },
4055    { 0xDF71, 349 },
4056    { 0xDF72, 350 },
4057    { 0xDF73, 351 },
4058    { 0xDF74, 352 },
4059    { 0xDF75, 353 },
4060    { 0xDF76, 354 },
4061    { 0xDF77, 355 },
4062    { 0xDF78, 356 },
4063    { 0xDF79, 357 },
4064    { 0xDF7A, 358 },
4065    { 0xDF7B, 359 },
4066    { 0xDF7C, 360 },
4067    { 0xDF7D, 361 },
4068    { 0xDF7E, 362 },
4069    { 0xDF7F, 331 },
4070    { 0xE000, 189 },
4071    { 0xE005, 190 },
4072    { 0xE080, 193 },
4073    { 0xE081, 196 },
4074    { 0xE088, 198 },
4075    { 0xE089, 200 },
4076    { 0xE08A, 202 },
4077    { 0xE08B, 204 },
4078    { 0xE08F, 205 },
4079    { 0xE090, 733 },
4080    { 0xE091, 728 },
4081    { 0xE099, 656 },
4082    { 0xE100, 208 },
4083    { 0xE101, 588 },
4084    { 0xE102, 212 },
4085    { 0xE108, 214 },
4086    { 0xE10A, 215 },
4087    { 0xE110, 731 },
4088    { 0xE130, 649 },
4089    { 0xE132, 648 },
4090    { 0xE180, 216 },
4091    { 0xE200, 218 },
4092    { 0xE201, 221 },
4093    { 0xE208, 224 },
4094    { 0xE218, 230 },
4095    { 0xE219, 231 },
4096    { 0xE21A, 232 },
4097    { 0xE21B, 233 },
4098    { 0xE281, 238 },
4099    { 0xE288, 240 },
4100    { 0xE289, 243 },
4101    { 0xE290, 246 },
4102    { 0xE293, 637 },
4103    { 0xE298, 248 },
4104    { 0xE300, 250 },
4105    { 0xE304, 252 },
4106    { 0xE4C8, 620 },
4107    { 0xE510, 267 },
4108    { 0xE518, 270 },
4109    { 0xE520, 668 },
4110    { 0xE521, 669 },
4111    { 0xE528, 665 },
4112    { 0xE530, 670 },
4113    { 0xE531, 671 },
4114    { 0xE532, 672 },
4115    { 0xE533, 673 },
4116    { 0xE534, 674 },
4117    { 0xE535, 675 },
4118    { 0xE536, 676 },
4119    { 0xE537, 677 },
4120    { 0xE600, 273 },
4121    { 0xE601, 46 },
4122    { 0xE602, 276 },
4123    { 0xE609, 636 },
4124    { 0xE640, 555 },
4125    { 0xE641, 556 },
4126    { 0xE642, 557 },
4127    { 0xE643, 558 },
4128    { 0xE648, 559 },
4129    { 0xE649, 560 },
4130    { 0xE64A, 561 },
4131    { 0xE64B, 562 },
4132    { 0xE64C, 566 },
4133    { 0xE64D, 541 },
4134    { 0xE658, 563 },
4135    { 0xE659, 93 },
4136    { 0xE65A, 564 },
4137    { 0xE65B, 94 },
4138    { 0xE65D, 95 },
4139    { 0xE65F, 565 },
4140    { 0xE660, 567 },
4141    { 0xE661, 568 },
4142    { 0xE662, 569 },
4143    { 0xE663, 570 },
4144    { 0xE664, 571 },
4145    { 0xE665, 572 },
4146    { 0xE666, 573 },
4147    { 0xE667, 574 },
4148    { 0xE668, 575 },
4149    { 0xE669, 576 },
4150    { 0xE66A, 577 },
4151    { 0xE66B, 578 },
4152    { 0xE66C, 579 },
4153    { 0xE66D, 580 },
4154    { 0xE66E, 581 },
4155    { 0xE66F, 582 },
4156    { 0xE681, 589 },
4157    { 0xE682, 280 },
4158    { 0xE703, 285 },
4159    { 0xE708, 287 },
4160    { 0xE710, 289 },
4161    { 0xE711, 292 },
4162    { 0xE712, 295 },
4163    { 0xE718, 590 },
4164    { 0xE719, 592 },
4165    { 0xE71A, 591 },
4166    { 0xE720, 650 },
4167    { 0xE721, 652 },
4168    { 0xE722, 651 },
4169    { 0xE728, 653 },
4170    { 0xE729, 655 },
4171    { 0xE72A, 654 },
4172    { 0xE880, 593 },
4173    { 0xE882, 594 },
4174    { 0xE890, 735 },
4175    { 0xE891, 729 },
4176    { 0xE900, 595 },
4177    { 0xE901, 596 },
4178    { 0xE902, 597 },
4179    { 0xEA00, 613 },
4180    { 0xEA01, 614 },
4181    { 0xEA88, 598 },
4182    { 0xEA89, 599 },
4183    { 0xEA90, 600 },
4184    { 0xEB00, 601 },
4185    { 0xECC8, 621 },
4186    { 0xED10, 602 },
4187    { 0xED18, 603 },
4188    { 0xED28, 667 },
4189    { 0xEE00, 604 },
4190    { 0xEE81, 605 },
4191    { 0xEF08, 606 },
4192    { 0xEF10, 607 },
4193    { 0xEF11, 608 },
4194    { 0xEF12, 609 },
4195    { 0xEF18, 610 },
4196    { 0xEF19, 611 },
4197    { 0xEF1A, 612 },
4198    { 0xF080, 194 },
4199    { 0xF081, 197 },
4200    { 0xF088, 199 },
4201    { 0xF089, 201 },
4202    { 0xF08A, 203 },
4203    { 0xF090, 734 },
4204    { 0xF099, 206 },
4205    { 0xF100, 209 },
4206    { 0xF102, 213 },
4207    { 0xF200, 219 },
4208    { 0xF201, 222 },
4209    { 0xF208, 225 },
4210    { 0xF288, 241 },
4211    { 0xF289, 244 },
4212    { 0xF290, 247 },
4213    { 0xF300, 251 },
4214    { 0xF510, 268 },
4215    { 0xF518, 271 },
4216    { 0xF528, 666 },
4217    { 0xF600, 274 },
4218    { 0xF601, 47 },
4219    { 0xF602, 277 },
4220    { 0xF664, 539 },
4221    { 0xF665, 542 },
4222    { 0xF667, 545 },
4223    { 0xF682, 281 },
4224    { 0xFF10, 290 },
4225    { 0xFF11, 293 },
4226    { 0xFF12, 296 },
4227    { 0xFF90, 736 },
4228  };
4229
4230  struct KeyType {
4231    uint16_t Encoding;
4232  };
4233  KeyType Key = { Encoding };
4234  auto Table = makeArrayRef(Index);
4235  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
4236    [](const IndexType &LHS, const KeyType &RHS) {
4237      if (LHS.Encoding < RHS.Encoding)
4238        return true;
4239      if (LHS.Encoding > RHS.Encoding)
4240        return false;
4241      return false;
4242    });
4243
4244  if (Idx == Table.end() ||
4245      Key.Encoding != Idx->Encoding)
4246    return nullptr;
4247  return &SysRegsList[Idx->_index];
4248}
4249#endif
4250
4251#ifdef GET_TLBI_DECL
4252const TLBI *lookupTLBIByName(StringRef Name);
4253const TLBI *lookupTLBIByEncoding(uint16_t Encoding);
4254#endif
4255
4256#ifdef GET_TLBI_IMPL
4257const TLBI TLBIsList[] = {
4258  { "IPAS2E1IS", 0x2401, true,  {}  }, // 0
4259  { "IPAS2LE1IS", 0x2405, true,  {}  }, // 1
4260  { "VMALLE1IS", 0x418, false,  {}  }, // 2
4261  { "ALLE2IS", 0x2418, false,  {}  }, // 3
4262  { "ALLE3IS", 0x3418, false,  {}  }, // 4
4263  { "VAE1IS", 0x419, true,  {}  }, // 5
4264  { "VAE2IS", 0x2419, true,  {}  }, // 6
4265  { "VAE3IS", 0x3419, true,  {}  }, // 7
4266  { "ASIDE1IS", 0x41A, true,  {}  }, // 8
4267  { "VAAE1IS", 0x41B, true,  {}  }, // 9
4268  { "ALLE1IS", 0x241C, false,  {}  }, // 10
4269  { "VALE1IS", 0x41D, true,  {}  }, // 11
4270  { "VALE2IS", 0x241D, true,  {}  }, // 12
4271  { "VALE3IS", 0x341D, true,  {}  }, // 13
4272  { "VMALLS12E1IS", 0x241E, false,  {}  }, // 14
4273  { "VAALE1IS", 0x41F, true,  {}  }, // 15
4274  { "IPAS2E1", 0x2421, true,  {}  }, // 16
4275  { "IPAS2LE1", 0x2425, true,  {}  }, // 17
4276  { "VMALLE1", 0x438, false,  {}  }, // 18
4277  { "ALLE2", 0x2438, false,  {}  }, // 19
4278  { "ALLE3", 0x3438, false,  {}  }, // 20
4279  { "VAE1", 0x439, true,  {}  }, // 21
4280  { "VAE2", 0x2439, true,  {}  }, // 22
4281  { "VAE3", 0x3439, true,  {}  }, // 23
4282  { "ASIDE1", 0x43A, true,  {}  }, // 24
4283  { "VAAE1", 0x43B, true,  {}  }, // 25
4284  { "ALLE1", 0x243C, false,  {}  }, // 26
4285  { "VALE1", 0x43D, true,  {}  }, // 27
4286  { "VALE2", 0x243D, true,  {}  }, // 28
4287  { "VALE3", 0x343D, true,  {}  }, // 29
4288  { "VMALLS12E1", 0x243E, false,  {}  }, // 30
4289  { "VAALE1", 0x43F, true,  {}  }, // 31
4290  { "VMALLE1OS", 0x408, false,  {AArch64::HasV8_4aOps}  }, // 32
4291  { "VAE1OS", 0x409, true,  {AArch64::HasV8_4aOps}  }, // 33
4292  { "ASIDE1OS", 0x40A, true,  {AArch64::HasV8_4aOps}  }, // 34
4293  { "VAAE1OS", 0x40B, true,  {AArch64::HasV8_4aOps}  }, // 35
4294  { "VALE1OS", 0x40D, true,  {AArch64::HasV8_4aOps}  }, // 36
4295  { "VAALE1OS", 0x40F, true,  {AArch64::HasV8_4aOps}  }, // 37
4296  { "IPAS2E1OS", 0x2420, true,  {AArch64::HasV8_4aOps}  }, // 38
4297  { "IPAS2LE1OS", 0x2424, true,  {AArch64::HasV8_4aOps}  }, // 39
4298  { "VAE2OS", 0x2409, true,  {AArch64::HasV8_4aOps}  }, // 40
4299  { "VALE2OS", 0x240D, true,  {AArch64::HasV8_4aOps}  }, // 41
4300  { "VMALLS12E1OS", 0x240E, false,  {AArch64::HasV8_4aOps}  }, // 42
4301  { "VAE3OS", 0x3409, true,  {AArch64::HasV8_4aOps}  }, // 43
4302  { "VALE3OS", 0x340D, true,  {AArch64::HasV8_4aOps}  }, // 44
4303  { "ALLE2OS", 0x2408, false,  {AArch64::HasV8_4aOps}  }, // 45
4304  { "ALLE1OS", 0x240C, false,  {AArch64::HasV8_4aOps}  }, // 46
4305  { "ALLE3OS", 0x3408, false,  {AArch64::HasV8_4aOps}  }, // 47
4306  { "RVAE1", 0x431, true,  {AArch64::HasV8_4aOps}  }, // 48
4307  { "RVAAE1", 0x433, true,  {AArch64::HasV8_4aOps}  }, // 49
4308  { "RVALE1", 0x435, true,  {AArch64::HasV8_4aOps}  }, // 50
4309  { "RVAALE1", 0x437, true,  {AArch64::HasV8_4aOps}  }, // 51
4310  { "RVAE1IS", 0x411, true,  {AArch64::HasV8_4aOps}  }, // 52
4311  { "RVAAE1IS", 0x413, true,  {AArch64::HasV8_4aOps}  }, // 53
4312  { "RVALE1IS", 0x415, true,  {AArch64::HasV8_4aOps}  }, // 54
4313  { "RVAALE1IS", 0x417, true,  {AArch64::HasV8_4aOps}  }, // 55
4314  { "RVAE1OS", 0x429, true,  {AArch64::HasV8_4aOps}  }, // 56
4315  { "RVAAE1OS", 0x42B, true,  {AArch64::HasV8_4aOps}  }, // 57
4316  { "RVALE1OS", 0x42D, true,  {AArch64::HasV8_4aOps}  }, // 58
4317  { "RVAALE1OS", 0x42F, true,  {AArch64::HasV8_4aOps}  }, // 59
4318  { "RIPAS2E1IS", 0x2402, true,  {AArch64::HasV8_4aOps}  }, // 60
4319  { "RIPAS2LE1IS", 0x2406, true,  {AArch64::HasV8_4aOps}  }, // 61
4320  { "RIPAS2E1", 0x2422, true,  {AArch64::HasV8_4aOps}  }, // 62
4321  { "RIPAS2LE1", 0x2426, true,  {AArch64::HasV8_4aOps}  }, // 63
4322  { "RIPAS2E1OS", 0x2423, true,  {AArch64::HasV8_4aOps}  }, // 64
4323  { "RIPAS2LE1OS", 0x2427, true,  {AArch64::HasV8_4aOps}  }, // 65
4324  { "RVAE2", 0x2431, true,  {AArch64::HasV8_4aOps}  }, // 66
4325  { "RVALE2", 0x2435, true,  {AArch64::HasV8_4aOps}  }, // 67
4326  { "RVAE2IS", 0x2411, true,  {AArch64::HasV8_4aOps}  }, // 68
4327  { "RVALE2IS", 0x2415, true,  {AArch64::HasV8_4aOps}  }, // 69
4328  { "RVAE2OS", 0x2429, true,  {AArch64::HasV8_4aOps}  }, // 70
4329  { "RVALE2OS", 0x242D, true,  {AArch64::HasV8_4aOps}  }, // 71
4330  { "RVAE3", 0x3431, true,  {AArch64::HasV8_4aOps}  }, // 72
4331  { "RVALE3", 0x3435, true,  {AArch64::HasV8_4aOps}  }, // 73
4332  { "RVAE3IS", 0x3411, true,  {AArch64::HasV8_4aOps}  }, // 74
4333  { "RVALE3IS", 0x3415, true,  {AArch64::HasV8_4aOps}  }, // 75
4334  { "RVAE3OS", 0x3429, true,  {AArch64::HasV8_4aOps}  }, // 76
4335  { "RVALE3OS", 0x342D, true,  {AArch64::HasV8_4aOps}  }, // 77
4336 };
4337
4338const TLBI *lookupTLBIByName(StringRef Name) {
4339  struct IndexType {
4340    const char * Name;
4341    unsigned _index;
4342  };
4343  static const struct IndexType Index[] = {
4344    { "ALLE1", 26 },
4345    { "ALLE1IS", 10 },
4346    { "ALLE1OS", 46 },
4347    { "ALLE2", 19 },
4348    { "ALLE2IS", 3 },
4349    { "ALLE2OS", 45 },
4350    { "ALLE3", 20 },
4351    { "ALLE3IS", 4 },
4352    { "ALLE3OS", 47 },
4353    { "ASIDE1", 24 },
4354    { "ASIDE1IS", 8 },
4355    { "ASIDE1OS", 34 },
4356    { "IPAS2E1", 16 },
4357    { "IPAS2E1IS", 0 },
4358    { "IPAS2E1OS", 38 },
4359    { "IPAS2LE1", 17 },
4360    { "IPAS2LE1IS", 1 },
4361    { "IPAS2LE1OS", 39 },
4362    { "RIPAS2E1", 62 },
4363    { "RIPAS2E1IS", 60 },
4364    { "RIPAS2E1OS", 64 },
4365    { "RIPAS2LE1", 63 },
4366    { "RIPAS2LE1IS", 61 },
4367    { "RIPAS2LE1OS", 65 },
4368    { "RVAAE1", 49 },
4369    { "RVAAE1IS", 53 },
4370    { "RVAAE1OS", 57 },
4371    { "RVAALE1", 51 },
4372    { "RVAALE1IS", 55 },
4373    { "RVAALE1OS", 59 },
4374    { "RVAE1", 48 },
4375    { "RVAE1IS", 52 },
4376    { "RVAE1OS", 56 },
4377    { "RVAE2", 66 },
4378    { "RVAE2IS", 68 },
4379    { "RVAE2OS", 70 },
4380    { "RVAE3", 72 },
4381    { "RVAE3IS", 74 },
4382    { "RVAE3OS", 76 },
4383    { "RVALE1", 50 },
4384    { "RVALE1IS", 54 },
4385    { "RVALE1OS", 58 },
4386    { "RVALE2", 67 },
4387    { "RVALE2IS", 69 },
4388    { "RVALE2OS", 71 },
4389    { "RVALE3", 73 },
4390    { "RVALE3IS", 75 },
4391    { "RVALE3OS", 77 },
4392    { "VAAE1", 25 },
4393    { "VAAE1IS", 9 },
4394    { "VAAE1OS", 35 },
4395    { "VAALE1", 31 },
4396    { "VAALE1IS", 15 },
4397    { "VAALE1OS", 37 },
4398    { "VAE1", 21 },
4399    { "VAE1IS", 5 },
4400    { "VAE1OS", 33 },
4401    { "VAE2", 22 },
4402    { "VAE2IS", 6 },
4403    { "VAE2OS", 40 },
4404    { "VAE3", 23 },
4405    { "VAE3IS", 7 },
4406    { "VAE3OS", 43 },
4407    { "VALE1", 27 },
4408    { "VALE1IS", 11 },
4409    { "VALE1OS", 36 },
4410    { "VALE2", 28 },
4411    { "VALE2IS", 12 },
4412    { "VALE2OS", 41 },
4413    { "VALE3", 29 },
4414    { "VALE3IS", 13 },
4415    { "VALE3OS", 44 },
4416    { "VMALLE1", 18 },
4417    { "VMALLE1IS", 2 },
4418    { "VMALLE1OS", 32 },
4419    { "VMALLS12E1", 30 },
4420    { "VMALLS12E1IS", 14 },
4421    { "VMALLS12E1OS", 42 },
4422  };
4423
4424  struct KeyType {
4425    std::string Name;
4426  };
4427  KeyType Key = { Name.upper() };
4428  auto Table = makeArrayRef(Index);
4429  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
4430    [](const IndexType &LHS, const KeyType &RHS) {
4431      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
4432      if (CmpName < 0) return true;
4433      if (CmpName > 0) return false;
4434      return false;
4435    });
4436
4437  if (Idx == Table.end() ||
4438      Key.Name != Idx->Name)
4439    return nullptr;
4440  return &TLBIsList[Idx->_index];
4441}
4442
4443const TLBI *lookupTLBIByEncoding(uint16_t Encoding) {
4444  struct IndexType {
4445    uint16_t Encoding;
4446    unsigned _index;
4447  };
4448  static const struct IndexType Index[] = {
4449    { 0x408, 32 },
4450    { 0x409, 33 },
4451    { 0x40A, 34 },
4452    { 0x40B, 35 },
4453    { 0x40D, 36 },
4454    { 0x40F, 37 },
4455    { 0x411, 52 },
4456    { 0x413, 53 },
4457    { 0x415, 54 },
4458    { 0x417, 55 },
4459    { 0x418, 2 },
4460    { 0x419, 5 },
4461    { 0x41A, 8 },
4462    { 0x41B, 9 },
4463    { 0x41D, 11 },
4464    { 0x41F, 15 },
4465    { 0x429, 56 },
4466    { 0x42B, 57 },
4467    { 0x42D, 58 },
4468    { 0x42F, 59 },
4469    { 0x431, 48 },
4470    { 0x433, 49 },
4471    { 0x435, 50 },
4472    { 0x437, 51 },
4473    { 0x438, 18 },
4474    { 0x439, 21 },
4475    { 0x43A, 24 },
4476    { 0x43B, 25 },
4477    { 0x43D, 27 },
4478    { 0x43F, 31 },
4479    { 0x2401, 0 },
4480    { 0x2402, 60 },
4481    { 0x2405, 1 },
4482    { 0x2406, 61 },
4483    { 0x2408, 45 },
4484    { 0x2409, 40 },
4485    { 0x240C, 46 },
4486    { 0x240D, 41 },
4487    { 0x240E, 42 },
4488    { 0x2411, 68 },
4489    { 0x2415, 69 },
4490    { 0x2418, 3 },
4491    { 0x2419, 6 },
4492    { 0x241C, 10 },
4493    { 0x241D, 12 },
4494    { 0x241E, 14 },
4495    { 0x2420, 38 },
4496    { 0x2421, 16 },
4497    { 0x2422, 62 },
4498    { 0x2423, 64 },
4499    { 0x2424, 39 },
4500    { 0x2425, 17 },
4501    { 0x2426, 63 },
4502    { 0x2427, 65 },
4503    { 0x2429, 70 },
4504    { 0x242D, 71 },
4505    { 0x2431, 66 },
4506    { 0x2435, 67 },
4507    { 0x2438, 19 },
4508    { 0x2439, 22 },
4509    { 0x243C, 26 },
4510    { 0x243D, 28 },
4511    { 0x243E, 30 },
4512    { 0x3408, 47 },
4513    { 0x3409, 43 },
4514    { 0x340D, 44 },
4515    { 0x3411, 74 },
4516    { 0x3415, 75 },
4517    { 0x3418, 4 },
4518    { 0x3419, 7 },
4519    { 0x341D, 13 },
4520    { 0x3429, 76 },
4521    { 0x342D, 77 },
4522    { 0x3431, 72 },
4523    { 0x3435, 73 },
4524    { 0x3438, 20 },
4525    { 0x3439, 23 },
4526    { 0x343D, 29 },
4527  };
4528
4529  struct KeyType {
4530    uint16_t Encoding;
4531  };
4532  KeyType Key = { Encoding };
4533  auto Table = makeArrayRef(Index);
4534  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
4535    [](const IndexType &LHS, const KeyType &RHS) {
4536      if (LHS.Encoding < RHS.Encoding)
4537        return true;
4538      if (LHS.Encoding > RHS.Encoding)
4539        return false;
4540      return false;
4541    });
4542
4543  if (Idx == Table.end() ||
4544      Key.Encoding != Idx->Encoding)
4545    return nullptr;
4546  return &TLBIsList[Idx->_index];
4547}
4548#endif
4549
4550#ifdef GET_TSB_DECL
4551const TSB *lookupTSBByName(StringRef Name);
4552const TSB *lookupTSBByEncoding(uint8_t Encoding);
4553#endif
4554
4555#ifdef GET_TSB_IMPL
4556const TSB TSBsList[] = {
4557  { "csync", 0x0,  {AArch64::HasV8_4aOps}  }, // 0
4558 };
4559
4560const TSB *lookupTSBByName(StringRef Name) {
4561  struct IndexType {
4562    const char * Name;
4563    unsigned _index;
4564  };
4565  static const struct IndexType Index[] = {
4566    { "CSYNC", 0 },
4567  };
4568
4569  struct KeyType {
4570    std::string Name;
4571  };
4572  KeyType Key = { Name.upper() };
4573  auto Table = makeArrayRef(Index);
4574  auto Idx = std::lower_bound(Table.begin(), Table.end(), Key,
4575    [](const IndexType &LHS, const KeyType &RHS) {
4576      int CmpName = StringRef(LHS.Name).compare(RHS.Name);
4577      if (CmpName < 0) return true;
4578      if (CmpName > 0) return false;
4579      return false;
4580    });
4581
4582  if (Idx == Table.end() ||
4583      Key.Name != Idx->Name)
4584    return nullptr;
4585  return &TSBsList[Idx->_index];
4586}
4587
4588const TSB *lookupTSBByEncoding(uint8_t Encoding) {
4589  struct IndexType {
4590    uint8_t Encoding;
4591    unsigned _index;
4592  };
4593  static const struct IndexType Index[] = {
4594    { 0x0, 0 },
4595  };
4596
4597  auto Table = makeArrayRef(Index);
4598  size_t Idx = Encoding;
4599  return Idx >= Table.size() ? nullptr : &TSBsList[Table[Idx]._index];
4600}
4601#endif
4602
4603#undef GET_AT_DECL
4604#undef GET_AT_IMPL
4605#undef GET_DB_DECL
4606#undef GET_DB_IMPL
4607#undef GET_DC_DECL
4608#undef GET_DC_IMPL
4609#undef GET_EXACTFPIMM_DECL
4610#undef GET_EXACTFPIMM_IMPL
4611#undef GET_IC_DECL
4612#undef GET_IC_IMPL
4613#undef GET_ISB_DECL
4614#undef GET_ISB_IMPL
4615#undef GET_PRFM_DECL
4616#undef GET_PRFM_IMPL
4617#undef GET_PSB_DECL
4618#undef GET_PSB_IMPL
4619#undef GET_PSTATE_DECL
4620#undef GET_PSTATE_IMPL
4621#undef GET_SVEPREDPAT_DECL
4622#undef GET_SVEPREDPAT_IMPL
4623#undef GET_SVEPRFM_DECL
4624#undef GET_SVEPRFM_IMPL
4625#undef GET_SYSREG_DECL
4626#undef GET_SYSREG_IMPL
4627#undef GET_TLBI_DECL
4628#undef GET_TLBI_IMPL
4629#undef GET_TSB_DECL
4630#undef GET_TSB_IMPL
4631