/* Capstone Disassembly Engine, http://www.capstone-engine.org */
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */

static const AT ATsList[] = {
  { "s1e1r",  0x3C0 }, // 0
  { "s1e2r",  0x23C0 }, // 1
  { "s1e3r",  0x33C0 }, // 2
  { "s1e1w",  0x3C1 }, // 3
  { "s1e2w",  0x23C1 }, // 4
  { "s1e3w",  0x33C1 }, // 5
  { "s1e0r",  0x3C2 }, // 6
  { "s1e0w",  0x3C3 }, // 7
  { "s12e1r",  0x23C4 }, // 8
  { "s12e1w",  0x23C5 }, // 9
  { "s12e0r",  0x23C6 }, // 10
  { "s12e0w",  0x23C7 }, // 11
  { "s1e1rp",  0x3C8 }, // 12
  { "s1e1wp",  0x3C9 }, // 13
};

const AT *lookupATByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x3C0, 0 },
    { 0x3C1, 3 },
    { 0x3C2, 6 },
    { 0x3C3, 7 },
    { 0x3C8, 12 },
    { 0x3C9, 13 },
    { 0x23C0, 1 },
    { 0x23C1, 4 },
    { 0x23C4, 8 },
    { 0x23C5, 9 },
    { 0x23C6, 10 },
    { 0x23C7, 11 },
    { 0x33C0, 2 },
    { 0x33C1, 5 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &ATsList[Index[i].index];
}

static const DB DBsList[] = {
  { "oshld", 0x1 }, // 0
  { "oshst", 0x2 }, // 1
  { "osh", 0x3 }, // 2
  { "nshld", 0x5 }, // 3
  { "nshst", 0x6 }, // 4
  { "nsh", 0x7 }, // 5
  { "ishld", 0x9 }, // 6
  { "ishst", 0xA }, // 7
  { "ish", 0xB }, // 8
  { "ld", 0xD }, // 9
  { "st", 0xE }, // 10
  { "sy", 0xF }, // 11
};

const DB *lookupDBByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x1, 0 },
    { 0x2, 1 },
    { 0x3, 2 },
    { 0x5, 3 },
    { 0x6, 4 },
    { 0x7, 5 },
    { 0x9, 6 },
    { 0xA, 7 },
    { 0xB, 8 },
    { 0xD, 9 },
    { 0xE, 10 },
    { 0xF, 11 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &DBsList[Index[i].index];
}

static const DC DCsList[] = {
  { "zva",  0x1BA1 }, // 0
  { "ivac",  0x3B1 }, // 1
  { "isw",  0x3B2 }, // 2
  { "cvac",  0x1BD1 }, // 3
  { "csw",  0x3D2 }, // 4
  { "cvau",  0x1BD9 }, // 5
  { "civac",  0x1BF1 }, // 6
  { "cisw",  0x3F2 }, // 7
  { "cvap",  0x1BE1 }, // 8
};

const DC *lookupDCByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x3B1, 1 },
    { 0x3B2, 2 },
    { 0x3D2, 4 },
    { 0x3F2, 7 },
    { 0x1BA1, 0 },
    { 0x1BD1, 3 },
    { 0x1BD9, 5 },
    { 0x1BE1, 8 },
    { 0x1BF1, 6 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &DCsList[Index[i].index];
}

static const IC ICsList[] = {
  { "ialluis", 0x388, false }, // 0
  { "iallu", 0x3a8, false }, // 1
  { "ivau", 0x1ba9, true }, // 2
};

const IC *lookupICByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x388, 0 },
    { 0x3A8, 1 },
    { 0x1BA9, 2 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &ICsList[Index[i].index];
}

static const TLBI TLBIsList[] = {
  { "ipas2e1is",  0x2401,  true }, // 0
  { "ipas2le1is",  0x2405,  true }, // 1
  { "vmalle1is",  0x418,  false }, // 2
  { "alle2is",  0x2418,  false }, // 3
  { "alle3is",  0x3418,  false }, // 4
  { "vae1is",  0x419,  true }, // 5
  { "vae2is",  0x2419,  true }, // 6
  { "vae3is",  0x3419,  true }, // 7
  { "aside1is",  0x41A,  true }, // 8
  { "vaae1is",  0x41B,  true }, // 9
  { "alle1is",  0x241C,  false }, // 10
  { "vale1is",  0x41D,  true }, // 11
  { "vale2is",  0x241D,  true }, // 12
  { "vale3is",  0x341D,  true }, // 13
  { "vmalls12e1is",  0x241E,  false }, // 14
  { "vaale1is",  0x41F,  true }, // 15
  { "ipas2e1",  0x2421,  true }, // 16
  { "ipas2le1",  0x2425,  true }, // 17
  { "vmalle1",  0x438,  false }, // 18
  { "alle2",  0x2438,  false }, // 19
  { "alle3",  0x3438,  false }, // 20
  { "vae1",  0x439,  true }, // 21
  { "vae2",  0x2439,  true }, // 22
  { "vae3",  0x3439,  true }, // 23
  { "aside1",  0x43A,  true }, // 24
  { "vaae1",  0x43B,  true }, // 25
  { "alle1",  0x243C,  false }, // 26
  { "vale1",  0x43D,  true }, // 27
  { "vale2",  0x243D,  true }, // 28
  { "vale3",  0x343D,  true }, // 29
  { "vmalls12e1",  0x243E,  false }, // 30
  { "vaale1",  0x43F,  true }, // 31
  { "vmalle1os",  0x408,  false }, // 32
  { "vae1os",  0x409,  true }, // 33
  { "aside1os",  0x40A,  true }, // 34
  { "vaae1os",  0x40B,  true }, // 35
  { "vale1os",  0x40D,  true }, // 36
  { "vaale1os",  0x40F,  true }, // 37
  { "ipas2e1os",  0x2420,  true }, // 38
  { "ipas2le1os",  0x2424,  true }, // 39
  { "vae2os",  0x2409,  true }, // 40
  { "vale2os",  0x240D,  true }, // 41
  { "vmalls12e1os",  0x240E,  false }, // 42
  { "vae3os",  0x3409,  true }, // 43
  { "vale3os",  0x340D,  true }, // 44
  { "alle2os",  0x2408,  false }, // 45
  { "alle1os",  0x240C,  false }, // 46
  { "alle3os",  0x3408,  false }, // 47
  { "rvae1",  0x431,  true }, // 48
  { "rvaae1",  0x433,  true }, // 49
  { "rvale1",  0x435,  true }, // 50
  { "rvaale1",  0x437,  true }, // 51
  { "rvae1is",  0x411,  true }, // 52
  { "rvaae1is",  0x413,  true }, // 53
  { "rvale1is",  0x415,  true }, // 54
  { "rvaale1is",  0x417,  true }, // 55
  { "rvae1os",  0x429,  true }, // 56
  { "rvaae1os",  0x42B,  true }, // 57
  { "rvale1os",  0x42D,  true }, // 58
  { "rvaale1os",  0x42F,  true }, // 59
  { "ripas2e1is",  0x2402,  true }, // 60
  { "ripas2le1is",  0x2406,  true }, // 61
  { "ripas2e1",  0x2422,  true }, // 62
  { "ripas2le1",  0x2426,  true }, // 63
  { "ripas2e1os",  0x2423,  true }, // 64
  { "ripas2le1os",  0x2427,  true }, // 65
  { "rvae2",  0x2431,  true }, // 66
  { "rvale2",  0x2435,  true }, // 67
  { "rvae2is",  0x2411,  true }, // 68
  { "rvale2is",  0x2415,  true }, // 69
  { "rvae2os",  0x2429,  true }, // 70
  { "rvale2os",  0x242D,  true }, // 71
  { "rvae3",  0x3431,  true }, // 72
  { "rvale3",  0x3435,  true }, // 73
  { "rvae3is",  0x3411,  true }, // 74
  { "rvale3is",  0x3415,  true }, // 75
  { "rvae3os",  0x3429,  true }, // 76
  { "rvale3os",  0x342D,  true }, // 77
};

const TLBI *lookupTLBIByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x408, 32 },
    { 0x409, 33 },
    { 0x40A, 34 },
    { 0x40B, 35 },
    { 0x40D, 36 },
    { 0x40F, 37 },
    { 0x411, 52 },
    { 0x413, 53 },
    { 0x415, 54 },
    { 0x417, 55 },
    { 0x418, 2 },
    { 0x419, 5 },
    { 0x41A, 8 },
    { 0x41B, 9 },
    { 0x41D, 11 },
    { 0x41F, 15 },
    { 0x429, 56 },
    { 0x42B, 57 },
    { 0x42D, 58 },
    { 0x42F, 59 },
    { 0x431, 48 },
    { 0x433, 49 },
    { 0x435, 50 },
    { 0x437, 51 },
    { 0x438, 18 },
    { 0x439, 21 },
    { 0x43A, 24 },
    { 0x43B, 25 },
    { 0x43D, 27 },
    { 0x43F, 31 },
    { 0x2401, 0 },
    { 0x2402, 60 },
    { 0x2405, 1 },
    { 0x2406, 61 },
    { 0x2408, 45 },
    { 0x2409, 40 },
    { 0x240C, 46 },
    { 0x240D, 41 },
    { 0x240E, 42 },
    { 0x2411, 68 },
    { 0x2415, 69 },
    { 0x2418, 3 },
    { 0x2419, 6 },
    { 0x241C, 10 },
    { 0x241D, 12 },
    { 0x241E, 14 },
    { 0x2420, 38 },
    { 0x2421, 16 },
    { 0x2422, 62 },
    { 0x2423, 64 },
    { 0x2424, 39 },
    { 0x2425, 17 },
    { 0x2426, 63 },
    { 0x2427, 65 },
    { 0x2429, 70 },
    { 0x242D, 71 },
    { 0x2431, 66 },
    { 0x2435, 67 },
    { 0x2438, 19 },
    { 0x2439, 22 },
    { 0x243C, 26 },
    { 0x243D, 28 },
    { 0x243E, 30 },
    { 0x3408, 47 },
    { 0x3409, 43 },
    { 0x340D, 44 },
    { 0x3411, 74 },
    { 0x3415, 75 },
    { 0x3418, 4 },
    { 0x3419, 7 },
    { 0x341D, 13 },
    { 0x3429, 76 },
    { 0x342D, 77 },
    { 0x3431, 72 },
    { 0x3435, 73 },
    { 0x3438, 20 },
    { 0x3439, 23 },
    { 0x343D, 29 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &TLBIsList[Index[i].index];
}

static const SVEPRFM SVEPRFMsList[] = {
  { "pldl1keep",  0x0 }, // 0
  { "pldl1strm",  0x1 }, // 1
  { "pldl2keep",  0x2 }, // 2
  { "pldl2strm",  0x3 }, // 3
  { "pldl3keep",  0x4 }, // 4
  { "pldl3strm",  0x5 }, // 5
  { "pstl1keep",  0x8 }, // 6
  { "pstl1strm",  0x9 }, // 7
  { "pstl2keep",  0xA }, // 8
  { "pstl2strm",  0xB }, // 9
  { "pstl3keep",  0xC }, // 10
  { "pstl3strm",  0xD }, // 11
};

const SVEPRFM *lookupSVEPRFMByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x0, 0 },
    { 0x1, 1 },
    { 0x2, 2 },
    { 0x3, 3 },
    { 0x4, 4 },
    { 0x5, 5 },
    { 0x8, 6 },
    { 0x9, 7 },
    { 0xA, 8 },
    { 0xB, 9 },
    { 0xC, 10 },
    { 0xD, 11 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &SVEPRFMsList[Index[i].index];
}

static const PRFM PRFMsList[] = {
  { "pldl1keep", 0x0 }, // 0
  { "pldl1strm", 0x1 }, // 1
  { "pldl2keep", 0x2 }, // 2
  { "pldl2strm", 0x3 }, // 3
  { "pldl3keep", 0x4 }, // 4
  { "pldl3strm", 0x5 }, // 5
  { "plil1keep", 0x8 }, // 6
  { "plil1strm", 0x9 }, // 7
  { "plil2keep", 0xa }, // 8
  { "plil2strm", 0xb }, // 9
  { "plil3keep", 0xc }, // 10
  { "plil3strm", 0xd }, // 11
  { "pstl1keep", 0x10 }, // 12
  { "pstl1strm", 0x11 }, // 13
  { "pstl2keep", 0x12 }, // 14
  { "pstl2strm", 0x13 }, // 15
  { "pstl3keep", 0x14 }, // 16
  { "pstl3strm", 0x15 }, // 17
};

const PRFM *lookupPRFMByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x0, 0 },
    { 0x1, 1 },
    { 0x2, 2 },
    { 0x3, 3 },
    { 0x4, 4 },
    { 0x5, 5 },
    { 0x8, 6 },
    { 0x9, 7 },
    { 0xA, 8 },
    { 0xB, 9 },
    { 0xC, 10 },
    { 0xD, 11 },
    { 0x10, 12 },
    { 0x11, 13 },
    { 0x12, 14 },
    { 0x13, 15 },
    { 0x14, 16 },
    { 0x15, 17 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &PRFMsList[Index[i].index];
}

static const PSB PSBsList[] = {
  { "csync", 0x11 }, // 0
};

const PSB *AArch64PSBHint_lookupPSBByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x11, 0 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &PSBsList[Index[i].index];
}

static const ISB ISBsList[] = {
  { "sy", 0xf }, // 0
};

const ISB *lookupISBByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0xF, 0 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &ISBsList[Index[i].index];
}

static const TSB TSBsList[] = {
  { "csync",  0x0 }, // 0
};

const TSB *lookupTSBByEncoding(uint16_t Encoding)
{
  static const struct IndexType Index[] = {
    { 0x0, 0 },
  };

  if (Encoding >= ARR_SIZE(TSBsList))
    return NULL;
  else
    return &TSBsList[Index[Encoding].index];
}

static const SysReg SysRegsList[] = {
  { "mdccsr_el0",  0x9808,  true,  false }, // 0
  { "dbgdtrrx_el0",  0x9828,  true,  false }, // 1
  { "mdrar_el1",  0x8080,  true,  false }, // 2
  { "oslsr_el1",  0x808C,  true,  false }, // 3
  { "dbgauthstatus_el1",  0x83F6,  true,  false }, // 4
  { "pmceid0_el0",  0xDCE6,  true,  false }, // 5
  { "pmceid1_el0",  0xDCE7,  true,  false }, // 6
  { "midr_el1",  0xC000,  true,  false }, // 7
  { "ccsidr_el1",  0xC800,  true,  false }, // 8
  { "ccsidr2_el1",  0xC802,  true,  false }, // 9
  { "clidr_el1",  0xC801,  true,  false }, // 10
  { "ctr_el0",  0xD801,  true,  false }, // 11
  { "mpidr_el1",  0xC005,  true,  false }, // 12
  { "revidr_el1",  0xC006,  true,  false }, // 13
  { "aidr_el1",  0xC807,  true,  false }, // 14
  { "dczid_el0",  0xD807,  true,  false }, // 15
  { "id_pfr0_el1",  0xC008,  true,  false }, // 16
  { "id_pfr1_el1",  0xC009,  true,  false }, // 17
  { "id_dfr0_el1",  0xC00A,  true,  false }, // 18
  { "id_afr0_el1",  0xC00B,  true,  false }, // 19
  { "id_mmfr0_el1",  0xC00C,  true,  false }, // 20
  { "id_mmfr1_el1",  0xC00D,  true,  false }, // 21
  { "id_mmfr2_el1",  0xC00E,  true,  false }, // 22
  { "id_mmfr3_el1",  0xC00F,  true,  false }, // 23
  { "id_isar0_el1",  0xC010,  true,  false }, // 24
  { "id_isar1_el1",  0xC011,  true,  false }, // 25
  { "id_isar2_el1",  0xC012,  true,  false }, // 26
  { "id_isar3_el1",  0xC013,  true,  false }, // 27
  { "id_isar4_el1",  0xC014,  true,  false }, // 28
  { "id_isar5_el1",  0xC015,  true,  false }, // 29
  { "id_isar6_el1",  0xC017,  true,  false }, // 30
  { "id_aa64pfr0_el1",  0xC020,  true,  false }, // 31
  { "id_aa64pfr1_el1",  0xC021,  true,  false }, // 32
  { "id_aa64dfr0_el1",  0xC028,  true,  false }, // 33
  { "id_aa64dfr1_el1",  0xC029,  true,  false }, // 34
  { "id_aa64afr0_el1",  0xC02C,  true,  false }, // 35
  { "id_aa64afr1_el1",  0xC02D,  true,  false }, // 36
  { "id_aa64isar0_el1",  0xC030,  true,  false }, // 37
  { "id_aa64isar1_el1",  0xC031,  true,  false }, // 38
  { "id_aa64mmfr0_el1",  0xC038,  true,  false }, // 39
  { "id_aa64mmfr1_el1",  0xC039,  true,  false }, // 40
  { "id_aa64mmfr2_el1",  0xC03A,  true,  false }, // 41
  { "mvfr0_el1",  0xC018,  true,  false }, // 42
  { "mvfr1_el1",  0xC019,  true,  false }, // 43
  { "mvfr2_el1",  0xC01A,  true,  false }, // 44
  { "rvbar_el1",  0xC601,  true,  false }, // 45
  { "rvbar_el2",  0xE601,  true,  false }, // 46
  { "rvbar_el3",  0xF601,  true,  false }, // 47
  { "isr_el1",  0xC608,  true,  false }, // 48
  { "cntpct_el0",  0xDF01,  true,  false }, // 49
  { "cntvct_el0",  0xDF02,  true,  false }, // 50
  { "id_mmfr4_el1",  0xC016,  true,  false }, // 51
  { "trcstatr",  0x8818,  true,  false }, // 52
  { "trcidr8",  0x8806,  true,  false }, // 53
  { "trcidr9",  0x880E,  true,  false }, // 54
  { "trcidr10",  0x8816,  true,  false }, // 55
  { "trcidr11",  0x881E,  true,  false }, // 56
  { "trcidr12",  0x8826,  true,  false }, // 57
  { "trcidr13",  0x882E,  true,  false }, // 58
  { "trcidr0",  0x8847,  true,  false }, // 59
  { "trcidr1",  0x884F,  true,  false }, // 60
  { "trcidr2",  0x8857,  true,  false }, // 61
  { "trcidr3",  0x885F,  true,  false }, // 62
  { "trcidr4",  0x8867,  true,  false }, // 63
  { "trcidr5",  0x886F,  true,  false }, // 64
  { "trcidr6",  0x8877,  true,  false }, // 65
  { "trcidr7",  0x887F,  true,  false }, // 66
  { "trcoslsr",  0x888C,  true,  false }, // 67
  { "trcpdsr",  0x88AC,  true,  false }, // 68
  { "trcdevaff0",  0x8BD6,  true,  false }, // 69
  { "trcdevaff1",  0x8BDE,  true,  false }, // 70
  { "trclsr",  0x8BEE,  true,  false }, // 71
  { "trcauthstatus",  0x8BF6,  true,  false }, // 72
  { "trcdevarch",  0x8BFE,  true,  false }, // 73
  { "trcdevid",  0x8B97,  true,  false }, // 74
  { "trcdevtype",  0x8B9F,  true,  false }, // 75
  { "trcpidr4",  0x8BA7,  true,  false }, // 76
  { "trcpidr5",  0x8BAF,  true,  false }, // 77
  { "trcpidr6",  0x8BB7,  true,  false }, // 78
  { "trcpidr7",  0x8BBF,  true,  false }, // 79
  { "trcpidr0",  0x8BC7,  true,  false }, // 80
  { "trcpidr1",  0x8BCF,  true,  false }, // 81
  { "trcpidr2",  0x8BD7,  true,  false }, // 82
  { "trcpidr3",  0x8BDF,  true,  false }, // 83
  { "trccidr0",  0x8BE7,  true,  false }, // 84
  { "trccidr1",  0x8BEF,  true,  false }, // 85
  { "trccidr2",  0x8BF7,  true,  false }, // 86
  { "trccidr3",  0x8BFF,  true,  false }, // 87
  { "icc_iar1_el1",  0xC660,  true,  false }, // 88
  { "icc_iar0_el1",  0xC640,  true,  false }, // 89
  { "icc_hppir1_el1",  0xC662,  true,  false }, // 90
  { "icc_hppir0_el1",  0xC642,  true,  false }, // 91
  { "icc_rpr_el1",  0xC65B,  true,  false }, // 92
  { "ich_vtr_el2",  0xE659,  true,  false }, // 93
  { "ich_eisr_el2",  0xE65B,  true,  false }, // 94
  { "ich_elrsr_el2",  0xE65D,  true,  false }, // 95
  { "id_aa64zfr0_el1",  0xC024,  true,  false }, // 96
  { "lorid_el1",  0xC527,  true,  false }, // 97
  { "erridr_el1",  0xC298,  true,  false }, // 98
  { "erxfr_el1",  0xC2A0,  true,  false }, // 99
  { "dbgdtrtx_el0",  0x9828,  false,  true }, // 100
  { "oslar_el1",  0x8084,  false,  true }, // 101
  { "pmswinc_el0",  0xDCE4,  false,  true }, // 102
  { "trcoslar",  0x8884,  false,  true }, // 103
  { "trclar",  0x8BE6,  false,  true }, // 104
  { "icc_eoir1_el1",  0xC661,  false,  true }, // 105
  { "icc_eoir0_el1",  0xC641,  false,  true }, // 106
  { "icc_dir_el1",  0xC659,  false,  true }, // 107
  { "icc_sgi1r_el1",  0xC65D,  false,  true }, // 108
  { "icc_asgi1r_el1",  0xC65E,  false,  true }, // 109
  { "icc_sgi0r_el1",  0xC65F,  false,  true }, // 110
  { "osdtrrx_el1",  0x8002,  true,  true }, // 111
  { "osdtrtx_el1",  0x801A,  true,  true }, // 112
  { "teecr32_el1",  0x9000,  true,  true }, // 113
  { "mdccint_el1",  0x8010,  true,  true }, // 114
  { "mdscr_el1",  0x8012,  true,  true }, // 115
  { "dbgdtr_el0",  0x9820,  true,  true }, // 116
  { "oseccr_el1",  0x8032,  true,  true }, // 117
  { "dbgvcr32_el2",  0xA038,  true,  true }, // 118
  { "dbgbvr0_el1",  0x8004,  true,  true }, // 119
  { "dbgbvr1_el1",  0x800C,  true,  true }, // 120
  { "dbgbvr2_el1",  0x8014,  true,  true }, // 121
  { "dbgbvr3_el1",  0x801C,  true,  true }, // 122
  { "dbgbvr4_el1",  0x8024,  true,  true }, // 123
  { "dbgbvr5_el1",  0x802C,  true,  true }, // 124
  { "dbgbvr6_el1",  0x8034,  true,  true }, // 125
  { "dbgbvr7_el1",  0x803C,  true,  true }, // 126
  { "dbgbvr8_el1",  0x8044,  true,  true }, // 127
  { "dbgbvr9_el1",  0x804C,  true,  true }, // 128
  { "dbgbvr10_el1",  0x8054,  true,  true }, // 129
  { "dbgbvr11_el1",  0x805C,  true,  true }, // 130
  { "dbgbvr12_el1",  0x8064,  true,  true }, // 131
  { "dbgbvr13_el1",  0x806C,  true,  true }, // 132
  { "dbgbvr14_el1",  0x8074,  true,  true }, // 133
  { "dbgbvr15_el1",  0x807C,  true,  true }, // 134
  { "dbgbcr0_el1",  0x8005,  true,  true }, // 135
  { "dbgbcr1_el1",  0x800D,  true,  true }, // 136
  { "dbgbcr2_el1",  0x8015,  true,  true }, // 137
  { "dbgbcr3_el1",  0x801D,  true,  true }, // 138
  { "dbgbcr4_el1",  0x8025,  true,  true }, // 139
  { "dbgbcr5_el1",  0x802D,  true,  true }, // 140
  { "dbgbcr6_el1",  0x8035,  true,  true }, // 141
  { "dbgbcr7_el1",  0x803D,  true,  true }, // 142
  { "dbgbcr8_el1",  0x8045,  true,  true }, // 143
  { "dbgbcr9_el1",  0x804D,  true,  true }, // 144
  { "dbgbcr10_el1",  0x8055,  true,  true }, // 145
  { "dbgbcr11_el1",  0x805D,  true,  true }, // 146
  { "dbgbcr12_el1",  0x8065,  true,  true }, // 147
  { "dbgbcr13_el1",  0x806D,  true,  true }, // 148
  { "dbgbcr14_el1",  0x8075,  true,  true }, // 149
  { "dbgbcr15_el1",  0x807D,  true,  true }, // 150
  { "dbgwvr0_el1",  0x8006,  true,  true }, // 151
  { "dbgwvr1_el1",  0x800E,  true,  true }, // 152
  { "dbgwvr2_el1",  0x8016,  true,  true }, // 153
  { "dbgwvr3_el1",  0x801E,  true,  true }, // 154
  { "dbgwvr4_el1",  0x8026,  true,  true }, // 155
  { "dbgwvr5_el1",  0x802E,  true,  true }, // 156
  { "dbgwvr6_el1",  0x8036,  true,  true }, // 157
  { "dbgwvr7_el1",  0x803E,  true,  true }, // 158
  { "dbgwvr8_el1",  0x8046,  true,  true }, // 159
  { "dbgwvr9_el1",  0x804E,  true,  true }, // 160
  { "dbgwvr10_el1",  0x8056,  true,  true }, // 161
  { "dbgwvr11_el1",  0x805E,  true,  true }, // 162
  { "dbgwvr12_el1",  0x8066,  true,  true }, // 163
  { "dbgwvr13_el1",  0x806E,  true,  true }, // 164
  { "dbgwvr14_el1",  0x8076,  true,  true }, // 165
  { "dbgwvr15_el1",  0x807E,  true,  true }, // 166
  { "dbgwcr0_el1",  0x8007,  true,  true }, // 167
  { "dbgwcr1_el1",  0x800F,  true,  true }, // 168
  { "dbgwcr2_el1",  0x8017,  true,  true }, // 169
  { "dbgwcr3_el1",  0x801F,  true,  true }, // 170
  { "dbgwcr4_el1",  0x8027,  true,  true }, // 171
  { "dbgwcr5_el1",  0x802F,  true,  true }, // 172
  { "dbgwcr6_el1",  0x8037,  true,  true }, // 173
  { "dbgwcr7_el1",  0x803F,  true,  true }, // 174
  { "dbgwcr8_el1",  0x8047,  true,  true }, // 175
  { "dbgwcr9_el1",  0x804F,  true,  true }, // 176
  { "dbgwcr10_el1",  0x8057,  true,  true }, // 177
  { "dbgwcr11_el1",  0x805F,  true,  true }, // 178
  { "dbgwcr12_el1",  0x8067,  true,  true }, // 179
  { "dbgwcr13_el1",  0x806F,  true,  true }, // 180
  { "dbgwcr14_el1",  0x8077,  true,  true }, // 181
  { "dbgwcr15_el1",  0x807F,  true,  true }, // 182
  { "teehbr32_el1",  0x9080,  true,  true }, // 183
  { "osdlr_el1",  0x809C,  true,  true }, // 184
  { "dbgprcr_el1",  0x80A4,  true,  true }, // 185
  { "dbgclaimset_el1",  0x83C6,  true,  true }, // 186
  { "dbgclaimclr_el1",  0x83CE,  true,  true }, // 187
  { "csselr_el1",  0xD000,  true,  true }, // 188
  { "vpidr_el2",  0xE000,  true,  true }, // 189
  { "vmpidr_el2",  0xE005,  true,  true }, // 190
  { "cpacr_el1",  0xC082,  true,  true }, // 191
  { "sctlr_el1",  0xC080,  true,  true }, // 192
  { "sctlr_el2",  0xE080,  true,  true }, // 193
  { "sctlr_el3",  0xF080,  true,  true }, // 194
  { "actlr_el1",  0xC081,  true,  true }, // 195
  { "actlr_el2",  0xE081,  true,  true }, // 196
  { "actlr_el3",  0xF081,  true,  true }, // 197
  { "hcr_el2",  0xE088,  true,  true }, // 198
  { "scr_el3",  0xF088,  true,  true }, // 199
  { "mdcr_el2",  0xE089,  true,  true }, // 200
  { "sder32_el3",  0xF089,  true,  true }, // 201
  { "cptr_el2",  0xE08A,  true,  true }, // 202
  { "cptr_el3",  0xF08A,  true,  true }, // 203
  { "hstr_el2",  0xE08B,  true,  true }, // 204
  { "hacr_el2",  0xE08F,  true,  true }, // 205
  { "mdcr_el3",  0xF099,  true,  true }, // 206
  { "ttbr0_el1",  0xC100,  true,  true }, // 207
  { "ttbr0_el2",  0xE100,  true,  true }, // 208
  { "ttbr0_el3",  0xF100,  true,  true }, // 209
  { "ttbr1_el1",  0xC101,  true,  true }, // 210
  { "tcr_el1",  0xC102,  true,  true }, // 211
  { "tcr_el2",  0xE102,  true,  true }, // 212
  { "tcr_el3",  0xF102,  true,  true }, // 213
  { "vttbr_el2",  0xE108,  true,  true }, // 214
  { "vtcr_el2",  0xE10A,  true,  true }, // 215
  { "dacr32_el2",  0xE180,  true,  true }, // 216
  { "spsr_el1",  0xC200,  true,  true }, // 217
  { "spsr_el2",  0xE200,  true,  true }, // 218
  { "spsr_el3",  0xF200,  true,  true }, // 219
  { "elr_el1",  0xC201,  true,  true }, // 220
  { "elr_el2",  0xE201,  true,  true }, // 221
  { "elr_el3",  0xF201,  true,  true }, // 222
  { "sp_el0",  0xC208,  true,  true }, // 223
  { "sp_el1",  0xE208,  true,  true }, // 224
  { "sp_el2",  0xF208,  true,  true }, // 225
  { "spsel",  0xC210,  true,  true }, // 226
  { "nzcv",  0xDA10,  true,  true }, // 227
  { "daif",  0xDA11,  true,  true }, // 228
  { "currentel",  0xC212,  true,  true }, // 229
  { "spsr_irq",  0xE218,  true,  true }, // 230
  { "spsr_abt",  0xE219,  true,  true }, // 231
  { "spsr_und",  0xE21A,  true,  true }, // 232
  { "spsr_fiq",  0xE21B,  true,  true }, // 233
  { "fpcr",  0xDA20,  true,  true }, // 234
  { "fpsr",  0xDA21,  true,  true }, // 235
  { "dspsr_el0",  0xDA28,  true,  true }, // 236
  { "dlr_el0",  0xDA29,  true,  true }, // 237
  { "ifsr32_el2",  0xE281,  true,  true }, // 238
  { "afsr0_el1",  0xC288,  true,  true }, // 239
  { "afsr0_el2",  0xE288,  true,  true }, // 240
  { "afsr0_el3",  0xF288,  true,  true }, // 241
  { "afsr1_el1",  0xC289,  true,  true }, // 242
  { "afsr1_el2",  0xE289,  true,  true }, // 243
  { "afsr1_el3",  0xF289,  true,  true }, // 244
  { "esr_el1",  0xC290,  true,  true }, // 245
  { "esr_el2",  0xE290,  true,  true }, // 246
  { "esr_el3",  0xF290,  true,  true }, // 247
  { "fpexc32_el2",  0xE298,  true,  true }, // 248
  { "far_el1",  0xC300,  true,  true }, // 249
  { "far_el2",  0xE300,  true,  true }, // 250
  { "far_el3",  0xF300,  true,  true }, // 251
  { "hpfar_el2",  0xE304,  true,  true }, // 252
  { "par_el1",  0xC3A0,  true,  true }, // 253
  { "pmcr_el0",  0xDCE0,  true,  true }, // 254
  { "pmcntenset_el0",  0xDCE1,  true,  true }, // 255
  { "pmcntenclr_el0",  0xDCE2,  true,  true }, // 256
  { "pmovsclr_el0",  0xDCE3,  true,  true }, // 257
  { "pmselr_el0",  0xDCE5,  true,  true }, // 258
  { "pmccntr_el0",  0xDCE8,  true,  true }, // 259
  { "pmxevtyper_el0",  0xDCE9,  true,  true }, // 260
  { "pmxevcntr_el0",  0xDCEA,  true,  true }, // 261
  { "pmuserenr_el0",  0xDCF0,  true,  true }, // 262
  { "pmintenset_el1",  0xC4F1,  true,  true }, // 263
  { "pmintenclr_el1",  0xC4F2,  true,  true }, // 264
  { "pmovsset_el0",  0xDCF3,  true,  true }, // 265
  { "mair_el1",  0xC510,  true,  true }, // 266
  { "mair_el2",  0xE510,  true,  true }, // 267
  { "mair_el3",  0xF510,  true,  true }, // 268
  { "amair_el1",  0xC518,  true,  true }, // 269
  { "amair_el2",  0xE518,  true,  true }, // 270
  { "amair_el3",  0xF518,  true,  true }, // 271
  { "vbar_el1",  0xC600,  true,  true }, // 272
  { "vbar_el2",  0xE600,  true,  true }, // 273
  { "vbar_el3",  0xF600,  true,  true }, // 274
  { "rmr_el1",  0xC602,  true,  true }, // 275
  { "rmr_el2",  0xE602,  true,  true }, // 276
  { "rmr_el3",  0xF602,  true,  true }, // 277
  { "contextidr_el1",  0xC681,  true,  true }, // 278
  { "tpidr_el0",  0xDE82,  true,  true }, // 279
  { "tpidr_el2",  0xE682,  true,  true }, // 280
  { "tpidr_el3",  0xF682,  true,  true }, // 281
  { "tpidrro_el0",  0xDE83,  true,  true }, // 282
  { "tpidr_el1",  0xC684,  true,  true }, // 283
  { "cntfrq_el0",  0xDF00,  true,  true }, // 284
  { "cntvoff_el2",  0xE703,  true,  true }, // 285
  { "cntkctl_el1",  0xC708,  true,  true }, // 286
  { "cnthctl_el2",  0xE708,  true,  true }, // 287
  { "cntp_tval_el0",  0xDF10,  true,  true }, // 288
  { "cnthp_tval_el2",  0xE710,  true,  true }, // 289
  { "cntps_tval_el1",  0xFF10,  true,  true }, // 290
  { "cntp_ctl_el0",  0xDF11,  true,  true }, // 291
  { "cnthp_ctl_el2",  0xE711,  true,  true }, // 292
  { "cntps_ctl_el1",  0xFF11,  true,  true }, // 293
  { "cntp_cval_el0",  0xDF12,  true,  true }, // 294
  { "cnthp_cval_el2",  0xE712,  true,  true }, // 295
  { "cntps_cval_el1",  0xFF12,  true,  true }, // 296
  { "cntv_tval_el0",  0xDF18,  true,  true }, // 297
  { "cntv_ctl_el0",  0xDF19,  true,  true }, // 298
  { "cntv_cval_el0",  0xDF1A,  true,  true }, // 299
  { "pmevcntr0_el0",  0xDF40,  true,  true }, // 300
  { "pmevcntr1_el0",  0xDF41,  true,  true }, // 301
  { "pmevcntr2_el0",  0xDF42,  true,  true }, // 302
  { "pmevcntr3_el0",  0xDF43,  true,  true }, // 303
  { "pmevcntr4_el0",  0xDF44,  true,  true }, // 304
  { "pmevcntr5_el0",  0xDF45,  true,  true }, // 305
  { "pmevcntr6_el0",  0xDF46,  true,  true }, // 306
  { "pmevcntr7_el0",  0xDF47,  true,  true }, // 307
  { "pmevcntr8_el0",  0xDF48,  true,  true }, // 308
  { "pmevcntr9_el0",  0xDF49,  true,  true }, // 309
  { "pmevcntr10_el0",  0xDF4A,  true,  true }, // 310
  { "pmevcntr11_el0",  0xDF4B,  true,  true }, // 311
  { "pmevcntr12_el0",  0xDF4C,  true,  true }, // 312
  { "pmevcntr13_el0",  0xDF4D,  true,  true }, // 313
  { "pmevcntr14_el0",  0xDF4E,  true,  true }, // 314
  { "pmevcntr15_el0",  0xDF4F,  true,  true }, // 315
  { "pmevcntr16_el0",  0xDF50,  true,  true }, // 316
  { "pmevcntr17_el0",  0xDF51,  true,  true }, // 317
  { "pmevcntr18_el0",  0xDF52,  true,  true }, // 318
  { "pmevcntr19_el0",  0xDF53,  true,  true }, // 319
  { "pmevcntr20_el0",  0xDF54,  true,  true }, // 320
  { "pmevcntr21_el0",  0xDF55,  true,  true }, // 321
  { "pmevcntr22_el0",  0xDF56,  true,  true }, // 322
  { "pmevcntr23_el0",  0xDF57,  true,  true }, // 323
  { "pmevcntr24_el0",  0xDF58,  true,  true }, // 324
  { "pmevcntr25_el0",  0xDF59,  true,  true }, // 325
  { "pmevcntr26_el0",  0xDF5A,  true,  true }, // 326
  { "pmevcntr27_el0",  0xDF5B,  true,  true }, // 327
  { "pmevcntr28_el0",  0xDF5C,  true,  true }, // 328
  { "pmevcntr29_el0",  0xDF5D,  true,  true }, // 329
  { "pmevcntr30_el0",  0xDF5E,  true,  true }, // 330
  { "pmccfiltr_el0",  0xDF7F,  true,  true }, // 331
  { "pmevtyper0_el0",  0xDF60,  true,  true }, // 332
  { "pmevtyper1_el0",  0xDF61,  true,  true }, // 333
  { "pmevtyper2_el0",  0xDF62,  true,  true }, // 334
  { "pmevtyper3_el0",  0xDF63,  true,  true }, // 335
  { "pmevtyper4_el0",  0xDF64,  true,  true }, // 336
  { "pmevtyper5_el0",  0xDF65,  true,  true }, // 337
  { "pmevtyper6_el0",  0xDF66,  true,  true }, // 338
  { "pmevtyper7_el0",  0xDF67,  true,  true }, // 339
  { "pmevtyper8_el0",  0xDF68,  true,  true }, // 340
  { "pmevtyper9_el0",  0xDF69,  true,  true }, // 341
  { "pmevtyper10_el0",  0xDF6A,  true,  true }, // 342
  { "pmevtyper11_el0",  0xDF6B,  true,  true }, // 343
  { "pmevtyper12_el0",  0xDF6C,  true,  true }, // 344
  { "pmevtyper13_el0",  0xDF6D,  true,  true }, // 345
  { "pmevtyper14_el0",  0xDF6E,  true,  true }, // 346
  { "pmevtyper15_el0",  0xDF6F,  true,  true }, // 347
  { "pmevtyper16_el0",  0xDF70,  true,  true }, // 348
  { "pmevtyper17_el0",  0xDF71,  true,  true }, // 349
  { "pmevtyper18_el0",  0xDF72,  true,  true }, // 350
  { "pmevtyper19_el0",  0xDF73,  true,  true }, // 351
  { "pmevtyper20_el0",  0xDF74,  true,  true }, // 352
  { "pmevtyper21_el0",  0xDF75,  true,  true }, // 353
  { "pmevtyper22_el0",  0xDF76,  true,  true }, // 354
  { "pmevtyper23_el0",  0xDF77,  true,  true }, // 355
  { "pmevtyper24_el0",  0xDF78,  true,  true }, // 356
  { "pmevtyper25_el0",  0xDF79,  true,  true }, // 357
  { "pmevtyper26_el0",  0xDF7A,  true,  true }, // 358
  { "pmevtyper27_el0",  0xDF7B,  true,  true }, // 359
  { "pmevtyper28_el0",  0xDF7C,  true,  true }, // 360
  { "pmevtyper29_el0",  0xDF7D,  true,  true }, // 361
  { "pmevtyper30_el0",  0xDF7E,  true,  true }, // 362
  { "trcprgctlr",  0x8808,  true,  true }, // 363
  { "trcprocselr",  0x8810,  true,  true }, // 364
  { "trcconfigr",  0x8820,  true,  true }, // 365
  { "trcauxctlr",  0x8830,  true,  true }, // 366
  { "trceventctl0r",  0x8840,  true,  true }, // 367
  { "trceventctl1r",  0x8848,  true,  true }, // 368
  { "trcstallctlr",  0x8858,  true,  true }, // 369
  { "trctsctlr",  0x8860,  true,  true }, // 370
  { "trcsyncpr",  0x8868,  true,  true }, // 371
  { "trcccctlr",  0x8870,  true,  true }, // 372
  { "trcbbctlr",  0x8878,  true,  true }, // 373
  { "trctraceidr",  0x8801,  true,  true }, // 374
  { "trcqctlr",  0x8809,  true,  true }, // 375
  { "trcvictlr",  0x8802,  true,  true }, // 376
  { "trcviiectlr",  0x880A,  true,  true }, // 377
  { "trcvissctlr",  0x8812,  true,  true }, // 378
  { "trcvipcssctlr",  0x881A,  true,  true }, // 379
  { "trcvdctlr",  0x8842,  true,  true }, // 380
  { "trcvdsacctlr",  0x884A,  true,  true }, // 381
  { "trcvdarcctlr",  0x8852,  true,  true }, // 382
  { "trcseqevr0",  0x8804,  true,  true }, // 383
  { "trcseqevr1",  0x880C,  true,  true }, // 384
  { "trcseqevr2",  0x8814,  true,  true }, // 385
  { "trcseqrstevr",  0x8834,  true,  true }, // 386
  { "trcseqstr",  0x883C,  true,  true }, // 387
  { "trcextinselr",  0x8844,  true,  true }, // 388
  { "trccntrldvr0",  0x8805,  true,  true }, // 389
  { "trccntrldvr1",  0x880D,  true,  true }, // 390
  { "trccntrldvr2",  0x8815,  true,  true }, // 391
  { "trccntrldvr3",  0x881D,  true,  true }, // 392
  { "trccntctlr0",  0x8825,  true,  true }, // 393
  { "trccntctlr1",  0x882D,  true,  true }, // 394
  { "trccntctlr2",  0x8835,  true,  true }, // 395
  { "trccntctlr3",  0x883D,  true,  true }, // 396
  { "trccntvr0",  0x8845,  true,  true }, // 397
  { "trccntvr1",  0x884D,  true,  true }, // 398
  { "trccntvr2",  0x8855,  true,  true }, // 399
  { "trccntvr3",  0x885D,  true,  true }, // 400
  { "trcimspec0",  0x8807,  true,  true }, // 401
  { "trcimspec1",  0x880F,  true,  true }, // 402
  { "trcimspec2",  0x8817,  true,  true }, // 403
  { "trcimspec3",  0x881F,  true,  true }, // 404
  { "trcimspec4",  0x8827,  true,  true }, // 405
  { "trcimspec5",  0x882F,  true,  true }, // 406
  { "trcimspec6",  0x8837,  true,  true }, // 407
  { "trcimspec7",  0x883F,  true,  true }, // 408
  { "trcrsctlr2",  0x8890,  true,  true }, // 409
  { "trcrsctlr3",  0x8898,  true,  true }, // 410
  { "trcrsctlr4",  0x88A0,  true,  true }, // 411
  { "trcrsctlr5",  0x88A8,  true,  true }, // 412
  { "trcrsctlr6",  0x88B0,  true,  true }, // 413
  { "trcrsctlr7",  0x88B8,  true,  true }, // 414
  { "trcrsctlr8",  0x88C0,  true,  true }, // 415
  { "trcrsctlr9",  0x88C8,  true,  true }, // 416
  { "trcrsctlr10",  0x88D0,  true,  true }, // 417
  { "trcrsctlr11",  0x88D8,  true,  true }, // 418
  { "trcrsctlr12",  0x88E0,  true,  true }, // 419
  { "trcrsctlr13",  0x88E8,  true,  true }, // 420
  { "trcrsctlr14",  0x88F0,  true,  true }, // 421
  { "trcrsctlr15",  0x88F8,  true,  true }, // 422
  { "trcrsctlr16",  0x8881,  true,  true }, // 423
  { "trcrsctlr17",  0x8889,  true,  true }, // 424
  { "trcrsctlr18",  0x8891,  true,  true }, // 425
  { "trcrsctlr19",  0x8899,  true,  true }, // 426
  { "trcrsctlr20",  0x88A1,  true,  true }, // 427
  { "trcrsctlr21",  0x88A9,  true,  true }, // 428
  { "trcrsctlr22",  0x88B1,  true,  true }, // 429
  { "trcrsctlr23",  0x88B9,  true,  true }, // 430
  { "trcrsctlr24",  0x88C1,  true,  true }, // 431
  { "trcrsctlr25",  0x88C9,  true,  true }, // 432
  { "trcrsctlr26",  0x88D1,  true,  true }, // 433
  { "trcrsctlr27",  0x88D9,  true,  true }, // 434
  { "trcrsctlr28",  0x88E1,  true,  true }, // 435
  { "trcrsctlr29",  0x88E9,  true,  true }, // 436
  { "trcrsctlr30",  0x88F1,  true,  true }, // 437
  { "trcrsctlr31",  0x88F9,  true,  true }, // 438
  { "trcssccr0",  0x8882,  true,  true }, // 439
  { "trcssccr1",  0x888A,  true,  true }, // 440
  { "trcssccr2",  0x8892,  true,  true }, // 441
  { "trcssccr3",  0x889A,  true,  true }, // 442
  { "trcssccr4",  0x88A2,  true,  true }, // 443
  { "trcssccr5",  0x88AA,  true,  true }, // 444
  { "trcssccr6",  0x88B2,  true,  true }, // 445
  { "trcssccr7",  0x88BA,  true,  true }, // 446
  { "trcsscsr0",  0x88C2,  true,  true }, // 447
  { "trcsscsr1",  0x88CA,  true,  true }, // 448
  { "trcsscsr2",  0x88D2,  true,  true }, // 449
  { "trcsscsr3",  0x88DA,  true,  true }, // 450
  { "trcsscsr4",  0x88E2,  true,  true }, // 451
  { "trcsscsr5",  0x88EA,  true,  true }, // 452
  { "trcsscsr6",  0x88F2,  true,  true }, // 453
  { "trcsscsr7",  0x88FA,  true,  true }, // 454
  { "trcsspcicr0",  0x8883,  true,  true }, // 455
  { "trcsspcicr1",  0x888B,  true,  true }, // 456
  { "trcsspcicr2",  0x8893,  true,  true }, // 457
  { "trcsspcicr3",  0x889B,  true,  true }, // 458
  { "trcsspcicr4",  0x88A3,  true,  true }, // 459
  { "trcsspcicr5",  0x88AB,  true,  true }, // 460
  { "trcsspcicr6",  0x88B3,  true,  true }, // 461
  { "trcsspcicr7",  0x88BB,  true,  true }, // 462
  { "trcpdcr",  0x88A4,  true,  true }, // 463
  { "trcacvr0",  0x8900,  true,  true }, // 464
  { "trcacvr1",  0x8910,  true,  true }, // 465
  { "trcacvr2",  0x8920,  true,  true }, // 466
  { "trcacvr3",  0x8930,  true,  true }, // 467
  { "trcacvr4",  0x8940,  true,  true }, // 468
  { "trcacvr5",  0x8950,  true,  true }, // 469
  { "trcacvr6",  0x8960,  true,  true }, // 470
  { "trcacvr7",  0x8970,  true,  true }, // 471
  { "trcacvr8",  0x8901,  true,  true }, // 472
  { "trcacvr9",  0x8911,  true,  true }, // 473
  { "trcacvr10",  0x8921,  true,  true }, // 474
  { "trcacvr11",  0x8931,  true,  true }, // 475
  { "trcacvr12",  0x8941,  true,  true }, // 476
  { "trcacvr13",  0x8951,  true,  true }, // 477
  { "trcacvr14",  0x8961,  true,  true }, // 478
  { "trcacvr15",  0x8971,  true,  true }, // 479
  { "trcacatr0",  0x8902,  true,  true }, // 480
  { "trcacatr1",  0x8912,  true,  true }, // 481
  { "trcacatr2",  0x8922,  true,  true }, // 482
  { "trcacatr3",  0x8932,  true,  true }, // 483
  { "trcacatr4",  0x8942,  true,  true }, // 484
  { "trcacatr5",  0x8952,  true,  true }, // 485
  { "trcacatr6",  0x8962,  true,  true }, // 486
  { "trcacatr7",  0x8972,  true,  true }, // 487
  { "trcacatr8",  0x8903,  true,  true }, // 488
  { "trcacatr9",  0x8913,  true,  true }, // 489
  { "trcacatr10",  0x8923,  true,  true }, // 490
  { "trcacatr11",  0x8933,  true,  true }, // 491
  { "trcacatr12",  0x8943,  true,  true }, // 492
  { "trcacatr13",  0x8953,  true,  true }, // 493
  { "trcacatr14",  0x8963,  true,  true }, // 494
  { "trcacatr15",  0x8973,  true,  true }, // 495
  { "trcdvcvr0",  0x8904,  true,  true }, // 496
  { "trcdvcvr1",  0x8924,  true,  true }, // 497
  { "trcdvcvr2",  0x8944,  true,  true }, // 498
  { "trcdvcvr3",  0x8964,  true,  true }, // 499
  { "trcdvcvr4",  0x8905,  true,  true }, // 500
  { "trcdvcvr5",  0x8925,  true,  true }, // 501
  { "trcdvcvr6",  0x8945,  true,  true }, // 502
  { "trcdvcvr7",  0x8965,  true,  true }, // 503
  { "trcdvcmr0",  0x8906,  true,  true }, // 504
  { "trcdvcmr1",  0x8926,  true,  true }, // 505
  { "trcdvcmr2",  0x8946,  true,  true }, // 506
  { "trcdvcmr3",  0x8966,  true,  true }, // 507
  { "trcdvcmr4",  0x8907,  true,  true }, // 508
  { "trcdvcmr5",  0x8927,  true,  true }, // 509
  { "trcdvcmr6",  0x8947,  true,  true }, // 510
  { "trcdvcmr7",  0x8967,  true,  true }, // 511
  { "trccidcvr0",  0x8980,  true,  true }, // 512
  { "trccidcvr1",  0x8990,  true,  true }, // 513
  { "trccidcvr2",  0x89A0,  true,  true }, // 514
  { "trccidcvr3",  0x89B0,  true,  true }, // 515
  { "trccidcvr4",  0x89C0,  true,  true }, // 516
  { "trccidcvr5",  0x89D0,  true,  true }, // 517
  { "trccidcvr6",  0x89E0,  true,  true }, // 518
  { "trccidcvr7",  0x89F0,  true,  true }, // 519
  { "trcvmidcvr0",  0x8981,  true,  true }, // 520
  { "trcvmidcvr1",  0x8991,  true,  true }, // 521
  { "trcvmidcvr2",  0x89A1,  true,  true }, // 522
  { "trcvmidcvr3",  0x89B1,  true,  true }, // 523
  { "trcvmidcvr4",  0x89C1,  true,  true }, // 524
  { "trcvmidcvr5",  0x89D1,  true,  true }, // 525
  { "trcvmidcvr6",  0x89E1,  true,  true }, // 526
  { "trcvmidcvr7",  0x89F1,  true,  true }, // 527
  { "trccidcctlr0",  0x8982,  true,  true }, // 528
  { "trccidcctlr1",  0x898A,  true,  true }, // 529
  { "trcvmidcctlr0",  0x8992,  true,  true }, // 530
  { "trcvmidcctlr1",  0x899A,  true,  true }, // 531
  { "trcitctrl",  0x8B84,  true,  true }, // 532
  { "trcclaimset",  0x8BC6,  true,  true }, // 533
  { "trcclaimclr",  0x8BCE,  true,  true }, // 534
  { "icc_bpr1_el1",  0xC663,  true,  true }, // 535
  { "icc_bpr0_el1",  0xC643,  true,  true }, // 536
  { "icc_pmr_el1",  0xC230,  true,  true }, // 537
  { "icc_ctlr_el1",  0xC664,  true,  true }, // 538
  { "icc_ctlr_el3",  0xF664,  true,  true }, // 539
  { "icc_sre_el1",  0xC665,  true,  true }, // 540
  { "icc_sre_el2",  0xE64D,  true,  true }, // 541
  { "icc_sre_el3",  0xF665,  true,  true }, // 542
  { "icc_igrpen0_el1",  0xC666,  true,  true }, // 543
  { "icc_igrpen1_el1",  0xC667,  true,  true }, // 544
  { "icc_igrpen1_el3",  0xF667,  true,  true }, // 545
  { "icc_seien_el1",  0xC668,  true,  true }, // 546
  { "icc_ap0r0_el1",  0xC644,  true,  true }, // 547
  { "icc_ap0r1_el1",  0xC645,  true,  true }, // 548
  { "icc_ap0r2_el1",  0xC646,  true,  true }, // 549
  { "icc_ap0r3_el1",  0xC647,  true,  true }, // 550
  { "icc_ap1r0_el1",  0xC648,  true,  true }, // 551
  { "icc_ap1r1_el1",  0xC649,  true,  true }, // 552
  { "icc_ap1r2_el1",  0xC64A,  true,  true }, // 553
  { "icc_ap1r3_el1",  0xC64B,  true,  true }, // 554
  { "ich_ap0r0_el2",  0xE640,  true,  true }, // 555
  { "ich_ap0r1_el2",  0xE641,  true,  true }, // 556
  { "ich_ap0r2_el2",  0xE642,  true,  true }, // 557
  { "ich_ap0r3_el2",  0xE643,  true,  true }, // 558
  { "ich_ap1r0_el2",  0xE648,  true,  true }, // 559
  { "ich_ap1r1_el2",  0xE649,  true,  true }, // 560
  { "ich_ap1r2_el2",  0xE64A,  true,  true }, // 561
  { "ich_ap1r3_el2",  0xE64B,  true,  true }, // 562
  { "ich_hcr_el2",  0xE658,  true,  true }, // 563
  { "ich_misr_el2",  0xE65A,  true,  true }, // 564
  { "ich_vmcr_el2",  0xE65F,  true,  true }, // 565
  { "ich_vseir_el2",  0xE64C,  true,  true }, // 566
  { "ich_lr0_el2",  0xE660,  true,  true }, // 567
  { "ich_lr1_el2",  0xE661,  true,  true }, // 568
  { "ich_lr2_el2",  0xE662,  true,  true }, // 569
  { "ich_lr3_el2",  0xE663,  true,  true }, // 570
  { "ich_lr4_el2",  0xE664,  true,  true }, // 571
  { "ich_lr5_el2",  0xE665,  true,  true }, // 572
  { "ich_lr6_el2",  0xE666,  true,  true }, // 573
  { "ich_lr7_el2",  0xE667,  true,  true }, // 574
  { "ich_lr8_el2",  0xE668,  true,  true }, // 575
  { "ich_lr9_el2",  0xE669,  true,  true }, // 576
  { "ich_lr10_el2",  0xE66A,  true,  true }, // 577
  { "ich_lr11_el2",  0xE66B,  true,  true }, // 578
  { "ich_lr12_el2",  0xE66C,  true,  true }, // 579
  { "ich_lr13_el2",  0xE66D,  true,  true }, // 580
  { "ich_lr14_el2",  0xE66E,  true,  true }, // 581
  { "ich_lr15_el2",  0xE66F,  true,  true }, // 582
  { "pan",  0xC213,  true,  true }, // 583
  { "lorsa_el1",  0xC520,  true,  true }, // 584
  { "lorea_el1",  0xC521,  true,  true }, // 585
  { "lorn_el1",  0xC522,  true,  true }, // 586
  { "lorc_el1",  0xC523,  true,  true }, // 587
  { "ttbr1_el2",  0xE101,  true,  true }, // 588
  { "contextidr_el2",  0xE681,  true,  true }, // 589
  { "cnthv_tval_el2",  0xE718,  true,  true }, // 590
  { "cnthv_cval_el2",  0xE71A,  true,  true }, // 591
  { "cnthv_ctl_el2",  0xE719,  true,  true }, // 592
  { "sctlr_el12",  0xE880,  true,  true }, // 593
  { "cpacr_el12",  0xE882,  true,  true }, // 594
  { "ttbr0_el12",  0xE900,  true,  true }, // 595
  { "ttbr1_el12",  0xE901,  true,  true }, // 596
  { "tcr_el12",  0xE902,  true,  true }, // 597
  { "afsr0_el12",  0xEA88,  true,  true }, // 598
  { "afsr1_el12",  0xEA89,  true,  true }, // 599
  { "esr_el12",  0xEA90,  true,  true }, // 600
  { "far_el12",  0xEB00,  true,  true }, // 601
  { "mair_el12",  0xED10,  true,  true }, // 602
  { "amair_el12",  0xED18,  true,  true }, // 603
  { "vbar_el12",  0xEE00,  true,  true }, // 604
  { "contextidr_el12",  0xEE81,  true,  true }, // 605
  { "cntkctl_el12",  0xEF08,  true,  true }, // 606
  { "cntp_tval_el02",  0xEF10,  true,  true }, // 607
  { "cntp_ctl_el02",  0xEF11,  true,  true }, // 608
  { "cntp_cval_el02",  0xEF12,  true,  true }, // 609
  { "cntv_tval_el02",  0xEF18,  true,  true }, // 610
  { "cntv_ctl_el02",  0xEF19,  true,  true }, // 611
  { "cntv_cval_el02",  0xEF1A,  true,  true }, // 612
  { "spsr_el12",  0xEA00,  true,  true }, // 613
  { "elr_el12",  0xEA01,  true,  true }, // 614
  { "uao",  0xC214,  true,  true }, // 615
  { "pmblimitr_el1",  0xC4D0,  true,  true }, // 616
  { "pmbptr_el1",  0xC4D1,  true,  true }, // 617
  { "pmbsr_el1",  0xC4D3,  true,  true }, // 618
  { "pmbidr_el1",  0xC4D7,  true,  true }, // 619
  { "pmscr_el2",  0xE4C8,  true,  true }, // 620
  { "pmscr_el12",  0xECC8,  true,  true }, // 621
  { "pmscr_el1",  0xC4C8,  true,  true }, // 622
  { "pmsicr_el1",  0xC4CA,  true,  true }, // 623
  { "pmsirr_el1",  0xC4CB,  true,  true }, // 624
  { "pmsfcr_el1",  0xC4CC,  true,  true }, // 625
  { "pmsevfr_el1",  0xC4CD,  true,  true }, // 626
  { "pmslatfr_el1",  0xC4CE,  true,  true }, // 627
  { "pmsidr_el1",  0xC4CF,  true,  true }, // 628
  { "errselr_el1",  0xC299,  true,  true }, // 629
  { "erxctlr_el1",  0xC2A1,  true,  true }, // 630
  { "erxstatus_el1",  0xC2A2,  true,  true }, // 631
  { "erxaddr_el1",  0xC2A3,  true,  true }, // 632
  { "erxmisc0_el1",  0xC2A8,  true,  true }, // 633
  { "erxmisc1_el1",  0xC2A9,  true,  true }, // 634
  { "disr_el1",  0xC609,  true,  true }, // 635
  { "vdisr_el2",  0xE609,  true,  true }, // 636
  { "vsesr_el2",  0xE293,  true,  true }, // 637
  { "apiakeylo_el1",  0xC108,  true,  true }, // 638
  { "apiakeyhi_el1",  0xC109,  true,  true }, // 639
  { "apibkeylo_el1",  0xC10A,  true,  true }, // 640
  { "apibkeyhi_el1",  0xC10B,  true,  true }, // 641
  { "apdakeylo_el1",  0xC110,  true,  true }, // 642
  { "apdakeyhi_el1",  0xC111,  true,  true }, // 643
  { "apdbkeylo_el1",  0xC112,  true,  true }, // 644
  { "apdbkeyhi_el1",  0xC113,  true,  true }, // 645
  { "apgakeylo_el1",  0xC118,  true,  true }, // 646
  { "apgakeyhi_el1",  0xC119,  true,  true }, // 647
  { "vstcr_el2",  0xE132,  true,  true }, // 648
  { "vsttbr_el2",  0xE130,  true,  true }, // 649
  { "cnthvs_tval_el2",  0xE720,  true,  true }, // 650
  { "cnthvs_cval_el2",  0xE722,  true,  true }, // 651
  { "cnthvs_ctl_el2",  0xE721,  true,  true }, // 652
  { "cnthps_tval_el2",  0xE728,  true,  true }, // 653
  { "cnthps_cval_el2",  0xE72A,  true,  true }, // 654
  { "cnthps_ctl_el2",  0xE729,  true,  true }, // 655
  { "sder32_el2",  0xE099,  true,  true }, // 656
  { "erxpfgctl_el1",  0xC2A5,  true,  true }, // 657
  { "erxpfgcdn_el1",  0xC2A6,  true,  true }, // 658
  { "erxts_el1",  0xC2AF,  true,  true }, // 659
  { "erxmisc2_el1",  0xC2AA,  true,  true }, // 660
  { "erxmisc3_el1",  0xC2AB,  true,  true }, // 661
  { "erxpfgf_el1",  0xC2A4,  true,  false }, // 662
  { "mpam0_el1",  0xC529,  true,  true }, // 663
  { "mpam1_el1",  0xC528,  true,  true }, // 664
  { "mpam2_el2",  0xE528,  true,  true }, // 665
  { "mpam3_el3",  0xF528,  true,  true }, // 666
  { "mpam1_el12",  0xED28,  true,  true }, // 667
  { "mpamhcr_el2",  0xE520,  true,  true }, // 668
  { "mpamvpmv_el2",  0xE521,  true,  true }, // 669
  { "mpamvpm0_el2",  0xE530,  true,  true }, // 670
  { "mpamvpm1_el2",  0xE531,  true,  true }, // 671
  { "mpamvpm2_el2",  0xE532,  true,  true }, // 672
  { "mpamvpm3_el2",  0xE533,  true,  true }, // 673
  { "mpamvpm4_el2",  0xE534,  true,  true }, // 674
  { "mpamvpm5_el2",  0xE535,  true,  true }, // 675
  { "mpamvpm6_el2",  0xE536,  true,  true }, // 676
  { "mpamvpm7_el2",  0xE537,  true,  true }, // 677
  { "mpamidr_el1",  0xC524,  true,  false }, // 678
  { "amcr_el0",  0xDE90,  true,  true }, // 679
  { "amcfgr_el0",  0xDE91,  true,  false }, // 680
  { "amcgcr_el0",  0xDE92,  true,  false }, // 681
  { "amuserenr_el0",  0xDE93,  true,  true }, // 682
  { "amcntenclr0_el0",  0xDE94,  true,  true }, // 683
  { "amcntenset0_el0",  0xDE95,  true,  true }, // 684
  { "amevcntr00_el0",  0xDEA0,  true,  true }, // 685
  { "amevcntr01_el0",  0xDEA1,  true,  true }, // 686
  { "amevcntr02_el0",  0xDEA2,  true,  true }, // 687
  { "amevcntr03_el0",  0xDEA3,  true,  true }, // 688
  { "amevtyper00_el0",  0xDEB0,  true,  false }, // 689
  { "amevtyper01_el0",  0xDEB1,  true,  false }, // 690
  { "amevtyper02_el0",  0xDEB2,  true,  false }, // 691
  { "amevtyper03_el0",  0xDEB3,  true,  false }, // 692
  { "amcntenclr1_el0",  0xDE98,  true,  true }, // 693
  { "amcntenset1_el0",  0xDE99,  true,  true }, // 694
  { "amevcntr10_el0",  0xDEE0,  true,  true }, // 695
  { "amevcntr11_el0",  0xDEE1,  true,  true }, // 696
  { "amevcntr12_el0",  0xDEE2,  true,  true }, // 697
  { "amevcntr13_el0",  0xDEE3,  true,  true }, // 698
  { "amevcntr14_el0",  0xDEE4,  true,  true }, // 699
  { "amevcntr15_el0",  0xDEE5,  true,  true }, // 700
  { "amevcntr16_el0",  0xDEE6,  true,  true }, // 701
  { "amevcntr17_el0",  0xDEE7,  true,  true }, // 702
  { "amevcntr18_el0",  0xDEE8,  true,  true }, // 703
  { "amevcntr19_el0",  0xDEE9,  true,  true }, // 704
  { "amevcntr110_el0",  0xDEEA,  true,  true }, // 705
  { "amevcntr111_el0",  0xDEEB,  true,  true }, // 706
  { "amevcntr112_el0",  0xDEEC,  true,  true }, // 707
  { "amevcntr113_el0",  0xDEED,  true,  true }, // 708
  { "amevcntr114_el0",  0xDEEE,  true,  true }, // 709
  { "amevcntr115_el0",  0xDEEF,  true,  true }, // 710
  { "amevtyper10_el0",  0xDEF0,  true,  true }, // 711
  { "amevtyper11_el0",  0xDEF1,  true,  true }, // 712
  { "amevtyper12_el0",  0xDEF2,  true,  true }, // 713
  { "amevtyper13_el0",  0xDEF3,  true,  true }, // 714
  { "amevtyper14_el0",  0xDEF4,  true,  true }, // 715
  { "amevtyper15_el0",  0xDEF5,  true,  true }, // 716
  { "amevtyper16_el0",  0xDEF6,  true,  true }, // 717
  { "amevtyper17_el0",  0xDEF7,  true,  true }, // 718
  { "amevtyper18_el0",  0xDEF8,  true,  true }, // 719
  { "amevtyper19_el0",  0xDEF9,  true,  true }, // 720
  { "amevtyper110_el0",  0xDEFA,  true,  true }, // 721
  { "amevtyper111_el0",  0xDEFB,  true,  true }, // 722
  { "amevtyper112_el0",  0xDEFC,  true,  true }, // 723
  { "amevtyper113_el0",  0xDEFD,  true,  true }, // 724
  { "amevtyper114_el0",  0xDEFE,  true,  true }, // 725
  { "amevtyper115_el0",  0xDEFF,  true,  true }, // 726
  { "trfcr_el1",  0xC091,  true,  true }, // 727
  { "trfcr_el2",  0xE091,  true,  true }, // 728
  { "trfcr_el12",  0xE891,  true,  true }, // 729
  { "dit",  0xDA15,  true,  true }, // 730
  { "vncr_el2",  0xE110,  true,  true }, // 731
  { "zcr_el1",  0xC090,  true,  true }, // 732
  { "zcr_el2",  0xE090,  true,  true }, // 733
  { "zcr_el3",  0xF090,  true,  true }, // 734
  { "zcr_el12",  0xE890,  true,  true }, // 735
  { "cpm_ioacc_ctl_el3",  0xFF90,  true,  true }, // 736
};

const SysReg *lookupSysRegByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x8002, 111 },
    { 0x8004, 119 },
    { 0x8005, 135 },
    { 0x8006, 151 },
    { 0x8007, 167 },
    { 0x800C, 120 },
    { 0x800D, 136 },
    { 0x800E, 152 },
    { 0x800F, 168 },
    { 0x8010, 114 },
    { 0x8012, 115 },
    { 0x8014, 121 },
    { 0x8015, 137 },
    { 0x8016, 153 },
    { 0x8017, 169 },
    { 0x801A, 112 },
    { 0x801C, 122 },
    { 0x801D, 138 },
    { 0x801E, 154 },
    { 0x801F, 170 },
    { 0x8024, 123 },
    { 0x8025, 139 },
    { 0x8026, 155 },
    { 0x8027, 171 },
    { 0x802C, 124 },
    { 0x802D, 140 },
    { 0x802E, 156 },
    { 0x802F, 172 },
    { 0x8032, 117 },
    { 0x8034, 125 },
    { 0x8035, 141 },
    { 0x8036, 157 },
    { 0x8037, 173 },
    { 0x803C, 126 },
    { 0x803D, 142 },
    { 0x803E, 158 },
    { 0x803F, 174 },
    { 0x8044, 127 },
    { 0x8045, 143 },
    { 0x8046, 159 },
    { 0x8047, 175 },
    { 0x804C, 128 },
    { 0x804D, 144 },
    { 0x804E, 160 },
    { 0x804F, 176 },
    { 0x8054, 129 },
    { 0x8055, 145 },
    { 0x8056, 161 },
    { 0x8057, 177 },
    { 0x805C, 130 },
    { 0x805D, 146 },
    { 0x805E, 162 },
    { 0x805F, 178 },
    { 0x8064, 131 },
    { 0x8065, 147 },
    { 0x8066, 163 },
    { 0x8067, 179 },
    { 0x806C, 132 },
    { 0x806D, 148 },
    { 0x806E, 164 },
    { 0x806F, 180 },
    { 0x8074, 133 },
    { 0x8075, 149 },
    { 0x8076, 165 },
    { 0x8077, 181 },
    { 0x807C, 134 },
    { 0x807D, 150 },
    { 0x807E, 166 },
    { 0x807F, 182 },
    { 0x8080, 2 },
    { 0x8084, 101 },
    { 0x808C, 3 },
    { 0x809C, 184 },
    { 0x80A4, 185 },
    { 0x83C6, 186 },
    { 0x83CE, 187 },
    { 0x83F6, 4 },
    { 0x8801, 374 },
    { 0x8802, 376 },
    { 0x8804, 383 },
    { 0x8805, 389 },
    { 0x8806, 53 },
    { 0x8807, 401 },
    { 0x8808, 363 },
    { 0x8809, 375 },
    { 0x880A, 377 },
    { 0x880C, 384 },
    { 0x880D, 390 },
    { 0x880E, 54 },
    { 0x880F, 402 },
    { 0x8810, 364 },
    { 0x8812, 378 },
    { 0x8814, 385 },
    { 0x8815, 391 },
    { 0x8816, 55 },
    { 0x8817, 403 },
    { 0x8818, 52 },
    { 0x881A, 379 },
    { 0x881D, 392 },
    { 0x881E, 56 },
    { 0x881F, 404 },
    { 0x8820, 365 },
    { 0x8825, 393 },
    { 0x8826, 57 },
    { 0x8827, 405 },
    { 0x882D, 394 },
    { 0x882E, 58 },
    { 0x882F, 406 },
    { 0x8830, 366 },
    { 0x8834, 386 },
    { 0x8835, 395 },
    { 0x8837, 407 },
    { 0x883C, 387 },
    { 0x883D, 396 },
    { 0x883F, 408 },
    { 0x8840, 367 },
    { 0x8842, 380 },
    { 0x8844, 388 },
    { 0x8845, 397 },
    { 0x8847, 59 },
    { 0x8848, 368 },
    { 0x884A, 381 },
    { 0x884D, 398 },
    { 0x884F, 60 },
    { 0x8852, 382 },
    { 0x8855, 399 },
    { 0x8857, 61 },
    { 0x8858, 369 },
    { 0x885D, 400 },
    { 0x885F, 62 },
    { 0x8860, 370 },
    { 0x8867, 63 },
    { 0x8868, 371 },
    { 0x886F, 64 },
    { 0x8870, 372 },
    { 0x8877, 65 },
    { 0x8878, 373 },
    { 0x887F, 66 },
    { 0x8881, 423 },
    { 0x8882, 439 },
    { 0x8883, 455 },
    { 0x8884, 103 },
    { 0x8889, 424 },
    { 0x888A, 440 },
    { 0x888B, 456 },
    { 0x888C, 67 },
    { 0x8890, 409 },
    { 0x8891, 425 },
    { 0x8892, 441 },
    { 0x8893, 457 },
    { 0x8898, 410 },
    { 0x8899, 426 },
    { 0x889A, 442 },
    { 0x889B, 458 },
    { 0x88A0, 411 },
    { 0x88A1, 427 },
    { 0x88A2, 443 },
    { 0x88A3, 459 },
    { 0x88A4, 463 },
    { 0x88A8, 412 },
    { 0x88A9, 428 },
    { 0x88AA, 444 },
    { 0x88AB, 460 },
    { 0x88AC, 68 },
    { 0x88B0, 413 },
    { 0x88B1, 429 },
    { 0x88B2, 445 },
    { 0x88B3, 461 },
    { 0x88B8, 414 },
    { 0x88B9, 430 },
    { 0x88BA, 446 },
    { 0x88BB, 462 },
    { 0x88C0, 415 },
    { 0x88C1, 431 },
    { 0x88C2, 447 },
    { 0x88C8, 416 },
    { 0x88C9, 432 },
    { 0x88CA, 448 },
    { 0x88D0, 417 },
    { 0x88D1, 433 },
    { 0x88D2, 449 },
    { 0x88D8, 418 },
    { 0x88D9, 434 },
    { 0x88DA, 450 },
    { 0x88E0, 419 },
    { 0x88E1, 435 },
    { 0x88E2, 451 },
    { 0x88E8, 420 },
    { 0x88E9, 436 },
    { 0x88EA, 452 },
    { 0x88F0, 421 },
    { 0x88F1, 437 },
    { 0x88F2, 453 },
    { 0x88F8, 422 },
    { 0x88F9, 438 },
    { 0x88FA, 454 },
    { 0x8900, 464 },
    { 0x8901, 472 },
    { 0x8902, 480 },
    { 0x8903, 488 },
    { 0x8904, 496 },
    { 0x8905, 500 },
    { 0x8906, 504 },
    { 0x8907, 508 },
    { 0x8910, 465 },
    { 0x8911, 473 },
    { 0x8912, 481 },
    { 0x8913, 489 },
    { 0x8920, 466 },
    { 0x8921, 474 },
    { 0x8922, 482 },
    { 0x8923, 490 },
    { 0x8924, 497 },
    { 0x8925, 501 },
    { 0x8926, 505 },
    { 0x8927, 509 },
    { 0x8930, 467 },
    { 0x8931, 475 },
    { 0x8932, 483 },
    { 0x8933, 491 },
    { 0x8940, 468 },
    { 0x8941, 476 },
    { 0x8942, 484 },
    { 0x8943, 492 },
    { 0x8944, 498 },
    { 0x8945, 502 },
    { 0x8946, 506 },
    { 0x8947, 510 },
    { 0x8950, 469 },
    { 0x8951, 477 },
    { 0x8952, 485 },
    { 0x8953, 493 },
    { 0x8960, 470 },
    { 0x8961, 478 },
    { 0x8962, 486 },
    { 0x8963, 494 },
    { 0x8964, 499 },
    { 0x8965, 503 },
    { 0x8966, 507 },
    { 0x8967, 511 },
    { 0x8970, 471 },
    { 0x8971, 479 },
    { 0x8972, 487 },
    { 0x8973, 495 },
    { 0x8980, 512 },
    { 0x8981, 520 },
    { 0x8982, 528 },
    { 0x898A, 529 },
    { 0x8990, 513 },
    { 0x8991, 521 },
    { 0x8992, 530 },
    { 0x899A, 531 },
    { 0x89A0, 514 },
    { 0x89A1, 522 },
    { 0x89B0, 515 },
    { 0x89B1, 523 },
    { 0x89C0, 516 },
    { 0x89C1, 524 },
    { 0x89D0, 517 },
    { 0x89D1, 525 },
    { 0x89E0, 518 },
    { 0x89E1, 526 },
    { 0x89F0, 519 },
    { 0x89F1, 527 },
    { 0x8B84, 532 },
    { 0x8B97, 74 },
    { 0x8B9F, 75 },
    { 0x8BA7, 76 },
    { 0x8BAF, 77 },
    { 0x8BB7, 78 },
    { 0x8BBF, 79 },
    { 0x8BC6, 533 },
    { 0x8BC7, 80 },
    { 0x8BCE, 534 },
    { 0x8BCF, 81 },
    { 0x8BD6, 69 },
    { 0x8BD7, 82 },
    { 0x8BDE, 70 },
    { 0x8BDF, 83 },
    { 0x8BE6, 104 },
    { 0x8BE7, 84 },
    { 0x8BEE, 71 },
    { 0x8BEF, 85 },
    { 0x8BF6, 72 },
    { 0x8BF7, 86 },
    { 0x8BFE, 73 },
    { 0x8BFF, 87 },
    { 0x9000, 113 },
    { 0x9080, 183 },
    { 0x9808, 0 },
    { 0x9820, 116 },
    { 0x9828, 1 },
    { 0x9828, 100 },
    { 0xA038, 118 },
    { 0xC000, 7 },
    { 0xC005, 12 },
    { 0xC006, 13 },
    { 0xC008, 16 },
    { 0xC009, 17 },
    { 0xC00A, 18 },
    { 0xC00B, 19 },
    { 0xC00C, 20 },
    { 0xC00D, 21 },
    { 0xC00E, 22 },
    { 0xC00F, 23 },
    { 0xC010, 24 },
    { 0xC011, 25 },
    { 0xC012, 26 },
    { 0xC013, 27 },
    { 0xC014, 28 },
    { 0xC015, 29 },
    { 0xC016, 51 },
    { 0xC017, 30 },
    { 0xC018, 42 },
    { 0xC019, 43 },
    { 0xC01A, 44 },
    { 0xC020, 31 },
    { 0xC021, 32 },
    { 0xC024, 96 },
    { 0xC028, 33 },
    { 0xC029, 34 },
    { 0xC02C, 35 },
    { 0xC02D, 36 },
    { 0xC030, 37 },
    { 0xC031, 38 },
    { 0xC038, 39 },
    { 0xC039, 40 },
    { 0xC03A, 41 },
    { 0xC080, 192 },
    { 0xC081, 195 },
    { 0xC082, 191 },
    { 0xC090, 732 },
    { 0xC091, 727 },
    { 0xC100, 207 },
    { 0xC101, 210 },
    { 0xC102, 211 },
    { 0xC108, 638 },
    { 0xC109, 639 },
    { 0xC10A, 640 },
    { 0xC10B, 641 },
    { 0xC110, 642 },
    { 0xC111, 643 },
    { 0xC112, 644 },
    { 0xC113, 645 },
    { 0xC118, 646 },
    { 0xC119, 647 },
    { 0xC200, 217 },
    { 0xC201, 220 },
    { 0xC208, 223 },
    { 0xC210, 226 },
    { 0xC212, 229 },
    { 0xC213, 583 },
    { 0xC214, 615 },
    { 0xC230, 537 },
    { 0xC288, 239 },
    { 0xC289, 242 },
    { 0xC290, 245 },
    { 0xC298, 98 },
    { 0xC299, 629 },
    { 0xC2A0, 99 },
    { 0xC2A1, 630 },
    { 0xC2A2, 631 },
    { 0xC2A3, 632 },
    { 0xC2A4, 662 },
    { 0xC2A5, 657 },
    { 0xC2A6, 658 },
    { 0xC2A8, 633 },
    { 0xC2A9, 634 },
    { 0xC2AA, 660 },
    { 0xC2AB, 661 },
    { 0xC2AF, 659 },
    { 0xC300, 249 },
    { 0xC3A0, 253 },
    { 0xC4C8, 622 },
    { 0xC4CA, 623 },
    { 0xC4CB, 624 },
    { 0xC4CC, 625 },
    { 0xC4CD, 626 },
    { 0xC4CE, 627 },
    { 0xC4CF, 628 },
    { 0xC4D0, 616 },
    { 0xC4D1, 617 },
    { 0xC4D3, 618 },
    { 0xC4D7, 619 },
    { 0xC4F1, 263 },
    { 0xC4F2, 264 },
    { 0xC510, 266 },
    { 0xC518, 269 },
    { 0xC520, 584 },
    { 0xC521, 585 },
    { 0xC522, 586 },
    { 0xC523, 587 },
    { 0xC524, 678 },
    { 0xC527, 97 },
    { 0xC528, 664 },
    { 0xC529, 663 },
    { 0xC600, 272 },
    { 0xC601, 45 },
    { 0xC602, 275 },
    { 0xC608, 48 },
    { 0xC609, 635 },
    { 0xC640, 89 },
    { 0xC641, 106 },
    { 0xC642, 91 },
    { 0xC643, 536 },
    { 0xC644, 547 },
    { 0xC645, 548 },
    { 0xC646, 549 },
    { 0xC647, 550 },
    { 0xC648, 551 },
    { 0xC649, 552 },
    { 0xC64A, 553 },
    { 0xC64B, 554 },
    { 0xC659, 107 },
    { 0xC65B, 92 },
    { 0xC65D, 108 },
    { 0xC65E, 109 },
    { 0xC65F, 110 },
    { 0xC660, 88 },
    { 0xC661, 105 },
    { 0xC662, 90 },
    { 0xC663, 535 },
    { 0xC664, 538 },
    { 0xC665, 540 },
    { 0xC666, 543 },
    { 0xC667, 544 },
    { 0xC668, 546 },
    { 0xC681, 278 },
    { 0xC684, 283 },
    { 0xC708, 286 },
    { 0xC800, 8 },
    { 0xC801, 10 },
    { 0xC802, 9 },
    { 0xC807, 14 },
    { 0xD000, 188 },
    { 0xD801, 11 },
    { 0xD807, 15 },
    { 0xDA10, 227 },
    { 0xDA11, 228 },
    { 0xDA15, 730 },
    { 0xDA20, 234 },
    { 0xDA21, 235 },
    { 0xDA28, 236 },
    { 0xDA29, 237 },
    { 0xDCE0, 254 },
    { 0xDCE1, 255 },
    { 0xDCE2, 256 },
    { 0xDCE3, 257 },
    { 0xDCE4, 102 },
    { 0xDCE5, 258 },
    { 0xDCE6, 5 },
    { 0xDCE7, 6 },
    { 0xDCE8, 259 },
    { 0xDCE9, 260 },
    { 0xDCEA, 261 },
    { 0xDCF0, 262 },
    { 0xDCF3, 265 },
    { 0xDE82, 279 },
    { 0xDE83, 282 },
    { 0xDE90, 679 },
    { 0xDE91, 680 },
    { 0xDE92, 681 },
    { 0xDE93, 682 },
    { 0xDE94, 683 },
    { 0xDE95, 684 },
    { 0xDE98, 693 },
    { 0xDE99, 694 },
    { 0xDEA0, 685 },
    { 0xDEA1, 686 },
    { 0xDEA2, 687 },
    { 0xDEA3, 688 },
    { 0xDEB0, 689 },
    { 0xDEB1, 690 },
    { 0xDEB2, 691 },
    { 0xDEB3, 692 },
    { 0xDEE0, 695 },
    { 0xDEE1, 696 },
    { 0xDEE2, 697 },
    { 0xDEE3, 698 },
    { 0xDEE4, 699 },
    { 0xDEE5, 700 },
    { 0xDEE6, 701 },
    { 0xDEE7, 702 },
    { 0xDEE8, 703 },
    { 0xDEE9, 704 },
    { 0xDEEA, 705 },
    { 0xDEEB, 706 },
    { 0xDEEC, 707 },
    { 0xDEED, 708 },
    { 0xDEEE, 709 },
    { 0xDEEF, 710 },
    { 0xDEF0, 711 },
    { 0xDEF1, 712 },
    { 0xDEF2, 713 },
    { 0xDEF3, 714 },
    { 0xDEF4, 715 },
    { 0xDEF5, 716 },
    { 0xDEF6, 717 },
    { 0xDEF7, 718 },
    { 0xDEF8, 719 },
    { 0xDEF9, 720 },
    { 0xDEFA, 721 },
    { 0xDEFB, 722 },
    { 0xDEFC, 723 },
    { 0xDEFD, 724 },
    { 0xDEFE, 725 },
    { 0xDEFF, 726 },
    { 0xDF00, 284 },
    { 0xDF01, 49 },
    { 0xDF02, 50 },
    { 0xDF10, 288 },
    { 0xDF11, 291 },
    { 0xDF12, 294 },
    { 0xDF18, 297 },
    { 0xDF19, 298 },
    { 0xDF1A, 299 },
    { 0xDF40, 300 },
    { 0xDF41, 301 },
    { 0xDF42, 302 },
    { 0xDF43, 303 },
    { 0xDF44, 304 },
    { 0xDF45, 305 },
    { 0xDF46, 306 },
    { 0xDF47, 307 },
    { 0xDF48, 308 },
    { 0xDF49, 309 },
    { 0xDF4A, 310 },
    { 0xDF4B, 311 },
    { 0xDF4C, 312 },
    { 0xDF4D, 313 },
    { 0xDF4E, 314 },
    { 0xDF4F, 315 },
    { 0xDF50, 316 },
    { 0xDF51, 317 },
    { 0xDF52, 318 },
    { 0xDF53, 319 },
    { 0xDF54, 320 },
    { 0xDF55, 321 },
    { 0xDF56, 322 },
    { 0xDF57, 323 },
    { 0xDF58, 324 },
    { 0xDF59, 325 },
    { 0xDF5A, 326 },
    { 0xDF5B, 327 },
    { 0xDF5C, 328 },
    { 0xDF5D, 329 },
    { 0xDF5E, 330 },
    { 0xDF60, 332 },
    { 0xDF61, 333 },
    { 0xDF62, 334 },
    { 0xDF63, 335 },
    { 0xDF64, 336 },
    { 0xDF65, 337 },
    { 0xDF66, 338 },
    { 0xDF67, 339 },
    { 0xDF68, 340 },
    { 0xDF69, 341 },
    { 0xDF6A, 342 },
    { 0xDF6B, 343 },
    { 0xDF6C, 344 },
    { 0xDF6D, 345 },
    { 0xDF6E, 346 },
    { 0xDF6F, 347 },
    { 0xDF70, 348 },
    { 0xDF71, 349 },
    { 0xDF72, 350 },
    { 0xDF73, 351 },
    { 0xDF74, 352 },
    { 0xDF75, 353 },
    { 0xDF76, 354 },
    { 0xDF77, 355 },
    { 0xDF78, 356 },
    { 0xDF79, 357 },
    { 0xDF7A, 358 },
    { 0xDF7B, 359 },
    { 0xDF7C, 360 },
    { 0xDF7D, 361 },
    { 0xDF7E, 362 },
    { 0xDF7F, 331 },
    { 0xE000, 189 },
    { 0xE005, 190 },
    { 0xE080, 193 },
    { 0xE081, 196 },
    { 0xE088, 198 },
    { 0xE089, 200 },
    { 0xE08A, 202 },
    { 0xE08B, 204 },
    { 0xE08F, 205 },
    { 0xE090, 733 },
    { 0xE091, 728 },
    { 0xE099, 656 },
    { 0xE100, 208 },
    { 0xE101, 588 },
    { 0xE102, 212 },
    { 0xE108, 214 },
    { 0xE10A, 215 },
    { 0xE110, 731 },
    { 0xE130, 649 },
    { 0xE132, 648 },
    { 0xE180, 216 },
    { 0xE200, 218 },
    { 0xE201, 221 },
    { 0xE208, 224 },
    { 0xE218, 230 },
    { 0xE219, 231 },
    { 0xE21A, 232 },
    { 0xE21B, 233 },
    { 0xE281, 238 },
    { 0xE288, 240 },
    { 0xE289, 243 },
    { 0xE290, 246 },
    { 0xE293, 637 },
    { 0xE298, 248 },
    { 0xE300, 250 },
    { 0xE304, 252 },
    { 0xE4C8, 620 },
    { 0xE510, 267 },
    { 0xE518, 270 },
    { 0xE520, 668 },
    { 0xE521, 669 },
    { 0xE528, 665 },
    { 0xE530, 670 },
    { 0xE531, 671 },
    { 0xE532, 672 },
    { 0xE533, 673 },
    { 0xE534, 674 },
    { 0xE535, 675 },
    { 0xE536, 676 },
    { 0xE537, 677 },
    { 0xE600, 273 },
    { 0xE601, 46 },
    { 0xE602, 276 },
    { 0xE609, 636 },
    { 0xE640, 555 },
    { 0xE641, 556 },
    { 0xE642, 557 },
    { 0xE643, 558 },
    { 0xE648, 559 },
    { 0xE649, 560 },
    { 0xE64A, 561 },
    { 0xE64B, 562 },
    { 0xE64C, 566 },
    { 0xE64D, 541 },
    { 0xE658, 563 },
    { 0xE659, 93 },
    { 0xE65A, 564 },
    { 0xE65B, 94 },
    { 0xE65D, 95 },
    { 0xE65F, 565 },
    { 0xE660, 567 },
    { 0xE661, 568 },
    { 0xE662, 569 },
    { 0xE663, 570 },
    { 0xE664, 571 },
    { 0xE665, 572 },
    { 0xE666, 573 },
    { 0xE667, 574 },
    { 0xE668, 575 },
    { 0xE669, 576 },
    { 0xE66A, 577 },
    { 0xE66B, 578 },
    { 0xE66C, 579 },
    { 0xE66D, 580 },
    { 0xE66E, 581 },
    { 0xE66F, 582 },
    { 0xE681, 589 },
    { 0xE682, 280 },
    { 0xE703, 285 },
    { 0xE708, 287 },
    { 0xE710, 289 },
    { 0xE711, 292 },
    { 0xE712, 295 },
    { 0xE718, 590 },
    { 0xE719, 592 },
    { 0xE71A, 591 },
    { 0xE720, 650 },
    { 0xE721, 652 },
    { 0xE722, 651 },
    { 0xE728, 653 },
    { 0xE729, 655 },
    { 0xE72A, 654 },
    { 0xE880, 593 },
    { 0xE882, 594 },
    { 0xE890, 735 },
    { 0xE891, 729 },
    { 0xE900, 595 },
    { 0xE901, 596 },
    { 0xE902, 597 },
    { 0xEA00, 613 },
    { 0xEA01, 614 },
    { 0xEA88, 598 },
    { 0xEA89, 599 },
    { 0xEA90, 600 },
    { 0xEB00, 601 },
    { 0xECC8, 621 },
    { 0xED10, 602 },
    { 0xED18, 603 },
    { 0xED28, 667 },
    { 0xEE00, 604 },
    { 0xEE81, 605 },
    { 0xEF08, 606 },
    { 0xEF10, 607 },
    { 0xEF11, 608 },
    { 0xEF12, 609 },
    { 0xEF18, 610 },
    { 0xEF19, 611 },
    { 0xEF1A, 612 },
    { 0xF080, 194 },
    { 0xF081, 197 },
    { 0xF088, 199 },
    { 0xF089, 201 },
    { 0xF08A, 203 },
    { 0xF090, 734 },
    { 0xF099, 206 },
    { 0xF100, 209 },
    { 0xF102, 213 },
    { 0xF200, 219 },
    { 0xF201, 222 },
    { 0xF208, 225 },
    { 0xF288, 241 },
    { 0xF289, 244 },
    { 0xF290, 247 },
    { 0xF300, 251 },
    { 0xF510, 268 },
    { 0xF518, 271 },
    { 0xF528, 666 },
    { 0xF600, 274 },
    { 0xF601, 47 },
    { 0xF602, 277 },
    { 0xF664, 539 },
    { 0xF665, 542 },
    { 0xF667, 545 },
    { 0xF682, 281 },
    { 0xFF10, 290 },
    { 0xFF11, 293 },
    { 0xFF12, 296 },
    { 0xFF90, 736 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &SysRegsList[Index[i].index];
}

static const PState PStatesList[] = {
  { "spsel",  0x5 }, // 0
  { "daifset",  0x1E }, // 1
  { "daifclr",  0x1F }, // 2
  { "pan",  0x4 }, // 3
  { "uao",  0x3 }, // 4
  { "dit",  0x1A }, // 5
};

const PState *lookupPStateByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x3, 4 },
    { 0x4, 3 },
    { 0x5, 0 },
    { 0x1A, 5 },
    { 0x1E, 1 },
    { 0x1F, 2 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &PStatesList[Index[i].index];
}

static const SVEPREDPAT SVEPREDPATsList[] = {
  { "pow2", 0x0 }, // 0
  { "vl1", 0x1 }, // 1
  { "vl2", 0x2 }, // 2
  { "vl3", 0x3 }, // 3
  { "vl4", 0x4 }, // 4
  { "vl5", 0x5 }, // 5
  { "vl6", 0x6 }, // 6
  { "vl7", 0x7 }, // 7
  { "vl8", 0x8 }, // 8
  { "vl16", 0x9 }, // 9
  { "vl32", 0xa }, // 10
  { "vl64", 0xb }, // 11
  { "vl128", 0xc }, // 12
  { "vl256", 0xd }, // 13
  { "mul4", 0x1d }, // 14
  { "mul3", 0x1e }, // 15
  { "all", 0x1f }, // 16
};

const SVEPREDPAT *lookupSVEPREDPATByEncoding(uint16_t Encoding)
{
  unsigned int i;
  static const struct IndexType Index[] = {
    { 0x0, 0 },
    { 0x1, 1 },
    { 0x2, 2 },
    { 0x3, 3 },
    { 0x4, 4 },
    { 0x5, 5 },
    { 0x6, 6 },
    { 0x7, 7 },
    { 0x8, 8 },
    { 0x9, 9 },
    { 0xA, 10 },
    { 0xB, 11 },
    { 0xC, 12 },
    { 0xD, 13 },
    { 0x1D, 14 },
    { 0x1E, 15 },
    { 0x1F, 16 },
  };

  i = binsearch_IndexTypeEncoding(Index, ARR_SIZE(Index), Encoding);
  if (i == -1)
    return NULL;
  else
    return &SVEPREDPATsList[Index[i].index];
}

static const ExactFPImm ExactFPImmsList[] = {
  { "zero", 0x0, "0.0" }, // 0
  { "half", 0x1, "0.5" }, // 1
  { "one", 0x2, "1.0" }, // 2
  { "two", 0x3, "2.0" }, // 3
};

const ExactFPImm *lookupExactFPImmByEnum(uint16_t Encoding)
{
  static const struct IndexType Index[] = {
    { 0x0, 0 },
    { 0x1, 1 },
    { 0x2, 2 },
    { 0x3, 3 },
  };

  if (Encoding >= ARR_SIZE(ExactFPImmsList))
    return NULL;
  else
    return &ExactFPImmsList[Index[Encoding].index];
}