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* def =
|
||||||
(const ZydisInstructionDefinitionMVEX*)definition;
|
(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
|
// Rounding mode, sae, swizzle, convert
|
||||||
context->mvex.functionality = def->functionality;
|
context->mvex.functionality = def->functionality;
|
||||||
switch (def->functionality)
|
switch (def->functionality)
|
||||||
|
|
Loading…
Reference in New Issue