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