diff options
Diffstat (limited to 'src/riscv_opcodes/rust_utils.py')
-rw-r--r-- | src/riscv_opcodes/rust_utils.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/riscv_opcodes/rust_utils.py b/src/riscv_opcodes/rust_utils.py new file mode 100644 index 0000000..74e17eb --- /dev/null +++ b/src/riscv_opcodes/rust_utils.py @@ -0,0 +1,28 @@ +import logging +import pprint + +from .constants import causes, csrs, csrs32 +from .shared_utils import InstrDict + +pp = pprint.PrettyPrinter(indent=2) +logging.basicConfig(level=logging.INFO, format="%(levelname)s:: %(message)s") + + +def make_rust(instr_dict: InstrDict): + mask_match_str = "" + for i in instr_dict: + mask_match_str += f'const MATCH_{i.upper().replace(".","_")}: u32 = {(instr_dict[i]["match"])};\n' + mask_match_str += f'const MASK_{i.upper().replace(".","_")}: u32 = {(instr_dict[i]["mask"])};\n' + for num, name in csrs + csrs32: + mask_match_str += f"const CSR_{name.upper()}: u16 = {hex(num)};\n" + for num, name in causes: + mask_match_str += ( + f'const CAUSE_{name.upper().replace(" ","_")}: u8 = {hex(num)};\n' + ) + with open("inst.rs", "w", encoding="utf-8") as rust_file: + rust_file.write( + f""" +/* Automatically generated by parse_opcodes */ +{mask_match_str} +""" + ) |