riscfetch_core/
extensions.rs

1//! RISC-V extension definitions
2//!
3//! This module contains the constant definitions for all supported RISC-V extensions.
4//! Based on RISC-V ISA specification (2025-11-26) and LLVM 22.0 support.
5
6/// Standard extension definitions
7/// Format: (char, name, description)
8pub const STANDARD_EXTENSIONS: &[(char, &str, &str)] = &[
9    ('i', "I", "Base Integer Instructions"),
10    ('e', "E", "Embedded (16 registers)"),
11    ('m', "M", "Integer Multiply/Divide"),
12    ('a', "A", "Atomic Instructions"),
13    ('f', "F", "Single-Precision Float"),
14    ('d', "D", "Double-Precision Float"),
15    ('q', "Q", "Quad-Precision Float"),
16    ('c', "C", "Compressed (16-bit)"),
17    ('b', "B", "Bit Manipulation"),
18    ('v', "V", "Vector (SIMD)"),
19    ('h', "H", "Hypervisor"),
20];
21
22/// Z-extension definitions (Unprivileged)
23/// Format: (pattern, name, description, category)
24pub const Z_EXTENSIONS: &[(&str, &str, &str, &str)] = &[
25    // Base/CSR
26    ("zicsr", "Zicsr", "CSR Instructions", "base"),
27    ("zifencei", "Zifencei", "Instruction-Fetch Fence", "base"),
28    ("zicntr", "Zicntr", "Base Counters/Timers", "base"),
29    ("zihpm", "Zihpm", "Hardware Perf Counters", "base"),
30    // Hints
31    ("zihintpause", "Zihintpause", "Pause Hint", "hint"),
32    ("zihintntl", "Zihintntl", "Non-Temporal Hints", "hint"),
33    // Cache
34    ("zicbom", "Zicbom", "Cache-Block Management", "cache"),
35    ("zicboz", "Zicboz", "Cache-Block Zero", "cache"),
36    ("zicbop", "Zicbop", "Cache-Block Prefetch", "cache"),
37    // Conditional
38    ("zicond", "Zicond", "Conditional Operations", "cond"),
39    // Bit Manipulation
40    ("zba", "Zba", "Address Generation", "bit"),
41    ("zbb", "Zbb", "Basic Bit Manipulation", "bit"),
42    ("zbc", "Zbc", "Carry-less Multiply", "bit"),
43    ("zbs", "Zbs", "Single-bit Operations", "bit"),
44    // Scalar Cryptography
45    ("zbkb", "Zbkb", "Bit Manip for Crypto", "crypto"),
46    ("zbkc", "Zbkc", "Carry-less for Crypto", "crypto"),
47    ("zbkx", "Zbkx", "Crossbar for Crypto", "crypto"),
48    ("zk", "Zk", "Scalar Crypto (All)", "crypto"),
49    ("zkn", "Zkn", "NIST Algorithm Suite", "crypto"),
50    ("zknd", "Zknd", "AES Decryption", "crypto"),
51    ("zkne", "Zkne", "AES Encryption", "crypto"),
52    ("zknh", "Zknh", "SHA-2 Hash", "crypto"),
53    ("zks", "Zks", "ShangMi Suite", "crypto"),
54    ("zksed", "Zksed", "SM4 Block Cipher", "crypto"),
55    ("zksh", "Zksh", "SM3 Hash", "crypto"),
56    ("zkr", "Zkr", "Entropy Source", "crypto"),
57    ("zkt", "Zkt", "Data-Indep Timing", "crypto"),
58    // Floating Point
59    ("zfh", "Zfh", "Half-Precision Float", "fp"),
60    ("zfhmin", "Zfhmin", "Minimal Half-Precision", "fp"),
61    ("zfa", "Zfa", "Additional FP Instrs", "fp"),
62    ("zfinx", "Zfinx", "Float in Int Regs", "fp"),
63    ("zdinx", "Zdinx", "Double in Int Regs", "fp"),
64    ("zhinx", "Zhinx", "Half in Int Regs", "fp"),
65    ("zhinxmin", "Zhinxmin", "Min Half in Int Regs", "fp"),
66    ("zfbfmin", "Zfbfmin", "Scalar BFloat16", "fp"),
67    // Compressed
68    ("zca", "Zca", "Compressed Base", "comp"),
69    ("zcb", "Zcb", "Compressed Basic Ops", "comp"),
70    ("zcd", "Zcd", "Compressed Double FP", "comp"),
71    ("zcf", "Zcf", "Compressed Single FP", "comp"),
72    ("zcmp", "Zcmp", "Compressed Push/Pop", "comp"),
73    ("zcmt", "Zcmt", "Compressed Table Jump", "comp"),
74    ("zcmop", "Zcmop", "Compressed May-Be-Ops", "comp"),
75    ("zclsd", "Zclsd", "Compressed LD/SD Pair", "comp"),
76    // Atomics
77    ("zacas", "Zacas", "Atomic Compare-and-Swap", "atomic"),
78    ("zabha", "Zabha", "Atomic Byte/Halfword", "atomic"),
79    ("zaamo", "Zaamo", "Atomic AMO Subset", "atomic"),
80    ("zalrsc", "Zalrsc", "Atomic LR/SC Subset", "atomic"),
81    ("zawrs", "Zawrs", "Wait-on-Reservation-Set", "atomic"),
82    // Memory Model
83    ("za64rs", "Za64rs", "Reservation Set 64B", "mem"),
84    ("za128rs", "Za128rs", "Reservation Set 128B", "mem"),
85    ("zama16b", "Zama16b", "Misaligned Atomics 16B", "mem"),
86    ("zic64b", "Zic64b", "64-byte Cache Block", "mem"),
87    ("ziccamoa", "Ziccamoa", "Main Mem Atomics AMO", "mem"),
88    ("ziccamoc", "Ziccamoc", "Main Mem Atomics CAS", "mem"),
89    ("ziccif", "Ziccif", "Inst Fetch Coherence", "mem"),
90    ("zicclsm", "Zicclsm", "Load/Store Misaligned", "mem"),
91    ("ziccrse", "Ziccrse", "Reservation Set Size", "mem"),
92    ("ztso", "Ztso", "Total Store Ordering", "mem"),
93    // Multiply
94    ("zmmul", "Zmmul", "Multiply Only (no Div)", "mul"),
95    // Other
96    ("zimop", "Zimop", "May-Be-Operations", "other"),
97    ("zilsd", "Zilsd", "Load/Store Pair", "other"),
98    // Vector
99    ("zve32f", "Zve32f", "Vector 32-bit Float", "vec"),
100    ("zve32x", "Zve32x", "Vector 32-bit Int", "vec"),
101    ("zve64d", "Zve64d", "Vector 64-bit Double", "vec"),
102    ("zve64f", "Zve64f", "Vector 64-bit Float", "vec"),
103    ("zve64x", "Zve64x", "Vector 64-bit Int", "vec"),
104    ("zvfh", "Zvfh", "Vector Half-Precision", "vec"),
105    ("zvfhmin", "Zvfhmin", "Min Vector Half-Prec", "vec"),
106    ("zvfbfmin", "Zvfbfmin", "Vector BFloat16 Conv", "vec"),
107    ("zvfbfwma", "Zvfbfwma", "Vector BF16 Widen MA", "vec"),
108    ("zvl32b", "Zvl32b", "VLEN >= 32 bits", "vec"),
109    ("zvl64b", "Zvl64b", "VLEN >= 64 bits", "vec"),
110    ("zvl128b", "Zvl128b", "VLEN >= 128 bits", "vec"),
111    ("zvl256b", "Zvl256b", "VLEN >= 256 bits", "vec"),
112    ("zvl512b", "Zvl512b", "VLEN >= 512 bits", "vec"),
113    ("zvl1024b", "Zvl1024b", "VLEN >= 1024 bits", "vec"),
114    ("zvl2048b", "Zvl2048b", "VLEN >= 2048 bits", "vec"),
115    ("zvl4096b", "Zvl4096b", "VLEN >= 4096 bits", "vec"),
116    ("zvl8192b", "Zvl8192b", "VLEN >= 8192 bits", "vec"),
117    ("zvl16384b", "Zvl16384b", "VLEN >= 16384 bits", "vec"),
118    ("zvl32768b", "Zvl32768b", "VLEN >= 32768 bits", "vec"),
119    ("zvl65536b", "Zvl65536b", "VLEN >= 65536 bits", "vec"),
120    // Vector Cryptography
121    ("zvbb", "Zvbb", "Vector Bit Manipulation", "vcrypto"),
122    ("zvbc", "Zvbc", "Vector Carry-less Mul", "vcrypto"),
123    ("zvkb", "Zvkb", "Vector Crypto Bit Manip", "vcrypto"),
124    ("zvkg", "Zvkg", "Vector GCM/GMAC", "vcrypto"),
125    ("zvkn", "Zvkn", "Vector NIST (All)", "vcrypto"),
126    ("zvknc", "Zvknc", "Vector NIST+Carryless", "vcrypto"),
127    ("zvkned", "Zvkned", "Vector AES", "vcrypto"),
128    ("zvkng", "Zvkng", "Vector NIST+GCM", "vcrypto"),
129    ("zvknha", "Zvknha", "Vector SHA-2 (256)", "vcrypto"),
130    ("zvknhb", "Zvknhb", "Vector SHA-2 (512)", "vcrypto"),
131    ("zvks", "Zvks", "Vector ShangMi (All)", "vcrypto"),
132    ("zvksc", "Zvksc", "Vector SM+Carryless", "vcrypto"),
133    ("zvksed", "Zvksed", "Vector SM4", "vcrypto"),
134    ("zvksg", "Zvksg", "Vector SM+GCM", "vcrypto"),
135    ("zvksh", "Zvksh", "Vector SM3", "vcrypto"),
136    ("zvkt", "Zvkt", "Vector Data-Indep Time", "vcrypto"),
137];
138
139/// S-extension definitions (Privileged/Supervisor)
140/// Format: (pattern, name, description, category)
141pub const S_EXTENSIONS: &[(&str, &str, &str, &str)] = &[
142    // Virtual Memory (Sv*)
143    ("svinval", "Svinval", "Fine-Grained TLB Inv", "vm"),
144    ("svnapot", "Svnapot", "NAPOT Translation", "vm"),
145    ("svpbmt", "Svpbmt", "Page-Based Mem Types", "vm"),
146    ("svade", "Svade", "A/D Update on Fault", "vm"),
147    ("svadu", "Svadu", "A/D Hardware Update", "vm"),
148    ("svbare", "Svbare", "Bare Translation Mode", "vm"),
149    ("svvptc", "Svvptc", "VPTC Invalidation", "vm"),
150    // Supervisor (Ss*)
151    ("ssaia", "Ssaia", "Adv Interrupt Arch", "sup"),
152    ("ssccfg", "Ssccfg", "Counter Config", "sup"),
153    ("ssccptr", "Ssccptr", "Common Ptr Convention", "sup"),
154    ("sscofpmf", "Sscofpmf", "Count Overflow/Filter", "sup"),
155    ("sscounterenw", "Sscounterenw", "Counter Enables", "sup"),
156    ("sscsrind", "Sscsrind", "Indirect CSR Access", "sup"),
157    ("ssctr", "Ssctr", "Control Transfer Rec", "sup"),
158    ("ssdbltrp", "Ssdbltrp", "Double Trap", "sup"),
159    ("ssnpm", "Ssnpm", "Pointer Masking", "sup"),
160    ("sspm", "Sspm", "Pointer Masking", "sup"),
161    ("ssqosid", "Ssqosid", "QoS Identifiers", "sup"),
162    ("ssstateen", "Ssstateen", "State Enable", "sup"),
163    ("ssstrict", "Ssstrict", "No Non-Conforming Ext", "sup"),
164    ("sstc", "Sstc", "Supervisor Timer", "sup"),
165    ("sstvala", "Sstvala", "Trap Value Address", "sup"),
166    ("sstvecd", "Sstvecd", "Trap Vector Mode", "sup"),
167    ("ssu64xl", "Ssu64xl", "U-mode 64-bit", "sup"),
168    // Machine (Sm*)
169    ("smaia", "Smaia", "Adv Interrupt Arch", "mach"),
170    ("smcdeleg", "Smcdeleg", "Counter Delegation", "mach"),
171    ("smcntrpmf", "Smcntrpmf", "Counter PMF", "mach"),
172    ("smcsrind", "Smcsrind", "Indirect CSR Access", "mach"),
173    ("smctr", "Smctr", "Control Transfer Rec", "mach"),
174    ("smdbltrp", "Smdbltrp", "Double Trap", "mach"),
175    ("smepmp", "Smepmp", "Enhanced PMP", "mach"),
176    ("smmpm", "Smmpm", "M-mode Ptr Masking", "mach"),
177    ("smnpm", "Smnpm", "Nesting Ptr Masking", "mach"),
178    ("smrnmi", "Smrnmi", "Resumable NMI", "mach"),
179    ("smstateen", "Smstateen", "State Enable", "mach"),
180    // Hypervisor (Sh*)
181    ("sha", "Sha", "H-mode Ext Subset", "hyp"),
182    ("shcounterenw", "Shcounterenw", "Counter Enables", "hyp"),
183    ("shgatpa", "Shgatpa", "Guest Addr Translation", "hyp"),
184    (
185        "shlcofideleg",
186        "Shlcofideleg",
187        "Lcof Interrupt Deleg",
188        "hyp",
189    ),
190    ("shtvala", "Shtvala", "H-mode Trap Value", "hyp"),
191    ("shvsatpa", "Shvsatpa", "VS-mode Saturation", "hyp"),
192    ("shvstvala", "Shvstvala", "VS-mode Trap Value", "hyp"),
193    ("shvstvecd", "Shvstvecd", "VS-mode Trap Vector", "hyp"),
194    // Debug (Sd*)
195    ("sdext", "Sdext", "External Debug", "debug"),
196    ("sdtrig", "Sdtrig", "Debug Triggers", "debug"),
197    // User (Su*)
198    ("supm", "Supm", "U-mode Ptr Masking", "user"),
199];
200
201/// Category display names for Z-extensions
202pub const Z_CATEGORY_NAMES: &[(&str, &str)] = &[
203    ("base", "Base"),
204    ("hint", "Hints"),
205    ("cache", "Cache"),
206    ("cond", "Conditional"),
207    ("bit", "Bit Manipulation"),
208    ("crypto", "Cryptography"),
209    ("fp", "Floating Point"),
210    ("comp", "Compressed"),
211    ("atomic", "Atomics"),
212    ("mem", "Memory Model"),
213    ("mul", "Multiply"),
214    ("vec", "Vector"),
215    ("vcrypto", "Vector Crypto"),
216    ("other", "Other"),
217];
218
219/// Category display names for S-extensions
220pub const S_CATEGORY_NAMES: &[(&str, &str)] = &[
221    ("vm", "Virtual Memory"),
222    ("sup", "Supervisor"),
223    ("mach", "Machine"),
224    ("hyp", "Hypervisor"),
225    ("debug", "Debug"),
226    ("user", "User"),
227];