• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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