parseinstr: Include mnemnonic in flag bitstruct

This commit is contained in:
Alexis Engelke
2020-02-12 09:44:36 +01:00
parent f538554bb9
commit e59117538f

View File

@@ -25,6 +25,7 @@ def bitstruct(name, fields):
return __class return __class
InstrFlags = bitstruct("InstrFlags", [ InstrFlags = bitstruct("InstrFlags", [
"mnemonic:16",
"modrm_idx:2", "modrm_idx:2",
"modreg_idx:2", "modreg_idx:2",
"vexreg_idx:2", "vexreg_idx:2",
@@ -129,9 +130,10 @@ class InstrDesc(namedtuple("InstrDesc", "mnemonic,flags,encoding")):
if "VSIB" in desc[6:]: flags.vsib = 1 if "VSIB" in desc[6:]: flags.vsib = 1
if "MUSTMEM" in desc[6:]: flags.reg_types |= 15 << 4*(flags.modrm_idx^3) if "MUSTMEM" in desc[6:]: flags.reg_types |= 15 << 4*(flags.modrm_idx^3)
return cls(desc[5], frozenset(desc[6:]), flags._encode(6)) return cls(desc[5], frozenset(desc[6:]), flags)
def encode(self, mnemonics_lut): def encode(self, mnemonics_lut):
return struct.pack("<H", mnemonics_lut[self.mnemonic]) + self.encoding self.encoding.mnemonic = mnemonics_lut[self.mnemonic]
return self.encoding._encode(8)
class EntryKind(Enum): class EntryKind(Enum):
NONE = 0 NONE = 0