parseinstrs: Generate more statistics

This commit is contained in:
Alexis Engelke
2021-09-13 17:44:00 +02:00
parent e5cdc57743
commit 4193ef96bf

View File

@@ -460,11 +460,14 @@ class Trie:
if elem is not None:
value = elem[1] << 2 if elem[0].is_instr else offsets[elem[1]]
data[i] = (value << 1) | (elem[0].value & 7)
stats = {k: len(v) for k, v in self.kindmap.items()}
print("%d bytes" % (2*len(data)), stats)
return tuple(data), [offsets[v] for _, v in self.trie[0]]
@property
def stats(self):
return {k.name: sum(self.trie[e] is not None for e in v)
for k, v in self.kindmap.items()}
def superstring(strs):
# This faces the "shortest superstring" problem, which is NP-hard.
# Preprocessing: remove any strings which are already completely covered
@@ -524,6 +527,10 @@ def decode_table(entries, modes):
.lower() for m in mnems]
mnemonics_str = superstring(mnemonics_intel)
print(f"Stats: Descs -- {len(descs)} ({8*len(descs)} bytes);",
f"Trie -- {2*len(table_data)} bytes, {trie.stats};"
f"Mnems -- {len(mnemonics_str)} + {3*len(mnemonics_intel)} bytes")
defines = ["FD_TABLE_OFFSET_%d %d\n"%k for k in zip(modes, root_offsets)]
return "".join(decode_mnems_lines), f"""// Auto-generated file -- do not modify!