mirror of
https://github.com/antonblanchard/chiselwatt.git
synced 2026-01-14 15:46:35 +00:00
58 lines
1.8 KiB
Python
Executable File
58 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import yaml
|
|
|
|
# Print all the common keys in order each time, makes diffing between
|
|
# versions easier.
|
|
base_keys = [ 'unit', 'internalOp', 'rA', 'rB', 'rS', 'rOut', 'carryIn', 'carryOut', 'crIn', 'crOut', 'compare', 'is32bit', 'signed', 'invertIn', 'invertOut', 'rightShift', 'clearLeft', 'clearRight', 'length', 'byteReverse', 'update', 'reservation', 'high', 'extended', 'countRight' ]
|
|
|
|
all_keys = list()
|
|
all_lengths = list()
|
|
|
|
with open('instructions.yaml') as fh:
|
|
insns = yaml.safe_load(fh)
|
|
|
|
all_keys = list()
|
|
|
|
for key in base_keys:
|
|
all_keys.append(key)
|
|
all_lengths.append(len(key) + 1)
|
|
|
|
# Add all the keys and find the maximum length of either the name or the value
|
|
for insn in insns:
|
|
for key in insns[insn].keys():
|
|
if key not in all_keys:
|
|
all_keys.append(key)
|
|
keylen = len(key) + 1
|
|
vallen = len(insns[insn][key]) + 2
|
|
all_lengths.append(max(keylen, vallen))
|
|
else:
|
|
i = all_keys.index(key)
|
|
all_lengths[i] = max(all_lengths[i], len(insns[insn][key]) + 2)
|
|
|
|
print(" // ", end = '')
|
|
for i in range(len(all_keys)):
|
|
key = all_keys[i]
|
|
length = all_lengths[i]
|
|
print("%-*s" % (length, key), end = '')
|
|
print("")
|
|
|
|
for insn in insns:
|
|
print(" %-13s -> List(" % (insn.upper()), end = '')
|
|
for i in range(len(all_keys)):
|
|
key = all_keys[i]
|
|
length = all_lengths[i]
|
|
|
|
if (i == (len(all_keys)-1)):
|
|
append = '),'
|
|
else:
|
|
append = ','
|
|
|
|
if key in insns[insn]:
|
|
val = insns[insn][key] + append
|
|
else:
|
|
val = 'DC' + append
|
|
|
|
print("%-*s" % (length, val), end = '')
|
|
print("")
|