parseinstrs: Avoid redundant encoding of InstrDesc
This commit is contained in:
@@ -611,19 +611,19 @@ if __name__ == "__main__":
|
|||||||
decode_mnems_lines = [f"FD_MNEMONIC({m},{i})\n" for i, m in enumerate(mnemonics)]
|
decode_mnems_lines = [f"FD_MNEMONIC({m},{i})\n" for i, m in enumerate(mnemonics)]
|
||||||
args.decode_mnems.write("".join(decode_mnems_lines))
|
args.decode_mnems.write("".join(decode_mnems_lines))
|
||||||
|
|
||||||
modes = [32, 64]
|
|
||||||
table = Table(root_count=len(args.modes))
|
table = Table(root_count=len(args.modes))
|
||||||
weak_opcodes = []
|
weak_opcodes = []
|
||||||
for weak, opcode, desc in entries:
|
for weak, opcode, desc in entries:
|
||||||
for i, mode in enumerate(args.modes):
|
|
||||||
if "ONLY%d"%(96-mode) not in desc.flags:
|
|
||||||
ign66 = opcode.prefix in ("NP", "66", "F2", "F3")
|
ign66 = opcode.prefix in ("NP", "66", "F2", "F3")
|
||||||
modrm = opcode.modreg or opcode.opcext
|
modrm = opcode.modreg or opcode.opcext
|
||||||
|
descenc = desc.encode(ign66, modrm)
|
||||||
|
for i, mode in enumerate(args.modes):
|
||||||
|
if "ONLY%d"%(96-mode) not in desc.flags:
|
||||||
for opcode_path in opcode.for_trie():
|
for opcode_path in opcode.for_trie():
|
||||||
if weak:
|
if weak:
|
||||||
weak_opcodes.append((opcode_path, desc.encode(ign66, modrm), i))
|
weak_opcodes.append((opcode_path, descenc, i))
|
||||||
else:
|
else:
|
||||||
table.add_opcode(opcode_path, desc.encode(ign66, modrm), i)
|
table.add_opcode(opcode_path, descenc, i)
|
||||||
for k in weak_opcodes:
|
for k in weak_opcodes:
|
||||||
table.fill_free(*k)
|
table.fill_free(*k)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user