1#ifdef GET_SUPPORTED_EXTENSIONS 2#undef GET_SUPPORTED_EXTENSIONS 3 4static const RISCVSupportedExtension SupportedExtensions[] = { 5 {"a", {2, 1}}, 6 {"c", {2, 0}}, 7 {"d", {2, 2}}, 8 {"e", {2, 0}}, 9 {"f", {2, 2}}, 10 {"h", {1, 0}}, 11 {"i", {2, 1}}, 12 {"m", {2, 0}}, 13 {"shcounterenw", {1, 0}}, 14 {"shgatpa", {1, 0}}, 15 {"shtvala", {1, 0}}, 16 {"shvsatpa", {1, 0}}, 17 {"shvstvala", {1, 0}}, 18 {"shvstvecd", {1, 0}}, 19 {"smaia", {1, 0}}, 20 {"smepmp", {1, 0}}, 21 {"smstateen", {1, 0}}, 22 {"ssaia", {1, 0}}, 23 {"ssccptr", {1, 0}}, 24 {"sscofpmf", {1, 0}}, 25 {"sscounterenw", {1, 0}}, 26 {"ssstateen", {1, 0}}, 27 {"ssstrict", {1, 0}}, 28 {"sstc", {1, 0}}, 29 {"sstvala", {1, 0}}, 30 {"sstvecd", {1, 0}}, 31 {"ssu64xl", {1, 0}}, 32 {"svade", {1, 0}}, 33 {"svadu", {1, 0}}, 34 {"svbare", {1, 0}}, 35 {"svinval", {1, 0}}, 36 {"svnapot", {1, 0}}, 37 {"svpbmt", {1, 0}}, 38 {"v", {1, 0}}, 39 {"xcvalu", {1, 0}}, 40 {"xcvbi", {1, 0}}, 41 {"xcvbitmanip", {1, 0}}, 42 {"xcvelw", {1, 0}}, 43 {"xcvmac", {1, 0}}, 44 {"xcvmem", {1, 0}}, 45 {"xcvsimd", {1, 0}}, 46 {"xsfcease", {1, 0}}, 47 {"xsfvcp", {1, 0}}, 48 {"xsfvfnrclipxfqf", {1, 0}}, 49 {"xsfvfwmaccqqq", {1, 0}}, 50 {"xsfvqmaccdod", {1, 0}}, 51 {"xsfvqmaccqoq", {1, 0}}, 52 {"xsifivecdiscarddlone", {1, 0}}, 53 {"xsifivecflushdlone", {1, 0}}, 54 {"xtheadba", {1, 0}}, 55 {"xtheadbb", {1, 0}}, 56 {"xtheadbs", {1, 0}}, 57 {"xtheadcmo", {1, 0}}, 58 {"xtheadcondmov", {1, 0}}, 59 {"xtheadfmemidx", {1, 0}}, 60 {"xtheadmac", {1, 0}}, 61 {"xtheadmemidx", {1, 0}}, 62 {"xtheadmempair", {1, 0}}, 63 {"xtheadsync", {1, 0}}, 64 {"xtheadvdot", {1, 0}}, 65 {"xventanacondops", {1, 0}}, 66 {"za128rs", {1, 0}}, 67 {"za64rs", {1, 0}}, 68 {"zacas", {1, 0}}, 69 {"zama16b", {1, 0}}, 70 {"zawrs", {1, 0}}, 71 {"zba", {1, 0}}, 72 {"zbb", {1, 0}}, 73 {"zbc", {1, 0}}, 74 {"zbkb", {1, 0}}, 75 {"zbkc", {1, 0}}, 76 {"zbkx", {1, 0}}, 77 {"zbs", {1, 0}}, 78 {"zca", {1, 0}}, 79 {"zcb", {1, 0}}, 80 {"zcd", {1, 0}}, 81 {"zce", {1, 0}}, 82 {"zcf", {1, 0}}, 83 {"zcmop", {1, 0}}, 84 {"zcmp", {1, 0}}, 85 {"zcmt", {1, 0}}, 86 {"zdinx", {1, 0}}, 87 {"zfa", {1, 0}}, 88 {"zfh", {1, 0}}, 89 {"zfhmin", {1, 0}}, 90 {"zfinx", {1, 0}}, 91 {"zhinx", {1, 0}}, 92 {"zhinxmin", {1, 0}}, 93 {"zic64b", {1, 0}}, 94 {"zicbom", {1, 0}}, 95 {"zicbop", {1, 0}}, 96 {"zicboz", {1, 0}}, 97 {"ziccamoa", {1, 0}}, 98 {"ziccif", {1, 0}}, 99 {"zicclsm", {1, 0}}, 100 {"ziccrse", {1, 0}}, 101 {"zicntr", {2, 0}}, 102 {"zicond", {1, 0}}, 103 {"zicsr", {2, 0}}, 104 {"zifencei", {2, 0}}, 105 {"zihintntl", {1, 0}}, 106 {"zihintpause", {2, 0}}, 107 {"zihpm", {2, 0}}, 108 {"zimop", {1, 0}}, 109 {"zk", {1, 0}}, 110 {"zkn", {1, 0}}, 111 {"zknd", {1, 0}}, 112 {"zkne", {1, 0}}, 113 {"zknh", {1, 0}}, 114 {"zkr", {1, 0}}, 115 {"zks", {1, 0}}, 116 {"zksed", {1, 0}}, 117 {"zksh", {1, 0}}, 118 {"zkt", {1, 0}}, 119 {"zmmul", {1, 0}}, 120 {"zvbb", {1, 0}}, 121 {"zvbc", {1, 0}}, 122 {"zve32f", {1, 0}}, 123 {"zve32x", {1, 0}}, 124 {"zve64d", {1, 0}}, 125 {"zve64f", {1, 0}}, 126 {"zve64x", {1, 0}}, 127 {"zvfh", {1, 0}}, 128 {"zvfhmin", {1, 0}}, 129 {"zvkb", {1, 0}}, 130 {"zvkg", {1, 0}}, 131 {"zvkn", {1, 0}}, 132 {"zvknc", {1, 0}}, 133 {"zvkned", {1, 0}}, 134 {"zvkng", {1, 0}}, 135 {"zvknha", {1, 0}}, 136 {"zvknhb", {1, 0}}, 137 {"zvks", {1, 0}}, 138 {"zvksc", {1, 0}}, 139 {"zvksed", {1, 0}}, 140 {"zvksg", {1, 0}}, 141 {"zvksh", {1, 0}}, 142 {"zvkt", {1, 0}}, 143 {"zvl1024b", {1, 0}}, 144 {"zvl128b", {1, 0}}, 145 {"zvl16384b", {1, 0}}, 146 {"zvl2048b", {1, 0}}, 147 {"zvl256b", {1, 0}}, 148 {"zvl32768b", {1, 0}}, 149 {"zvl32b", {1, 0}}, 150 {"zvl4096b", {1, 0}}, 151 {"zvl512b", {1, 0}}, 152 {"zvl64b", {1, 0}}, 153 {"zvl65536b", {1, 0}}, 154 {"zvl8192b", {1, 0}}, 155}; 156 157static const RISCVSupportedExtension SupportedExperimentalExtensions[] = { 158 {"smmpm", {0, 8}}, 159 {"smnpm", {0, 8}}, 160 {"ssnpm", {0, 8}}, 161 {"sspm", {0, 8}}, 162 {"ssqosid", {1, 0}}, 163 {"supm", {0, 8}}, 164 {"zaamo", {0, 2}}, 165 {"zabha", {1, 0}}, 166 {"zalasr", {0, 1}}, 167 {"zalrsc", {0, 2}}, 168 {"zfbfmin", {1, 0}}, 169 {"zicfilp", {0, 4}}, 170 {"zicfiss", {0, 4}}, 171 {"ztso", {0, 1}}, 172 {"zvfbfmin", {1, 0}}, 173 {"zvfbfwma", {1, 0}}, 174}; 175 176#endif // GET_SUPPORTED_EXTENSIONS 177 178#ifdef GET_IMPLIED_EXTENSIONS 179#undef GET_IMPLIED_EXTENSIONS 180 181 182static constexpr ImpliedExtsEntry ImpliedExts[] = { 183 { {"d"}, "f"}, 184 { {"f"}, "zicsr"}, 185 { {"v"}, "zvl128b"}, 186 { {"v"}, "zve64d"}, 187 { {"xsfvcp"}, "zve32x"}, 188 { {"xsfvfnrclipxfqf"}, "zve32f"}, 189 { {"xsfvfwmaccqqq"}, "zvfbfmin"}, 190 { {"xsfvqmaccdod"}, "zve32x"}, 191 { {"xsfvqmaccqoq"}, "zve32x"}, 192 { {"xtheadvdot"}, "v"}, 193 { {"zcb"}, "zca"}, 194 { {"zcd"}, "d"}, 195 { {"zcd"}, "zca"}, 196 { {"zce"}, "zcb"}, 197 { {"zce"}, "zcmp"}, 198 { {"zce"}, "zcmt"}, 199 { {"zcf"}, "f"}, 200 { {"zcf"}, "zca"}, 201 { {"zcmop"}, "zca"}, 202 { {"zcmp"}, "zca"}, 203 { {"zcmt"}, "zca"}, 204 { {"zcmt"}, "zicsr"}, 205 { {"zdinx"}, "zfinx"}, 206 { {"zfa"}, "f"}, 207 { {"zfbfmin"}, "f"}, 208 { {"zfh"}, "zfhmin"}, 209 { {"zfhmin"}, "f"}, 210 { {"zfinx"}, "zicsr"}, 211 { {"zhinx"}, "zhinxmin"}, 212 { {"zhinxmin"}, "zfinx"}, 213 { {"zicfiss"}, "zicsr"}, 214 { {"zicfiss"}, "zimop"}, 215 { {"zicntr"}, "zicsr"}, 216 { {"zihpm"}, "zicsr"}, 217 { {"zk"}, "zkn"}, 218 { {"zk"}, "zkr"}, 219 { {"zk"}, "zkt"}, 220 { {"zkn"}, "zbkb"}, 221 { {"zkn"}, "zbkc"}, 222 { {"zkn"}, "zbkx"}, 223 { {"zkn"}, "zkne"}, 224 { {"zkn"}, "zknd"}, 225 { {"zkn"}, "zknh"}, 226 { {"zks"}, "zbkb"}, 227 { {"zks"}, "zbkc"}, 228 { {"zks"}, "zbkx"}, 229 { {"zks"}, "zksed"}, 230 { {"zks"}, "zksh"}, 231 { {"zvbb"}, "zvkb"}, 232 { {"zve32f"}, "zve32x"}, 233 { {"zve32f"}, "f"}, 234 { {"zve32x"}, "zicsr"}, 235 { {"zve32x"}, "zvl32b"}, 236 { {"zve64d"}, "zve64f"}, 237 { {"zve64d"}, "d"}, 238 { {"zve64f"}, "zve32f"}, 239 { {"zve64f"}, "zve64x"}, 240 { {"zve64x"}, "zve32x"}, 241 { {"zve64x"}, "zvl64b"}, 242 { {"zvfbfmin"}, "zve32f"}, 243 { {"zvfbfwma"}, "zvfbfmin"}, 244 { {"zvfbfwma"}, "zfbfmin"}, 245 { {"zvfh"}, "zvfhmin"}, 246 { {"zvfh"}, "zfhmin"}, 247 { {"zvfhmin"}, "zve32f"}, 248 { {"zvkn"}, "zvkned"}, 249 { {"zvkn"}, "zvknhb"}, 250 { {"zvkn"}, "zvkb"}, 251 { {"zvkn"}, "zvkt"}, 252 { {"zvknc"}, "zvkn"}, 253 { {"zvknc"}, "zvbc"}, 254 { {"zvkng"}, "zvkn"}, 255 { {"zvkng"}, "zvkg"}, 256 { {"zvknhb"}, "zve64x"}, 257 { {"zvks"}, "zvksed"}, 258 { {"zvks"}, "zvksh"}, 259 { {"zvks"}, "zvkb"}, 260 { {"zvks"}, "zvkt"}, 261 { {"zvksc"}, "zvks"}, 262 { {"zvksc"}, "zvbc"}, 263 { {"zvksg"}, "zvks"}, 264 { {"zvksg"}, "zvkg"}, 265 { {"zvl1024b"}, "zvl512b"}, 266 { {"zvl128b"}, "zvl64b"}, 267 { {"zvl16384b"}, "zvl8192b"}, 268 { {"zvl2048b"}, "zvl1024b"}, 269 { {"zvl256b"}, "zvl128b"}, 270 { {"zvl32768b"}, "zvl16384b"}, 271 { {"zvl4096b"}, "zvl2048b"}, 272 { {"zvl512b"}, "zvl256b"}, 273 { {"zvl64b"}, "zvl32b"}, 274 { {"zvl65536b"}, "zvl32768b"}, 275 { {"zvl8192b"}, "zvl4096b"}, 276}; 277 278#endif // GET_IMPLIED_EXTENSIONS 279 280#ifdef GET_SUPPORTED_PROFILES 281#undef GET_SUPPORTED_PROFILES 282 283static constexpr RISCVProfile SupportedProfiles[] = { 284 {"rva20s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zifencei2p0_za128rs1p0_ssccptr1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0"}, 285 {"rva20u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_za128rs1p0"}, 286 {"rva22s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscounterenw1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svpbmt1p0"}, 287 {"rva22u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"}, 288 {"rva23s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_h1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zvfhmin1p0_zvkt1p0_shcounterenw1p0_shgatpa1p0_shtvala1p0_shvsatpa1p0_shvstvala1p0_shvstvecd1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm0p8_ssstateen1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"}, 289 {"rva23u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zvfhmin1p0_zvkt1p0"}, 290 {"rvb23s64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"}, 291 {"rvb23u64","rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"}, 292 {"rvi20u32","rv32i2p1"}, 293 {"rvi20u64","rv64i2p1"}, 294 {"rvm23u32","rv32i2p1_m2p0_zicbop1p0_zicond1p0_zihintntl1p0_zihintpause2p0_zimop1p0_zce1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0"}, 295}; 296 297#endif // GET_SUPPORTED_PROFILES 298 299#ifndef PROC 300#define PROC(ENUM, NAME, DEFAULT_MARCH, FAST_UNALIGNED_ACCESS) 301#endif 302 303PROC(GENERIC_RV32, {"generic-rv32"}, {"rv32i2p1"}, 0) 304PROC(GENERIC_RV64, {"generic-rv64"}, {"rv64i2p1"}, 0) 305PROC(ROCKET_RV32, {"rocket-rv32"}, {"rv32i2p1_zicsr2p0_zifencei2p0"}, 0) 306PROC(ROCKET_RV64, {"rocket-rv64"}, {"rv64i2p1_zicsr2p0_zifencei2p0"}, 0) 307PROC(SIFIVE_E20, {"sifive-e20"}, {"rv32i2p1_m2p0_c2p0_zicsr2p0_zifencei2p0"}, 0) 308PROC(SIFIVE_E21, {"sifive-e21"}, {"rv32i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0) 309PROC(SIFIVE_E24, {"sifive-e24"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0) 310PROC(SIFIVE_E31, {"sifive-e31"}, {"rv32i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0) 311PROC(SIFIVE_E34, {"sifive-e34"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0) 312PROC(SIFIVE_E76, {"sifive-e76"}, {"rv32i2p1_m2p0_a2p1_f2p2_c2p0_zifencei2p0"}, 0) 313PROC(SIFIVE_P450, {"sifive-p450"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0"}, 1) 314PROC(SIFIVE_P670, {"sifive-p670"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zvbb1p0_zvknc1p0_zvkng1p0_zvksc1p0_zvksg1p0_zvl128b1p0"}, 1) 315PROC(SIFIVE_S21, {"sifive-s21"}, {"rv64i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0) 316PROC(SIFIVE_S51, {"sifive-s51"}, {"rv64i2p1_m2p0_a2p1_c2p0_zicsr2p0_zifencei2p0"}, 0) 317PROC(SIFIVE_S54, {"sifive-s54"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0) 318PROC(SIFIVE_S76, {"sifive-s76"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0_zihintpause2p0"}, 0) 319PROC(SIFIVE_U54, {"sifive-u54"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0) 320PROC(SIFIVE_U74, {"sifive-u74"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zifencei2p0"}, 0) 321PROC(SIFIVE_X280, {"sifive-x280"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zifencei2p0_zfh1p0_zba1p0_zbb1p0_zvfh1p0_zvl512b1p0"}, 0) 322PROC(SYNTACORE_SCR1_BASE, {"syntacore-scr1-base"}, {"rv32i2p1_c2p0_zicsr2p0_zifencei2p0"}, 0) 323PROC(SYNTACORE_SCR1_MAX, {"syntacore-scr1-max"}, {"rv32i2p1_m2p0_c2p0_zicsr2p0_zifencei2p0"}, 0) 324PROC(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) 325PROC(XIANGSHAN_NANHU, {"xiangshan-nanhu"}, {"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicbom1p0_zicboz1p0_zicsr2p0_zifencei2p0_zba1p0_zbb1p0_zbc1p0_zbs1p0_zkn1p0_zksed1p0_zksh1p0_svinval1p0"}, 0) 326 327#undef PROC 328 329#ifndef TUNE_PROC 330#define TUNE_PROC(ENUM, NAME) 331#endif 332 333TUNE_PROC(GENERIC, "generic") 334TUNE_PROC(ROCKET, "rocket") 335TUNE_PROC(SIFIVE_7, "sifive-7-series") 336 337#undef TUNE_PROC 338