parseinstr: Include mnemnonic in flag bitstruct
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user