Fixed decoding of instructions with EVEX high-16 register specifiers (R', X, V')

This commit is contained in:
flobernd 2016-12-05 21:06:29 +01:00
parent d4dd176438
commit 5b63557f3c
10 changed files with 37952 additions and 36289 deletions

File diff suppressed because it is too large Load Diff

View File

@ -33,8 +33,6 @@
* the condition encoded in the immediate operand). * the condition encoded in the immediate operand).
*/ */
#include <stdint.h>
#include <stdbool.h>
#include <inttypes.h> #include <inttypes.h>
#include <Zydis/Zydis.h> #include <Zydis/Zydis.h>
#include "FormatHelper.h" #include "FormatHelper.h"
@ -173,7 +171,7 @@ static ZydisStatus ZydisFormatterFormatOperandImm(ZydisInstructionFormatter* for
/* Helper functions */ /* Helper functions */
/* ============================================================================================== */ /* ============================================================================================== */
void disassembleBuffer(uint8_t* data, size_t length, bool installHooks) void disassembleBuffer(uint8_t* data, size_t length, ZydisBool installHooks)
{ {
ZydisMemoryInput input; ZydisMemoryInput input;
ZydisInputInitMemoryInput(&input, data, length); ZydisInputInitMemoryInput(&input, data, length);
@ -227,9 +225,9 @@ int main()
0x62, 0xF1, 0x6C, 0x5F, 0xC2, 0x54, 0x98, 0x40, 0x0F 0x62, 0xF1, 0x6C, 0x5F, 0xC2, 0x54, 0x98, 0x40, 0x0F
}; };
disassembleBuffer(&data[0], sizeof(data), false); disassembleBuffer(&data[0], sizeof(data), ZYDIS_FALSE);
puts(""); puts("");
disassembleBuffer(&data[0], sizeof(data), true); disassembleBuffer(&data[0], sizeof(data), ZYDIS_TRUE);
getchar(); getchar();
return 0; return 0;

View File

@ -1099,6 +1099,8 @@ typedef struct ZydisInstructionInfo_
uint8_t B; uint8_t B;
uint8_t L; uint8_t L;
uint8_t L2; uint8_t L2;
uint8_t R2;
uint8_t V2;
} internal; // TODO: Move into decoder struct } internal; // TODO: Move into decoder struct
} details; } details;
/** /**

View File

@ -2,9 +2,9 @@ typedef struct ZydisInstructionDefinition_
{ {
uint32_t mnemonic : 11; uint32_t mnemonic : 11;
uint32_t operandsId : 9; uint32_t operandsId : 9;
uint32_t evexBFunctionality : 2; uint32_t evexContext : 2;
uint32_t hasEvexAAA : 1; uint32_t evexMaskPolicy : 2;
uint32_t hasEvexZ : 1; uint32_t evexZeroMaskAccepted : 1;
uint32_t acceptsLock : 1; uint32_t acceptsLock : 1;
uint32_t acceptsREP : 1; uint32_t acceptsREP : 1;
uint32_t acceptsREPEREPNE : 1; uint32_t acceptsREPEREPNE : 1;

File diff suppressed because it is too large Load Diff

View File

@ -31251,67 +31251,67 @@ const ZydisInstructionTableNode filterEVEXL2[][2] =
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA3) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA3)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA2) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA2)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA7) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA7)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA6) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA6)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BAF) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BAF)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BAE) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BAE)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB3) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB3)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB2) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB2)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA5) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA5)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA4) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA4)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA9) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA9)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x0FA8) /*0001*/ ZYDIS_DEFINITION_1OP(0x0FA8)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB1) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB1)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB0) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB0)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB5) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB5)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,
/*0001*/ ZYDIS_DEFINITION_2OP(0x1BB4) /*0001*/ ZYDIS_DEFINITION_1OP(0x1BB4)
}, },
{ {
/*0000*/ ZYDIS_INVALID, /*0000*/ ZYDIS_INVALID,

View File

@ -289,14 +289,14 @@ enum ZydisSemanticOperandTypes
/* ---------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------- */
/** /**
* @brief Values that represent zydis evex.b-functionalities. * @brief Values that represent zydis evex.b-contexts.
*/ */
enum ZydisEvexBFunctionalities enum ZydisEvexBFunctionalities
{ {
ZYDIS_EVEXB_FUNCTIONALITY_NONE, ZYDIS_EVEX_CONTEXT_INVALID,
ZYDIS_EVEXB_FUNCTIONALITY_BC, ZYDIS_EVEX_CONTEXT_BC,
ZYDIS_EVEXB_FUNCTIONALITY_RC, ZYDIS_EVEX_CONTEXT_RC,
ZYDIS_EVEXB_FUNCTIONALITY_SAE ZYDIS_EVEX_CONTEXT_SAE
}; };
/* ---------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------- */

View File

@ -69,10 +69,15 @@ const ZydisOperandDefinition operandDefinitions1[][1] =
/*0042*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_M1664, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE) }, /*0042*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_M1664, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE) },
/*0043*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_M1632, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE) }, /*0043*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_M1632, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE) },
/*0044*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READ) }, /*0044*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READ) },
/*0045*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_WRITE) }, /*0045*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE) },
/*0046*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_WRITE) }, /*0046*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE) },
/*0047*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE) }, /*0047*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) },
/*0048*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READ) } /*0048*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*0049*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_WRITE) },
/*004A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_WRITE) },
/*004B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE) },
/*004C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READ) },
/*004D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }
}; };
const ZydisOperandDefinition operandDefinitions2[][2] = const ZydisOperandDefinition operandDefinitions2[][2] =
@ -454,73 +459,70 @@ const ZydisOperandDefinition operandDefinitions2[][2] =
/*0176*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0176*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*0177*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0177*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*0178*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0178*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*0179*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0179*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) },
/*017A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*017A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) },
/*017B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) }, /*017B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) },
/*017C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) }, /*017C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*017D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) }, /*017D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*017E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) }, /*017E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) },
/*017F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*017F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0180*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0180*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0181*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_READ) }, /*0181*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0182*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0182*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM_CD32, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0183*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0183*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM512, ZYDIS_OPERAND_ENCODING_RM_CD64, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0184*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0184*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0185*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM_CD32, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0185*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0186*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM512, ZYDIS_OPERAND_ENCODING_RM_CD64, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0186*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0187*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0187*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*0188*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0188*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0189*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*0189*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*018A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*018A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*018B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*018B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*018C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*018C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*018D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*018D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*018E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*018E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*018F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*018F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0190*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0190*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0191*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0191*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0192*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM8, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0192*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0193*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0193*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0194*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0194*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0195*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0195*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0196*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0196*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0197*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0197*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*0198*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0198*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) },
/*0199*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*0199*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) },
/*019A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*019A*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) },
/*019B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) }, /*019B*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) },
/*019C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) }, /*019C*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*019D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_READ) }, /*019D*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*019E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_READ) }, /*019E*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*019F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*019F*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A0*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*01A0*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A1*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MSKR, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*01A1*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A2*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A2*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A3*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A3*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A4*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A4*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM_CD32, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A5*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A5*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A6*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM128, ZYDIS_OPERAND_ENCODING_RM_CD16, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A6*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A7*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM256, ZYDIS_OPERAND_ENCODING_RM_CD32, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A7*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A8*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A8*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01A9*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM16, ZYDIS_OPERAND_ENCODING_RM_CD2, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01A9*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AA*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AA*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AB*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AB*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AC*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AC*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AD*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AD*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AE*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AE*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01AF*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01AF*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B0*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B0*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B1*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM32_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B1*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B2*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B2*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B3*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B3*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B4*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD4, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B4*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) },
/*01B5*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBX, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR128, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B5*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) },
/*01B6*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBY, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B6*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) },
/*01B7*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_MEM64_VSIBZ, ZYDIS_OPERAND_ENCODING_RM_CD8, ZYDIS_OPERAND_ACTION_WRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR512, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ) }, /*01B7*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_AX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR16, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) },
/*01B8*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_REG, ZYDIS_OPERAND_ACTION_READ), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_VR256, ZYDIS_OPERAND_ENCODING_RM, ZYDIS_OPERAND_ACTION_READ) }, /*01B8*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) }
/*01B9*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_RAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR64, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) },
/*01BA*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_AX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR16, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) },
/*01BB*/ { ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_EAX, ZYDIS_OPERAND_ENCODING_NONE, ZYDIS_OPERAND_ACTION_READWRITE), ZYDIS_OPERAND_DEFINITION(ZYDIS_SEM_OPERAND_TYPE_GPR32, ZYDIS_OPERAND_ENCODING_OPCODE, ZYDIS_OPERAND_ACTION_READWRITE) }
}; };
const ZydisOperandDefinition operandDefinitions3[][3] = const ZydisOperandDefinition operandDefinitions3[][3] =

View File

@ -345,6 +345,8 @@ static ZydisStatus ZydisDecodeEVEX(uint8_t evexByte1, uint8_t evexByte2, uint8_t
info->details.internal.X = 0x01 & ~info->details.evex.X; info->details.internal.X = 0x01 & ~info->details.evex.X;
info->details.internal.B = 0x01 & ~info->details.evex.B; info->details.internal.B = 0x01 & ~info->details.evex.B;
info->details.internal.L = info->details.evex.L; info->details.internal.L = info->details.evex.L;
info->details.internal.R2 = 0x01 & ~info->details.evex.R2;
info->details.internal.V2 = 0x01 & ~info->details.evex.V2;
return ZYDIS_STATUS_SUCCESS; return ZYDIS_STATUS_SUCCESS;
} }
@ -652,7 +654,8 @@ static ZydisStatus ZydisDecodeOperandModrmRm(ZydisInstructionDecoder* decoder,
uint8_t modrm_rm = (info->details.internal.B << 3) | info->details.modrm.rm; uint8_t modrm_rm = (info->details.internal.B << 3) | info->details.modrm.rm;
if (info->details.modrm.mod == 3) if (info->details.modrm.mod == 3)
{ {
return ZydisDecodeOperandRegister(info, operand, registerClass, modrm_rm); return ZydisDecodeOperandRegister(info, operand, registerClass,
(info->details.internal.X << 4) | modrm_rm);
} }
operand->type = ZYDIS_OPERAND_TYPE_MEMORY; operand->type = ZYDIS_OPERAND_TYPE_MEMORY;
uint8_t displacementSize = 0; uint8_t displacementSize = 0;
@ -861,10 +864,6 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
ZYDIS_ASSERT(info); ZYDIS_ASSERT(info);
ZYDIS_ASSERT(operand); ZYDIS_ASSERT(operand);
// TODO: EVEXR High-16 register specifier modifier P[4] Combine with EVEX.R and ModR/M.reg
// TODO: EVEXX High-16 register specifier modifier P[6] Combine with EVEX.B and ModR/M.rm, when SIB/VSIB absent
// TODO: EVEXV High-16 NDS/VIDX register specifier P[19] Combine with EVEX.vvvv or when VSIB present
// Fixed registers // Fixed registers
switch (type) switch (type)
{ {
@ -1030,6 +1029,7 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
case ZYDIS_OPERAND_ENCODING_REG: case ZYDIS_OPERAND_ENCODING_REG:
ZYDIS_ASSERT(info->details.modrm.isDecoded); ZYDIS_ASSERT(info->details.modrm.isDecoded);
return ZydisDecodeOperandRegister(info, operand, registerClass, return ZydisDecodeOperandRegister(info, operand, registerClass,
(info->details.internal.R2 << 4) |
(info->details.internal.R << 3) | info->details.modrm.reg); (info->details.internal.R << 3) | info->details.modrm.reg);
case ZYDIS_OPERAND_ENCODING_RM: case ZYDIS_OPERAND_ENCODING_RM:
case ZYDIS_OPERAND_ENCODING_RM_CD2: case ZYDIS_OPERAND_ENCODING_RM_CD2:
@ -1051,7 +1051,6 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
(info->details.internal.B << 3) | registerId); (info->details.internal.B << 3) | registerId);
} }
case ZYDIS_OPERAND_ENCODING_VVVV: case ZYDIS_OPERAND_ENCODING_VVVV:
// TODO: VVVV register can be extended by EVEX.V'
switch (info->encoding) switch (info->encoding)
{ {
case ZYDIS_INSTRUCTION_ENCODING_VEX: case ZYDIS_INSTRUCTION_ENCODING_VEX:
@ -1061,7 +1060,7 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
case ZYDIS_INSTRUCTION_ENCODING_EVEX: case ZYDIS_INSTRUCTION_ENCODING_EVEX:
ZYDIS_ASSERT(info->details.evex.isDecoded); ZYDIS_ASSERT(info->details.evex.isDecoded);
return ZydisDecodeOperandRegister(info, operand, registerClass, return ZydisDecodeOperandRegister(info, operand, registerClass,
(0x0F & ~info->details.evex.vvvv)); (info->details.internal.V2 << 4) | (0x0F & ~info->details.evex.vvvv));
case ZYDIS_INSTRUCTION_ENCODING_XOP: case ZYDIS_INSTRUCTION_ENCODING_XOP:
ZYDIS_ASSERT(info->details.xop.isDecoded); ZYDIS_ASSERT(info->details.xop.isDecoded);
return ZydisDecodeOperandRegister(info, operand, registerClass, return ZydisDecodeOperandRegister(info, operand, registerClass,
@ -1245,7 +1244,6 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
operand->mem.disp.value.sdword *= evexCD8Scale; operand->mem.disp.value.sdword *= evexCD8Scale;
} }
} }
// TODO: VSIB index can be extended by EVEX.V'
if (vsibBaseRegister) if (vsibBaseRegister)
{ {
if (info->details.modrm.rm != 0x04) if (info->details.modrm.rm != 0x04)
@ -1257,10 +1255,12 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
case 16: case 16:
return ZYDIS_STATUS_INVALID_VSIB; return ZYDIS_STATUS_INVALID_VSIB;
case 32: case 32:
operand->mem.index = operand->mem.index - ZYDIS_REGISTER_EAX + vsibBaseRegister; operand->mem.index = operand->mem.index - ZYDIS_REGISTER_EAX + vsibBaseRegister +
((info->details.evex.V2 == 1) ? 0 : 16);
break; break;
case 64: case 64:
operand->mem.index = operand->mem.index - ZYDIS_REGISTER_RAX + vsibBaseRegister; operand->mem.index = operand->mem.index - ZYDIS_REGISTER_RAX + vsibBaseRegister +
((info->details.evex.V2 == 1) ? 0 : 16);
break; break;
default: default:
ZYDIS_UNREACHABLE; ZYDIS_UNREACHABLE;
@ -1272,6 +1272,7 @@ static ZydisStatus ZydisDecodeOperand(ZydisInstructionDecoder* decoder, ZydisIns
switch (type) switch (type)
{ {
case ZYDIS_SEM_OPERAND_TYPE_FIXED1: case ZYDIS_SEM_OPERAND_TYPE_FIXED1:
operand->visibility = ZYDIS_OPERAND_VISIBILITY_IMPLICIT;
operand->type = ZYDIS_OPERAND_TYPE_IMMEDIATE; operand->type = ZYDIS_OPERAND_TYPE_IMMEDIATE;
operand->size = 8; operand->size = 8;
operand->imm.isSigned = ZYDIS_TRUE; operand->imm.isSigned = ZYDIS_TRUE;
@ -1704,33 +1705,7 @@ static void ZydisApplyInstructionDefinition(ZydisInstructionDecoder* decoder,
} }
} }
// Set AVX-512 info
if (info->encoding == ZYDIS_INSTRUCTION_ENCODING_EVEX)
{
if (definition->hasEvexAAA && info->details.evex.aaa)
{
info->avx.maskRegister = ZYDIS_REGISTER_K0 + info->details.evex.aaa;
}
if (definition->hasEvexZ && info->details.evex.z)
{
info->avx.maskMode = ZYDIS_AVX512_MASKMODE_ZERO;
} else
{
info->avx.maskMode = ZYDIS_AVX512_MASKMODE_MERGE;
}
switch (definition->evexBFunctionality)
{
case ZYDIS_EVEXB_FUNCTIONALITY_BC:
break;
case ZYDIS_EVEXB_FUNCTIONALITY_RC:
info->avx.roundingMode =
(((info->details.evex.L2 & 0x01) << 1) | info->details.evex.L) + 1;
case ZYDIS_EVEXB_FUNCTIONALITY_SAE:
info->avx.hasSAE = ZYDIS_TRUE;
default:
info->avx.broadcast = ZYDIS_AVX512_BCSTMODE_INVALID;
}
}
} }
/* ---------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------- */
@ -1946,9 +1921,8 @@ static ZydisStatus ZydisNodeHandlerVex(ZydisInstructionInfo* info, uint16_t* ind
} }
static ZydisStatus ZydisNodeHandlerMandatoryPrefix(ZydisInstructionDecoder* decoder, static ZydisStatus ZydisNodeHandlerMandatoryPrefix(ZydisInstructionDecoder* decoder,
ZydisInstructionInfo* info, uint16_t* index) uint16_t* index)
{ {
ZYDIS_ASSERT(info);
ZYDIS_ASSERT(index); ZYDIS_ASSERT(index);
// 0x66 has precedence over 0xF2 and 0xF3 // 0x66 has precedence over 0xF2 and 0xF3
@ -2271,7 +2245,7 @@ static ZydisStatus ZydisDecodeOpcode(ZydisInstructionDecoder* decoder,
status = ZydisNodeHandlerMode(decoder, &index); status = ZydisNodeHandlerMode(decoder, &index);
break; break;
case ZYDIS_NODETYPE_FILTER_MANDATORYPREFIX: case ZYDIS_NODETYPE_FILTER_MANDATORYPREFIX:
status = ZydisNodeHandlerMandatoryPrefix(decoder, info, &index); status = ZydisNodeHandlerMandatoryPrefix(decoder, &index);
break; break;
case ZYDIS_NODETYPE_FILTER_MODRMMOD: case ZYDIS_NODETYPE_FILTER_MODRMMOD:
status = ZydisNodeHandlerModrmMod(decoder, info, &index); status = ZydisNodeHandlerModrmMod(decoder, info, &index);
@ -2438,6 +2412,64 @@ ZydisStatus ZydisDecoderDecodeNextInstruction(ZydisInstructionDecoder* decoder,
goto DecodeError; goto DecodeError;
} }
// Set AVX-512 info
if (info->encoding == ZYDIS_INSTRUCTION_ENCODING_EVEX)
{
const ZydisInstructionDefinition* definition =
(ZydisInstructionDefinition*)info->details.internal.definition;
switch (definition->evexContext)
{
case ZYDIS_EVEX_CONTEXT_INVALID:
if (info->details.evex.b)
{
return ZYDIS_STATUS_DECODING_ERROR; // TODO:
}
break;
case ZYDIS_EVEX_CONTEXT_BC:
break;
case ZYDIS_EVEX_CONTEXT_RC:
info->avx.roundingMode =
(((info->details.evex.L2 & 0x01) << 1) | info->details.evex.L) + 1;
break;
case ZYDIS_EVEX_CONTEXT_SAE:
info->avx.hasSAE = ZYDIS_TRUE;
break;
default:
info->avx.broadcast = ZYDIS_AVX512_BCSTMODE_INVALID;
}
switch (definition->evexMaskPolicy)
{
case ZYDIS_AVX512_MASKPOLICY_MASK_ACCEPTED:
info->avx.maskRegister = ZYDIS_REGISTER_K0 + info->details.evex.aaa;
break;
case ZYDIS_AVX512_MASKPOLICY_MASK_REQUIRED:
if (info->details.evex.aaa == 0)
{
return ZYDIS_STATUS_INVALID_REGISTER;
}
info->avx.maskRegister = ZYDIS_REGISTER_K0 + info->details.evex.aaa;
break;
case ZYDIS_AVX512_MASKPOLICY_MASK_FORBIDDEN:
if (info->details.evex.aaa != 0)
{
return ZYDIS_STATUS_INVALID_REGISTER;
}
info->avx.maskRegister = ZYDIS_REGISTER_K0;
break;
default:
ZYDIS_UNREACHABLE;
}
if (definition->evexZeroMaskAccepted && info->details.evex.z)
{
info->avx.maskMode = ZYDIS_AVX512_MASKMODE_ZERO;
} else
{
info->avx.maskMode = ZYDIS_AVX512_MASKMODE_MERGE;
}
}
// Replace XCHG rAX, rAX with NOP alias // Replace XCHG rAX, rAX with NOP alias
if (info->mnemonic == ZYDIS_MNEMONIC_XCHG) if (info->mnemonic == ZYDIS_MNEMONIC_XCHG)
{ {

View File

@ -168,7 +168,7 @@ ZydisRegister ZydisRegisterEncode(ZydisRegisterClass registerClass, uint8_t id)
break; break;
default: default:
if ((registerClass < registerMapCount) && if ((registerClass < registerMapCount) &&
(id < (registerMap[registerClass].hi - registerMap[registerClass].lo))) (id <= (registerMap[registerClass].hi - registerMap[registerClass].lo)))
{ {
return registerMap[registerClass].lo + id; return registerMap[registerClass].lo + id;
} }