diff --git a/decode.c b/decode.c index 950ded8..77fa568 100644 --- a/decode.c +++ b/decode.c @@ -198,10 +198,6 @@ decode_modrm(const uint8_t* buffer, int len, DecodeMode mode, FdInstr* instr, uint8_t mod_reg = (modrm & 0x38) >> 3; uint8_t rm = modrm & 0x07; - // VSIB must have a memory operand with SIB byte. - if (UNLIKELY(vsib) && (rm != 4 || mod == 3)) - return FD_ERR_UD; - bool is_seg = UNLIKELY(instr->type == FDI_MOV_G2S || instr->type == FDI_MOV_S2G); bool is_cr = UNLIKELY(instr->type == FDI_MOV_CR); bool is_dr = UNLIKELY(instr->type == FDI_MOV_DR); @@ -249,6 +245,10 @@ decode_modrm(const uint8_t* buffer, int len, DecodeMode mode, FdInstr* instr, return off; } + // VSIB must have a memory operand with SIB byte. + if (UNLIKELY(vsib) && rm != 4) + return FD_ERR_UD; + // SIB byte uint8_t scale = 0; uint8_t idx = 4; diff --git a/instrs.txt b/instrs.txt index 8f2f313..4cab14a 100644 --- a/instrs.txt +++ b/instrs.txt @@ -1136,14 +1136,14 @@ VEX.66.W0.0f388c RVM XMM XMM XMM - VPMASKMOVD VEX.66.W1.0f388c RVM XMM XMM XMM - VPMASKMOVQ VEX.66.W0.0f388e MVR XMM XMM XMM - VPMASKMOVD VEX.66.W1.0f388e MVR XMM XMM XMM - VPMASKMOVQ -VEX.66.W0.0f3890 RMV XMM XMM XMM - VPGATHERDD VSIB -VEX.66.W1.0f3890 RMV XMM XMM XMM - VPGATHERDQ VSIB -VEX.66.W0.0f3891 RMV XMM XMM XMM - VPGATHERQD VSIB -VEX.66.W1.0f3891 RMV XMM XMM XMM - VPGATHERQQ VSIB -VEX.66.W0.0f3892 RMV XMM XMM XMM - VGATHERDPS VSIB -VEX.66.W1.0f3892 RMV XMM XMM XMM - VGATHERDPD VSIB -VEX.66.W0.0f3893 RMV XMM XMM XMM - VGATHERQPS VSIB -VEX.66.W1.0f3893 RMV XMM XMM XMM - VGATHERQPD VSIB +VEX.66.W0.0f3890 RMV XMM MEMV XMM - VPGATHERDD VSIB +VEX.66.W1.0f3890 RMV XMM MEMV XMM - VPGATHERDQ VSIB +VEX.66.W0.0f3891 RMV XMM MEMV XMM - VPGATHERQD VSIB +VEX.66.W1.0f3891 RMV XMM MEMV XMM - VPGATHERQQ VSIB +VEX.66.W0.0f3892 RMV XMM MEMV XMM - VGATHERDPS VSIB +VEX.66.W1.0f3892 RMV XMM MEMV XMM - VGATHERDPD VSIB +VEX.66.W0.0f3893 RMV XMM MEMV XMM - VGATHERQPS VSIB +VEX.66.W1.0f3893 RMV XMM MEMV XMM - VGATHERQPD VSIB VEX.66.W0.0f3896 RVM XMM XMM XMM - VFMADDADD132PS VEX.66.W1.0f3896 RVM XMM XMM XMM - VFMADDADD132PD VEX.66.W0.0f3897 RVM XMM XMM XMM - VFMSUBADD132PS