mirror of https://github.com/x64dbg/zydis
Added compressed disp8 calculation for MVEX instructions
This commit is contained in:
parent
76f0bcf00d
commit
b9c43d83a7
|
@ -2597,6 +2597,71 @@ static void ZydisSetAVXInformation(ZydisDecoderContext* context,
|
|||
const ZydisInstructionDefinitionMVEX* def =
|
||||
(const ZydisInstructionDefinitionMVEX*)definition;
|
||||
|
||||
// Compressed disp8 scale
|
||||
info->avx.compressedDisp8Scale = 1;
|
||||
switch (def->functionality)
|
||||
{
|
||||
case ZYDIS_MVEX_FUNC_INVALID:
|
||||
case ZYDIS_MVEX_FUNC_RC:
|
||||
case ZYDIS_MVEX_FUNC_SAE:
|
||||
case ZYDIS_MVEX_FUNC_SWIZZLE_32:
|
||||
case ZYDIS_MVEX_FUNC_SWIZZLE_64:
|
||||
// Nothing to do here
|
||||
break;
|
||||
case ZYDIS_MVEX_FUNC_SF_32:
|
||||
case ZYDIS_MVEX_FUNC_UF_32:
|
||||
{
|
||||
static const uint8_t lookup[8] =
|
||||
{
|
||||
64, 4, 16, 32, 16, 16, 32, 32
|
||||
};
|
||||
ZYDIS_ASSERT(info->details.mvex.SSS < ZYDIS_ARRAY_SIZE(lookup));
|
||||
info->avx.compressedDisp8Scale = lookup[info->details.mvex.SSS];
|
||||
break;
|
||||
}
|
||||
case ZYDIS_MVEX_FUNC_SI_32:
|
||||
case ZYDIS_MVEX_FUNC_UI_32:
|
||||
{
|
||||
static const uint8_t lookup[8] =
|
||||
{
|
||||
64, 4, 16, 0, 16, 16, 32, 32
|
||||
};
|
||||
ZYDIS_ASSERT(info->details.mvex.SSS < ZYDIS_ARRAY_SIZE(lookup));
|
||||
info->avx.compressedDisp8Scale = lookup[info->details.mvex.SSS];
|
||||
break;
|
||||
}
|
||||
case ZYDIS_MVEX_FUNC_SF_64:
|
||||
case ZYDIS_MVEX_FUNC_UF_64:
|
||||
case ZYDIS_MVEX_FUNC_SI_64:
|
||||
case ZYDIS_MVEX_FUNC_UI_64:
|
||||
{
|
||||
static const uint8_t lookup[3] =
|
||||
{
|
||||
64, 8, 32
|
||||
};
|
||||
ZYDIS_ASSERT(info->details.mvex.SSS < ZYDIS_ARRAY_SIZE(lookup));
|
||||
info->avx.compressedDisp8Scale = lookup[info->details.mvex.SSS];
|
||||
break;
|
||||
}
|
||||
case ZYDIS_MVEX_FUNC_DF_32:
|
||||
case ZYDIS_MVEX_FUNC_DI_32:
|
||||
{
|
||||
static const uint8_t lookup[8] =
|
||||
{
|
||||
64, 0, 0, 32, 16, 16, 32, 32
|
||||
};
|
||||
ZYDIS_ASSERT(info->details.mvex.SSS < ZYDIS_ARRAY_SIZE(lookup));
|
||||
info->avx.compressedDisp8Scale = lookup[info->details.mvex.SSS];
|
||||
break;
|
||||
}
|
||||
case ZYDIS_MVEX_FUNC_DF_64:
|
||||
case ZYDIS_MVEX_FUNC_DI_64:
|
||||
info->avx.compressedDisp8Scale = 64;
|
||||
break;
|
||||
default:
|
||||
ZYDIS_UNREACHABLE;
|
||||
}
|
||||
|
||||
// Rounding mode, sae, swizzle, convert
|
||||
context->mvex.functionality = def->functionality;
|
||||
switch (def->functionality)
|
||||
|
|
Loading…
Reference in New Issue