#ifdef GET_SUPPORTED_EXTENSIONS
#undef GET_SUPPORTED_EXTENSIONS

static const RISCVSupportedExtension SupportedExtensions[] = {
    {"a", {2, 1}},
    {"b", {1, 0}},
    {"c", {2, 0}},
    {"d", {2, 2}},
    {"e", {2, 0}},
    {"f", {2, 2}},
    {"h", {1, 0}},
    {"i", {2, 1}},
    {"m", {2, 0}},
    {"q", {2, 2}},
    {"sdext", {1, 0}},
    {"sdtrig", {1, 0}},
    {"sha", {1, 0}},
    {"shcounterenw", {1, 0}},
    {"shgatpa", {1, 0}},
    {"shlcofideleg", {1, 0}},
    {"shtvala", {1, 0}},
    {"shvsatpa", {1, 0}},
    {"shvstvala", {1, 0}},
    {"shvstvecd", {1, 0}},
    {"smaia", {1, 0}},
    {"smcdeleg", {1, 0}},
    {"smcntrpmf", {1, 0}},
    {"smcsrind", {1, 0}},
    {"smctr", {1, 0}},
    {"smdbltrp", {1, 0}},
    {"smepmp", {1, 0}},
    {"smmpm", {1, 0}},
    {"smnpm", {1, 0}},
    {"smrnmi", {1, 0}},
    {"smstateen", {1, 0}},
    {"ssaia", {1, 0}},
    {"ssccfg", {1, 0}},
    {"ssccptr", {1, 0}},
    {"sscofpmf", {1, 0}},
    {"sscounterenw", {1, 0}},
    {"sscsrind", {1, 0}},
    {"ssctr", {1, 0}},
    {"ssdbltrp", {1, 0}},
    {"ssnpm", {1, 0}},
    {"sspm", {1, 0}},
    {"ssqosid", {1, 0}},
    {"ssstateen", {1, 0}},
    {"ssstrict", {1, 0}},
    {"sstc", {1, 0}},
    {"sstvala", {1, 0}},
    {"sstvecd", {1, 0}},
    {"ssu64xl", {1, 0}},
    {"supm", {1, 0}},
    {"svade", {1, 0}},
    {"svadu", {1, 0}},
    {"svbare", {1, 0}},
    {"svinval", {1, 0}},
    {"svnapot", {1, 0}},
    {"svpbmt", {1, 0}},
    {"svrsw60t59b", {1, 0}},
    {"svvptc", {1, 0}},
    {"v", {1, 0}},
    {"xaifet", {1, 0}},
    {"xandesbfhcvt", {5, 0}},
    {"xandesperf", {5, 0}},
    {"xandesvbfhcvt", {5, 0}},
    {"xandesvdot", {5, 0}},
    {"xandesvpackfph", {5, 0}},
    {"xandesvsinth", {5, 0}},
    {"xandesvsintload", {5, 0}},
    {"xcvalu", {1, 0}},
    {"xcvbi", {1, 0}},
    {"xcvbitmanip", {1, 0}},
    {"xcvelw", {1, 0}},
    {"xcvmac", {1, 0}},
    {"xcvmem", {1, 0}},
    {"xcvsimd", {1, 0}},
    {"xmipscbop", {1, 0}},
    {"xmipscmov", {1, 0}},
    {"xmipsexectl", {1, 0}},
    {"xmipslsp", {1, 0}},
    {"xqccmp", {0, 3}},
    {"xqci", {0, 13}},
    {"xqcia", {0, 7}},
    {"xqciac", {0, 3}},
    {"xqcibi", {0, 2}},
    {"xqcibm", {0, 8}},
    {"xqcicli", {0, 3}},
    {"xqcicm", {0, 2}},
    {"xqcics", {0, 2}},
    {"xqcicsr", {0, 4}},
    {"xqciint", {0, 10}},
    {"xqciio", {0, 1}},
    {"xqcilb", {0, 2}},
    {"xqcili", {0, 2}},
    {"xqcilia", {0, 2}},
    {"xqcilo", {0, 3}},
    {"xqcilsm", {0, 6}},
    {"xqcisim", {0, 2}},
    {"xqcisls", {0, 2}},
    {"xqcisync", {0, 3}},
    {"xsfcease", {1, 0}},
    {"xsfmm128t", {0, 6}},
    {"xsfmm16t", {0, 6}},
    {"xsfmm32a", {0, 6}},
    {"xsfmm32a16f", {0, 6}},
    {"xsfmm32a32f", {0, 6}},
    {"xsfmm32a8f", {0, 6}},
    {"xsfmm32a8i", {0, 6}},
    {"xsfmm32t", {0, 6}},
    {"xsfmm64a64f", {0, 6}},
    {"xsfmm64t", {0, 6}},
    {"xsfmmbase", {0, 6}},
    {"xsfvcp", {1, 0}},
    {"xsfvfbfexp16e", {0, 5}},
    {"xsfvfexp16e", {0, 5}},
    {"xsfvfexp32e", {0, 5}},
    {"xsfvfexpa", {0, 2}},
    {"xsfvfexpa64e", {0, 2}},
    {"xsfvfnrclipxfqf", {1, 0}},
    {"xsfvfwmaccqqq", {1, 0}},
    {"xsfvqmaccdod", {1, 0}},
    {"xsfvqmaccqoq", {1, 0}},
    {"xsifivecdiscarddlone", {1, 0}},
    {"xsifivecflushdlone", {1, 0}},
    {"xsmtvdot", {1, 0}},
    {"xtheadba", {1, 0}},
    {"xtheadbb", {1, 0}},
    {"xtheadbs", {1, 0}},
    {"xtheadcmo", {1, 0}},
    {"xtheadcondmov", {1, 0}},
    {"xtheadfmemidx", {1, 0}},
    {"xtheadmac", {1, 0}},
    {"xtheadmemidx", {1, 0}},
    {"xtheadmempair", {1, 0}},
    {"xtheadsync", {1, 0}},
    {"xtheadvdot", {1, 0}},
    {"xventanacondops", {1, 0}},
    {"xwchc", {2, 2}},
    {"za128rs", {1, 0}},
    {"za64rs", {1, 0}},
    {"zaamo", {1, 0}},
    {"zabha", {1, 0}},
    {"zacas", {1, 0}},
    {"zalasr", {1, 0}},
    {"zalrsc", {1, 0}},
    {"zama16b", {1, 0}},
    {"zawrs", {1, 0}},
    {"zba", {1, 0}},
    {"zbb", {1, 0}},
    {"zbc", {1, 0}},
    {"zbkb", {1, 0}},
    {"zbkc", {1, 0}},
    {"zbkx", {1, 0}},
    {"zbs", {1, 0}},
    {"zca", {1, 0}},
    {"zcb", {1, 0}},
    {"zcd", {1, 0}},
    {"zce", {1, 0}},
    {"zcf", {1, 0}},
    {"zclsd", {1, 0}},
    {"zcmop", {1, 0}},
    {"zcmp", {1, 0}},
    {"zcmt", {1, 0}},
    {"zdinx", {1, 0}},
    {"zfa", {1, 0}},
    {"zfbfmin", {1, 0}},
    {"zfh", {1, 0}},
    {"zfhmin", {1, 0}},
    {"zfinx", {1, 0}},
    {"zhinx", {1, 0}},
    {"zhinxmin", {1, 0}},
    {"zic64b", {1, 0}},
    {"zicbom", {1, 0}},
    {"zicbop", {1, 0}},
    {"zicboz", {1, 0}},
    {"ziccamoa", {1, 0}},
    {"ziccamoc", {1, 0}},
    {"ziccif", {1, 0}},
    {"zicclsm", {1, 0}},
    {"ziccrse", {1, 0}},
    {"zicntr", {2, 0}},
    {"zicond", {1, 0}},
    {"zicsr", {2, 0}},
    {"zifencei", {2, 0}},
    {"zihintntl", {1, 0}},
    {"zihintpause", {2, 0}},
    {"zihpm", {2, 0}},
    {"zilsd", {1, 0}},
    {"zimop", {1, 0}},
    {"zk", {1, 0}},
    {"zkn", {1, 0}},
    {"zknd", {1, 0}},
    {"zkne", {1, 0}},
    {"zknh", {1, 0}},
    {"zkr", {1, 0}},
    {"zks", {1, 0}},
    {"zksed", {1, 0}},
    {"zksh", {1, 0}},
    {"zkt", {1, 0}},
    {"zmmul", {1, 0}},
    {"ztso", {1, 0}},
    {"zvbb", {1, 0}},
    {"zvbc", {1, 0}},
    {"zve32f", {1, 0}},
    {"zve32x", {1, 0}},
    {"zve64d", {1, 0}},
    {"zve64f", {1, 0}},
    {"zve64x", {1, 0}},
    {"zvfbfmin", {1, 0}},
    {"zvfbfwma", {1, 0}},
    {"zvfh", {1, 0}},
    {"zvfhmin", {1, 0}},
    {"zvkb", {1, 0}},
    {"zvkg", {1, 0}},
    {"zvkn", {1, 0}},
    {"zvknc", {1, 0}},
    {"zvkned", {1, 0}},
    {"zvkng", {1, 0}},
    {"zvknha", {1, 0}},
    {"zvknhb", {1, 0}},
    {"zvks", {1, 0}},
    {"zvksc", {1, 0}},
    {"zvksed", {1, 0}},
    {"zvksg", {1, 0}},
    {"zvksh", {1, 0}},
    {"zvkt", {1, 0}},
    {"zvl1024b", {1, 0}},
    {"zvl128b", {1, 0}},
    {"zvl16384b", {1, 0}},
    {"zvl2048b", {1, 0}},
    {"zvl256b", {1, 0}},
    {"zvl32768b", {1, 0}},
    {"zvl32b", {1, 0}},
    {"zvl4096b", {1, 0}},
    {"zvl512b", {1, 0}},
    {"zvl64b", {1, 0}},
    {"zvl65536b", {1, 0}},
    {"zvl8192b", {1, 0}},
};

static const RISCVSupportedExtension SupportedExperimentalExtensions[] = {
    {"p", {0, 19}},
    {"smpmpmt", {0, 6}},
    {"svukte", {0, 3}},
    {"xrivosvisni", {0, 1}},
    {"xrivosvizip", {0, 1}},
    {"xsfmclic", {0, 1}},
    {"xsfsclic", {0, 1}},
    {"y", {0, 96}},
    {"zibi", {0, 1}},
    {"zicfilp", {1, 0}},
    {"zicfiss", {1, 0}},
    {"zvabd", {0, 7}},
    {"zvbc32e", {0, 7}},
    {"zvdot4a8i", {0, 1}},
    {"zvfbfa", {0, 1}},
    {"zvfofp8min", {0, 2}},
    {"zvkgs", {0, 7}},
};

#endif // GET_SUPPORTED_EXTENSIONS

#ifdef GET_IMPLIED_EXTENSIONS
#undef GET_IMPLIED_EXTENSIONS


static constexpr ImpliedExtsEntry ImpliedExts[] = {
    { {"a"}, "zaamo"},
    { {"a"}, "zalrsc"},
    { {"b"}, "zba"},
    { {"b"}, "zbb"},
    { {"b"}, "zbs"},
    { {"c"}, "zca"},
    { {"d"}, "f"},
    { {"f"}, "zicsr"},
    { {"m"}, "zmmul"},
    { {"p"}, "zmmul"},
    { {"p"}, "zba"},
    { {"p"}, "zbb"},
    { {"p"}, "zicsr"},
    { {"q"}, "d"},
    { {"sha"}, "h"},
    { {"sha"}, "ssstateen"},
    { {"sha"}, "shcounterenw"},
    { {"sha"}, "shvstvala"},
    { {"sha"}, "shtvala"},
    { {"sha"}, "shvstvecd"},
    { {"sha"}, "shvsatpa"},
    { {"sha"}, "shgatpa"},
    { {"smctr"}, "sscsrind"},
    { {"smdbltrp"}, "zicsr"},
    { {"ssctr"}, "sscsrind"},
    { {"ssdbltrp"}, "zicsr"},
    { {"v"}, "zvl128b"},
    { {"v"}, "zve64d"},
    { {"xaifet"}, "f"},
    { {"xandesbfhcvt"}, "f"},
    { {"xandesvbfhcvt"}, "zve32f"},
    { {"xandesvdot"}, "zve32x"},
    { {"xandesvpackfph"}, "f"},
    { {"xandesvsinth"}, "zve32x"},
    { {"xandesvsintload"}, "zve32x"},
    { {"xqccmp"}, "zca"},
    { {"xqci"}, "xqcia"},
    { {"xqci"}, "xqciac"},
    { {"xqci"}, "xqcibi"},
    { {"xqci"}, "xqcibm"},
    { {"xqci"}, "xqcicli"},
    { {"xqci"}, "xqcicm"},
    { {"xqci"}, "xqcics"},
    { {"xqci"}, "xqcicsr"},
    { {"xqci"}, "xqciint"},
    { {"xqci"}, "xqciio"},
    { {"xqci"}, "xqcilb"},
    { {"xqci"}, "xqcili"},
    { {"xqci"}, "xqcilia"},
    { {"xqci"}, "xqcilo"},
    { {"xqci"}, "xqcilsm"},
    { {"xqci"}, "xqcisim"},
    { {"xqci"}, "xqcisls"},
    { {"xqci"}, "xqcisync"},
    { {"xqciac"}, "zca"},
    { {"xqcibi"}, "zca"},
    { {"xqcibm"}, "zca"},
    { {"xqcicm"}, "zca"},
    { {"xqciint"}, "zca"},
    { {"xqcilb"}, "zca"},
    { {"xqcili"}, "zca"},
    { {"xqcilia"}, "zca"},
    { {"xqcilo"}, "zca"},
    { {"xqcisim"}, "zca"},
    { {"xqcisync"}, "zca"},
    { {"xsfmm128t"}, "xsfmmbase"},
    { {"xsfmm128t"}, "zvl512b"},
    { {"xsfmm16t"}, "xsfmmbase"},
    { {"xsfmm16t"}, "zvl64b"},
    { {"xsfmm32a"}, "xsfmm32a8i"},
    { {"xsfmm32a"}, "xsfmm32a16f"},
    { {"xsfmm32a"}, "xsfmm32a32f"},
    { {"xsfmm32a16f"}, "xsfmmbase"},
    { {"xsfmm32a16f"}, "zve32f"},
    { {"xsfmm32a32f"}, "xsfmmbase"},
    { {"xsfmm32a32f"}, "zve32f"},
    { {"xsfmm32a8f"}, "xsfmmbase"},
    { {"xsfmm32a8f"}, "zve32f"},
    { {"xsfmm32a8i"}, "xsfmmbase"},
    { {"xsfmm32t"}, "xsfmmbase"},
    { {"xsfmm32t"}, "zvl128b"},
    { {"xsfmm64a64f"}, "xsfmmbase"},
    { {"xsfmm64a64f"}, "zve64d"},
    { {"xsfmm64t"}, "xsfmmbase"},
    { {"xsfmm64t"}, "zvl256b"},
    { {"xsfmmbase"}, "zve32x"},
    { {"xsfvcp"}, "zve32x"},
    { {"xsfvfexp16e"}, "zvfh"},
    { {"xsfvfexp32e"}, "zve32f"},
    { {"xsfvfexpa"}, "zve32f"},
    { {"xsfvfexpa64e"}, "xsfvfexpa"},
    { {"xsfvfexpa64e"}, "zve64d"},
    { {"xsfvfnrclipxfqf"}, "zve32f"},
    { {"xsfvfwmaccqqq"}, "zvfbfmin"},
    { {"xsfvfwmaccqqq"}, "zvl128b"},
    { {"xsfvqmaccdod"}, "zve32x"},
    { {"xsfvqmaccdod"}, "zvl128b"},
    { {"xsfvqmaccqoq"}, "zve32x"},
    { {"xsfvqmaccqoq"}, "zvl256b"},
    { {"xsmtvdot"}, "zve32f"},
    { {"xtheadvdot"}, "v"},
    { {"xwchc"}, "zca"},
    { {"zabha"}, "zaamo"},
    { {"zacas"}, "zaamo"},
    { {"zcb"}, "zca"},
    { {"zcd"}, "d"},
    { {"zcd"}, "zca"},
    { {"zce"}, "zca"},
    { {"zce"}, "zcb"},
    { {"zce"}, "zcmp"},
    { {"zce"}, "zcmt"},
    { {"zcf"}, "f"},
    { {"zcf"}, "zca"},
    { {"zclsd"}, "zilsd"},
    { {"zclsd"}, "zca"},
    { {"zcmop"}, "zca"},
    { {"zcmp"}, "zca"},
    { {"zcmt"}, "zca"},
    { {"zcmt"}, "zicsr"},
    { {"zdinx"}, "zfinx"},
    { {"zfa"}, "f"},
    { {"zfbfmin"}, "f"},
    { {"zfh"}, "zfhmin"},
    { {"zfhmin"}, "f"},
    { {"zfinx"}, "zicsr"},
    { {"zhinx"}, "zhinxmin"},
    { {"zhinxmin"}, "zfinx"},
    { {"zicfilp"}, "zicsr"},
    { {"zicfiss"}, "zicsr"},
    { {"zicfiss"}, "zimop"},
    { {"zicntr"}, "zicsr"},
    { {"zihpm"}, "zicsr"},
    { {"zk"}, "zkn"},
    { {"zk"}, "zkr"},
    { {"zk"}, "zkt"},
    { {"zkn"}, "zbkb"},
    { {"zkn"}, "zbkc"},
    { {"zkn"}, "zbkx"},
    { {"zkn"}, "zkne"},
    { {"zkn"}, "zknd"},
    { {"zkn"}, "zknh"},
    { {"zks"}, "zbkb"},
    { {"zks"}, "zbkc"},
    { {"zks"}, "zbkx"},
    { {"zks"}, "zksed"},
    { {"zks"}, "zksh"},
    { {"zvbb"}, "zvkb"},
    { {"zvbc"}, "zve64x"},
    { {"zvbc32e"}, "zve32x"},
    { {"zvdot4a8i"}, "zve32x"},
    { {"zve32f"}, "zve32x"},
    { {"zve32f"}, "f"},
    { {"zve32x"}, "zicsr"},
    { {"zve32x"}, "zvl32b"},
    { {"zve64d"}, "zve64f"},
    { {"zve64d"}, "d"},
    { {"zve64f"}, "zve32f"},
    { {"zve64f"}, "zve64x"},
    { {"zve64x"}, "zve32x"},
    { {"zve64x"}, "zvl64b"},
    { {"zvfbfa"}, "zve32f"},
    { {"zvfbfa"}, "zfbfmin"},
    { {"zvfbfmin"}, "zve32f"},
    { {"zvfbfwma"}, "zvfbfmin"},
    { {"zvfbfwma"}, "zfbfmin"},
    { {"zvfh"}, "zvfhmin"},
    { {"zvfh"}, "zfhmin"},
    { {"zvfhmin"}, "zve32f"},
    { {"zvfofp8min"}, "zve32f"},
    { {"zvkb"}, "zve32x"},
    { {"zvkg"}, "zve32x"},
    { {"zvkgs"}, "zvkg"},
    { {"zvkn"}, "zvkned"},
    { {"zvkn"}, "zvknhb"},
    { {"zvkn"}, "zvkb"},
    { {"zvkn"}, "zvkt"},
    { {"zvknc"}, "zvkn"},
    { {"zvknc"}, "zvbc"},
    { {"zvkned"}, "zve32x"},
    { {"zvkng"}, "zvkn"},
    { {"zvkng"}, "zvkg"},
    { {"zvknha"}, "zve32x"},
    { {"zvknhb"}, "zve64x"},
    { {"zvks"}, "zvksed"},
    { {"zvks"}, "zvksh"},
    { {"zvks"}, "zvkb"},
    { {"zvks"}, "zvkt"},
    { {"zvksc"}, "zvks"},
    { {"zvksc"}, "zvbc"},
    { {"zvksed"}, "zve32x"},
    { {"zvksg"}, "zvks"},
    { {"zvksg"}, "zvkg"},
    { {"zvksh"}, "zve32x"},
    { {"zvl1024b"}, "zvl512b"},
    { {"zvl128b"}, "zvl64b"},
    { {"zvl16384b"}, "zvl8192b"},
    { {"zvl2048b"}, "zvl1024b"},
    { {"zvl256b"}, "zvl128b"},
    { {"zvl32768b"}, "zvl16384b"},
    { {"zvl4096b"}, "zvl2048b"},
    { {"zvl512b"}, "zvl256b"},
    { {"zvl64b"}, "zvl32b"},
    { {"zvl65536b"}, "zvl32768b"},
    { {"zvl8192b"}, "zvl4096b"},
};

#endif // GET_IMPLIED_EXTENSIONS

#ifdef GET_SUPPORTED_PROFILES
#undef GET_SUPPORTED_PROFILES

static constexpr RISCVProfile SupportedProfiles[] = {
    {"rva20s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_za128rs1p0_ssccptr1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0"},
    {"rva20u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_za128rs1p0"},
    {"rva22s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zkt1p0_ssccptr1p0_sscounterenw1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svpbmt1p0"},
    {"rva22u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zkt1p0"},
    {"rva23s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zcb1p0_zcmop1p0_zkt1p0_zvbb1p0_zvfhmin1p0_zvkt1p0_sha1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_supm1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"},
    {"rva23u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zcb1p0_zcmop1p0_zkt1p0_zvbb1p0_zvfhmin1p0_zvkt1p0_supm1p0"},
    {"rvb23s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zcb1p0_zcmop1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"},
    {"rvb23u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zcb1p0_zcmop1p0_zkt1p0"},
    {"rvi20u32","rv32i2p1"},
    {"rvi20u64","rv64i2p1"},
};

static constexpr RISCVProfile SupportedExperimentalProfiles[] = {
    {"rvm23u32","rv32i2p1_m2p0_b1p0_zicbop1p0_zicond1p0_zihintntl1p0_zihintpause2p0_zimop1p0_zce1p0_zcmop1p0"},
};

#endif // GET_SUPPORTED_PROFILES

#ifndef PROC
#define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_SCALAR_UNALIGN, FAST_VECTOR_UNALIGN, MVENDORID, MARCHID, MIMPID)
#endif

PROC(AINEKKO_ERBIUM, {"an-erbium"}, {"rv64m2p0_f2p2_c2p0_xaifet1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_A25, {"andes-a25"}, {"rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_A45, {"andes-a45"}, {"rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_AX25, {"andes-ax25"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_AX45, {"andes-ax45"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_AX45MPV, {"andes-ax45mpv"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_N45, {"andes-n45"}, {"rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ANDES_NX45, {"andes-nx45"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_xandesperf5p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ESPERANTO_SOC1, {"et-soc1"}, {"rv64m2p0_f2p2_c2p0_xaifet1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(GENERIC_RV32, {"generic-rv32"}, {"rv32i2p1"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(GENERIC_RV64, {"generic-rv64"}, {"rv64i2p1"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(MIPS_P8700, {"mips-p8700"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zba1p0_zbb1p0_xmipscbop1p0_xmipscmov1p0_xmipsexectl1p0_xmipslsp1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ROCKET_RV32, {"rocket-rv32"}, {"rv32i2p1_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(ROCKET_RV64, {"rocket-rv64"}, {"rv64i2p1_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(RP2350_HAZARD3, {"rp2350-hazard3"}, {"rv32i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0_zcb1p0_zcmp1p0_zba1p0_zbb1p0_zbkb1p0_zbs1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E20, {"sifive-e20"}, {"rv32i2p1_m2p0_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E21, {"sifive-e21"}, {"rv32i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E24, {"sifive-e24"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E31, {"sifive-e31"}, {"rv32i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E34, {"sifive-e34"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_E76, {"sifive-e76"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_P450, {"sifive-p450"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zkt1p0"}, 1, 1, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_P470, {"sifive-p470"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zkt1p0_zvbb1p0_zvknc1p0_zvkng1p0_zvksc1p0_zvksg1p0_zvl128b1p0_xsifivecdiscarddlone1p0_xsifivecflushdlone1p0"}, 1, 1, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_P550, {"sifive-p550"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0_zba1p0_zbb1p0"}, 0, 0, 0x00000489, 0x8000000000000008, 0x0000000006220425)
PROC(SIFIVE_P670, {"sifive-p670"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zkt1p0_zvbb1p0_zvknc1p0_zvkng1p0_zvksc1p0_zvksg1p0_zvl128b1p0"}, 1, 1, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_P870, {"sifive-p870"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zama16b1p0_zawrs1p0_zfa1p0_zfh1p0_zfhmin1p0_zcb1p0_zcmop1p0_zkr1p0_zkt1p0_zvbb1p0_zvfbfmin1p0_zvfbfwma1p0_zvfh1p0_zvfhmin1p0_zvknc1p0_zvkng1p0_zvksc1p0_zvksg1p0_zvkt1p0_zvl128b1p0_supm1p0"}, 1, 1, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_S21, {"sifive-s21"}, {"rv64i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_S51, {"sifive-s51"}, {"rv64i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_S54, {"sifive-s54"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_S76, {"sifive-s76"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0_zihintpause2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_U54, {"sifive-u54"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_U74, {"sifive-u74"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_X280, {"sifive-x280"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zifencei2p0_zfh1p0_zba1p0_zbb1p0_zvfh1p0_zvl512b1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SIFIVE_X390, {"sifive-x390"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_ziccrse1p0_zicfilp1p0_zicfiss1p0_zicntr2p0_zicond1p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfh1p0_zcb1p0_zcmop1p0_zkr1p0_zkt1p0_zvbb1p0_zvfbfmin1p0_zvfbfwma1p0_zvfh1p0_zvkt1p0_zvl1024b1p0_xsifivecdiscarddlone1p0_xsifivecflushdlone1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SPACEMIT_A100, {"spacemit-a100"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfbfmin1p0_zfh1p0_zfhmin1p0_zcb1p0_zcmop1p0_zbc1p0_zbkc1p0_zkt1p0_zvbb1p0_zvbc1p0_zvfbfwma1p0_zvfh1p0_zvfhmin1p0_zvkng1p0_zvknha1p0_zvksc1p0_zvksg1p0_zvkt1p0_zvl1024b1p0_smepmp1p0_smnpm1p0_smstateen1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm1p0_sspm1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_supm1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"}, 1, 0, 0x00000710, 0x8000000041000002, 0x10000000d5686200)
PROC(SPACEMIT_X60, {"spacemit-x60"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfh1p0_zfhmin1p0_zbc1p0_zbkc1p0_zkt1p0_zvfh1p0_zvkt1p0_zvl256b1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0_xsmtvdot1p0"}, 1, 0, 0x00000710, 0x8000000058000001, 0x1000000049772200)
PROC(SPACEMIT_X100, {"spacemit-x100"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfbfmin1p0_zfh1p0_zfhmin1p0_zcb1p0_zcmop1p0_zbc1p0_zbkc1p0_zkt1p0_zvbb1p0_zvbc1p0_zvfbfwma1p0_zvfh1p0_zvfhmin1p0_zvkng1p0_zvknha1p0_zvksc1p0_zvksg1p0_zvkt1p0_zvl256b1p0_supm1p0_xsmtvdot1p0"}, 1, 0, 0x00000710, 0x8000000058000002, 0x0000000033d8a600)
PROC(SYNTACORE_SCR1_BASE, {"syntacore-scr1-base"}, {"rv32i2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR1_MAX, {"syntacore-scr1-max"}, {"rv32i2p1_m2p0_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR3_RV32, {"syntacore-scr3-rv32"}, {"rv32i2p1_m2p0_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR3_RV64, {"syntacore-scr3-rv64"}, {"rv64i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR4_RV32, {"syntacore-scr4-rv32"}, {"rv32i2p1_m2p0_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR4_RV64, {"syntacore-scr4-rv64"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR5_RV32, {"syntacore-scr5-rv32"}, {"rv32i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR5_RV64, {"syntacore-scr5-rv64"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(SYNTACORE_SCR7, {"syntacore-scr7"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zba1p0_zbb1p0_zbc1p0_zbs1p0_zkn1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(TENSTORRENT_ASCALON_X, {"tt-ascalon-x"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfbfmin1p0_zfh1p0_zfhmin1p0_zcb1p0_zcmop1p0_zkr1p0_zkt1p0_zvbb1p0_zvbc1p0_zvfbfmin1p0_zvfbfwma1p0_zvfh1p0_zvfhmin1p0_zvkng1p0_zvkt1p0_zvl256b1p0_sha1p0_smaia1p0_smmpm1p0_smnpm1p0_smrnmi1p0_smstateen1p0_ssaia1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm1p0_ssstrict1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_supm1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"}, 1, 1, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(VENTANA_VEYRON_V1, {"veyron-v1"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicbom1p0_zicbop1p0_zicboz1p0_zicntr2p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_zba1p0_zbb1p0_zbc1p0_zbs1p0_xventanacondops1p0"}, 0, 0, 0x0000061f, 0x8000000000010000, 0x0000000000000111)
PROC(XIANGSHAN_KUNMINGHU, {"xiangshan-kunminghu"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zacas1p0_zawrs1p0_zfa1p0_zfh1p0_zfhmin1p0_zcb1p0_zcmop1p0_zbc1p0_zkn1p0_zks1p0_zkt1p0_zvbb1p0_zvfh1p0_zvfhmin1p0_zvkt1p0_zvl128b1p0_sha1p0_smaia1p0_smcsrind1p0_smdbltrp1p0_smmpm1p0_smnpm1p0_smrnmi1p0_smstateen1p0_ssaia1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sscsrind1p0_ssdbltrp1p0_ssnpm1p0_sspm1p0_ssstrict1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_supm1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(XIANGSHAN_NANHU, {"xiangshan-nanhu"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicbom1p0_zicboz1p0_zicsr2p0_zifencei2p0_zba1p0_zbb1p0_zbc1p0_zbs1p0_zkn1p0_zksed1p0_zksh1p0_svinval1p0"}, 0, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(XUANTIE_C910V2, {"xt-c910v2"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfbfmin1p0_zfh1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0_zbc1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0_xtheadba1p0_xtheadbb1p0_xtheadbs1p0_xtheadcmo1p0_xtheadcondmov1p0_xtheadfmemidx1p0_xtheadmac1p0_xtheadmemidx1p0_xtheadmempair1p0_xtheadsync1p0"}, 1, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)
PROC(XUANTIE_C920V2, {"xt-c920v2"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfbfmin1p0_zfh1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0_zbc1p0_zkt1p0_zvfbfmin1p0_zvfbfwma1p0_zvfh1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0_xtheadba1p0_xtheadbb1p0_xtheadbs1p0_xtheadcmo1p0_xtheadcondmov1p0_xtheadfmemidx1p0_xtheadmac1p0_xtheadmemidx1p0_xtheadmempair1p0_xtheadsync1p0_xtheadvdot1p0"}, 1, 0, 0x00000000, 0x0000000000000000, 0x0000000000000000)

#undef PROC

#ifndef TUNE_PROC
#define TUNE_PROC(ENUM, NAME)
#endif

TUNE_PROC(ANDES_45, "andes-45-series")
TUNE_PROC(GENERIC, "generic")
TUNE_PROC(GENERIC_OOO, "generic-ooo")
TUNE_PROC(ROCKET, "rocket")
TUNE_PROC(SIFIVE_7, "sifive-7-series")

#undef TUNE_PROC
#ifdef GET_RISCVExtensionBitmaskTable_IMPL
static const RISCVExtensionBitmask ExtensionBitmask[]={
    {"a", 0, 0ULL},
    {"b", 0, 1ULL},
    {"c", 0, 2ULL},
    {"d", 0, 3ULL},
    {"e", 0, 4ULL},
    {"f", 0, 5ULL},
    {"h", 0, 7ULL},
    {"i", 0, 8ULL},
    {"m", 0, 12ULL},
    {"q", 0, 16ULL},
    {"v", 0, 21ULL},
    {"zacas", 0, 26ULL},
    {"zba", 0, 27ULL},
    {"zbb", 0, 28ULL},
    {"zbc", 0, 29ULL},
    {"zbkb", 0, 30ULL},
    {"zbkc", 0, 31ULL},
    {"zbkx", 0, 32ULL},
    {"zbs", 0, 33ULL},
    {"zfa", 0, 34ULL},
    {"zfh", 0, 35ULL},
    {"zfhmin", 0, 36ULL},
    {"zicboz", 0, 37ULL},
    {"zicond", 0, 38ULL},
    {"zihintntl", 0, 39ULL},
    {"zihintpause", 0, 40ULL},
    {"zknd", 0, 41ULL},
    {"zkne", 0, 42ULL},
    {"zknh", 0, 43ULL},
    {"zksed", 0, 44ULL},
    {"zksh", 0, 45ULL},
    {"zkt", 0, 46ULL},
    {"ztso", 0, 47ULL},
    {"zvbb", 0, 48ULL},
    {"zvbc", 0, 49ULL},
    {"zvfh", 0, 50ULL},
    {"zvfhmin", 0, 51ULL},
    {"zvkb", 0, 52ULL},
    {"zvkg", 0, 53ULL},
    {"zvkned", 0, 54ULL},
    {"zvknha", 0, 55ULL},
    {"zvknhb", 0, 56ULL},
    {"zvksed", 0, 57ULL},
    {"zvksh", 0, 58ULL},
    {"zvkt", 0, 59ULL},
    {"zve32x", 0, 60ULL},
    {"zve32f", 0, 61ULL},
    {"zve64x", 0, 62ULL},
    {"zve64f", 0, 63ULL},
    {"zve64d", 1, 0ULL},
    {"zimop", 1, 1ULL},
    {"zca", 1, 2ULL},
    {"zcb", 1, 3ULL},
    {"zcd", 1, 4ULL},
    {"zcf", 1, 5ULL},
    {"zcmop", 1, 6ULL},
    {"zawrs", 1, 7ULL},
    {"zilsd", 1, 8ULL},
    {"zclsd", 1, 9ULL},
    {"zcmp", 1, 10ULL},
};
#endif

#ifdef GET_TUNE_FEATURES
#undef GET_TUNE_FEATURES


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Woverlength-strings"
#endif
static constexpr char TuneFeatureStringsStorage[] =
  "\0"
  "conditional-cmv-fusion\0"
  "no-conditional-cmv-fusion\0"
  "disable-latency-sched-heuristic\0"
  "enable-latency-sched-heuristic\0"
  "disable-misched-load-clustering\0"
  "enable-misched-load-clustering\0"
  "disable-misched-store-clustering\0"
  "enable-misched-store-clustering\0"
  "disable-postmisched-load-clustering\0"
  "enable-postmisched-load-clustering\0"
  "disable-postmisched-store-clustering\0"
  "enable-postmisched-store-clustering\0"
  "single-element-vec-fp64\0"
  "full-vec-fp64\0"
  "no-default-unroll\0"
  "enable-default-unroll\0"
  "no-sink-splat-operands\0"
  "sink-splat-operands\0"
  "use-postra-scheduler\0"
  "no-use-postra-scheduler\0"
  "predictable-select-expensive\0"
  "no-predictable-select-expensive\0"
  "prefer-vsetvli-over-read-vlenb\0"
  "no-prefer-vsetvli-over-read-vlenb\0"
  "prefer-w-inst\0"
  "no-prefer-w-inst\0"
  "short-forward-branch-ialu\0"
  "no-short-forward-branch-ialu\0"
  "short-forward-branch-iload\0"
  "no-short-forward-branch-iload\0"
  "short-forward-branch-iminmax\0"
  "no-short-forward-branch-iminmax\0"
  "short-forward-branch-imul\0"
  "no-short-forward-branch-imul\0"
  "vl-dependent-latency\0"
  "no-vl-dependent-latency\0"
  "vxrm-pipeline-flush\0"
  "no-vxrm-pipeline-flush\0"
  ;
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

static constexpr llvm::StringTable
TuneFeatureStrings = TuneFeatureStringsStorage;

static constexpr RISCVTuneFeature TuneFeatures[] = {
    { 1, 24, 1 },	// 'conditional-cmv-fusion'
    { 50, 82, 50 },	// 'disable-latency-sched-heuristic'
    { 113, 145, 113 },	// 'disable-misched-load-clustering'
    { 176, 209, 176 },	// 'disable-misched-store-clustering'
    { 241, 277, 241 },	// 'disable-postmisched-load-clustering'
    { 312, 349, 312 },	// 'disable-postmisched-store-clustering'
    { 385, 409, 385 },	// 'single-element-vec-fp64'
    { 423, 441, 423 },	// 'no-default-unroll'
    { 463, 486, 463 },	// 'no-sink-splat-operands'
    { 506, 527, 506 },	// 'use-postra-scheduler'
    { 551, 580, 551 },	// 'predictable-select-expensive'
    { 612, 643, 612 },	// 'prefer-vsetvli-over-read-vlenb'
    { 677, 691, 677 },	// 'prefer-w-inst'
    { 708, 734, 708 },	// 'short-forward-branch-ialu'
    { 763, 790, 763 },	// 'short-forward-branch-iload'
    { 820, 849, 820 },	// 'short-forward-branch-iminmax'
    { 881, 907, 881 },	// 'short-forward-branch-imul'
    { 936, 957, 936 },	// 'vl-dependent-latency'
    { 981, 1001, 981 },	// 'vxrm-pipeline-flush'
};

static constexpr RISCVImpliedTuneFeature ImpliedTuneFeatures[] = {
    { 763, 708 }, // 'short-forward-branch-iload' -> 'short-forward-branch-ialu'
    { 820, 708 }, // 'short-forward-branch-iminmax' -> 'short-forward-branch-ialu'
    { 881, 708 }, // 'short-forward-branch-imul' -> 'short-forward-branch-ialu'
};

#endif // GET_TUNE_FEATURES

#ifdef GET_CONFIGURABLE_TUNE_FEATURES
#undef GET_CONFIGURABLE_TUNE_FEATURES

static constexpr RISCVConfigurableTuneFeatures ConfigurableTuneFeatures[] = {
    { { "sifive-x280" }, 385 },
    { { "sifive-x280" }, 409 },
    { { "sifive-x390" }, 385 },
    { { "sifive-x390" }, 409 },
};

#endif // GET_CONFIGURABLE_TUNE_FEATURES
