diff --git a/docs/x86/optable.xml b/docs/x86/optable.xml index 61076e1..16a63cc 100644 --- a/docs/x86/optable.xml +++ b/docs/x86/optable.xml @@ -842,7 +842,21 @@ cmpxchg8b aso rexr rexx rexb - 0f c7 /reg=1 + 0f c7 /reg=1 /o=16 + M + + + aso rexr rexx rexb + 0f c7 /reg=1 /o=32 + M + + + + + cmpxchg16b + + aso rexr rexx rexb + 0f c7 /reg=1 /o=64 M @@ -5627,7 +5641,7 @@ aso rexx rexr rexb /sse=66 0f 3a 15 - MwRv V Ib + MwRd V Ib diff --git a/libudis86/decode.h b/libudis86/decode.h index 85ce376..a7362c8 100644 --- a/libudis86/decode.h +++ b/libudis86/decode.h @@ -122,6 +122,7 @@ enum ud_operand_size { */ SZ_BD = (SZ_B << 8) | SZ_D, SZ_BV = (SZ_B << 8) | SZ_V, + SZ_WD = (SZ_W << 8) | SZ_D, SZ_WV = (SZ_W << 8) | SZ_V, SZ_WY = (SZ_W << 8) | SZ_Y, SZ_DY = (SZ_D << 8) | SZ_Y, diff --git a/scripts/ud_itab.py b/scripts/ud_itab.py index 84ee309..b17fe69 100644 --- a/scripts/ud_itab.py +++ b/scripts/ud_itab.py @@ -61,6 +61,7 @@ class UdItabGenerator( ud_opcode.UdOpcodeTables ): "MbRd" : [ "OP_MR" , "SZ_BD" ], "MbRv" : [ "OP_MR" , "SZ_BV" ], "MwRv" : [ "OP_MR" , "SZ_WV" ], + "MwRd" : [ "OP_MR" , "SZ_WD" ], "MwRy" : [ "OP_MR" , "SZ_WY" ], "MdRy" : [ "OP_MR" , "SZ_DY" ], "I1" : [ "OP_I1" , "SZ_NA" ], diff --git a/tests/oprgen.py b/tests/oprgen.py index aec5cb4..9ab7634 100644 --- a/tests/oprgen.py +++ b/tests/oprgen.py @@ -435,6 +435,9 @@ class UdTestGenerator( ud_opcode.UdOpcodeTables ): def Insn_MwRv(self): return [self.Opr_MwRv(cast=True)] + def Insn_MwRd_V_Ib(self): + return [self.Opr_MwRd(cast=False), self.Opr_V(), self.Opr_Ib()] + def Insn_S_MwRv(self): if self.mode == 64: return [self.Opr_S(), self.Opr_MwRd(cast=False)]