aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rwxr-xr-xparse_opcodes13
2 files changed, 16 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 294513a..d06c502 100644
--- a/Makefile
+++ b/Makefile
@@ -27,6 +27,9 @@ inst.chisel: $(ALL_OPCODES) parse_opcodes
inst.go: $(ALL_REAL_ILEN32_OPCODES) parse_opcodes
cat $(ALL_REAL_ILEN32_OPCODES) | ./parse_opcodes -go > $@
+inst.rs: $(ALL_OPCODES) parse_opcodes
+ cat $(ALL_OPCODES) | ./parse_opcodes -rust > $@
+
inst.sverilog: $(ALL_OPCODES) parse_opcodes
cat $(ALL_OPCODES) | ./parse_opcodes -sverilog > $@
diff --git a/parse_opcodes b/parse_opcodes
index 3c2b84b..6002b01 100755
--- a/parse_opcodes
+++ b/parse_opcodes
@@ -1019,6 +1019,17 @@ def make_go():
print('\treturn nil, false')
print('}')
+def make_rust():
+ print('/* Automatically generated by parse_opcodes. */')
+ for name in namelist:
+ name2 = name.upper().replace('.','_')
+ print('const MATCH_%s: u32 = %s;' % (name2, hex(match[name])))
+ print('const MASK_%s: u32 = %s;' % (name2, hex(mask[name])))
+ for num, name in csrs+csrs32:
+ print('const CSR_%s: u16 = %s;' % (name.upper(), hex(num)))
+ for num, name in causes:
+ print('const CAUSE_%s: u8 = %s;' % (name.upper().replace(' ', '_'), hex(num)))
+
def parse_inputs(args):
inputs = []
for fn in args:
@@ -1114,5 +1125,7 @@ if __name__ == "__main__":
make_c(match,mask)
elif sys.argv[1] == '-go':
make_go()
+ elif sys.argv[1] == '-rust':
+ make_rust()
else:
assert 0